【Python实战】使用python计算多种还款方式的还款计划

随着人们经济活动的增加,用钱的地方越来越多,不管是像买房这样的大额支出还是个人消费型支出,越来越多的人选择贷款来解决眼前的经济危机。
而申请贷款就涉及到选择不同的还款方式,所需要偿还的欠款综合也大有不同,那么面对不同的还款方式,哪种最适合自己呢?
今天我们来简单介绍一下常见的几种还款方式,并通过python计算每一期的还款详情。

等额本金:本金保持相同,利息逐月递减,月还款数递减。

等额本息:本金+利息保持相同,本金逐月递增,利息逐月递减,月还款数不变。

等额本息还款,也称定期付息,即借款人每月按相等的金额偿还贷款本息,其中每月贷款利息按月初剩余贷款本金计算并逐月结清。
把按揭贷款的本金总额与利息总额相加,然后平均分摊到还款期限的每个月中。
作为还款人,每个月还给银行固定金额,但每月还款额中的本金比重逐月递增、利息比重逐月递减。

等本等息:本金+利息保持相同,最后一期包含尾数

随借随还:借出后就开始算利息,借出后可以随时还。

利随本清(一次性还本付息):贷款到期后一次性归还本金和利息。

按月付息到期还本:借款人每月只交付利息,在贷款到期日时一次性归还贷款本金

# -!- coding: utf-8 -!-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:getInterest.py
#日期:2019-09-02
#备注:多种利息计算方式,pip install PrettyTable 输出表格格式,decimal模块ROUND_HALF_UP函数进行四舍五入  
#     总逻辑:term_amt计算固定,prin计算固定,term_prin,term_int可变
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
from decimal import Decimalfrom prettytable import PrettyTable
import copy
from dealFloat import float_deal      # Decimal格式principal = Decimal('1000.00')     # 本金
annual_rate = Decimal('0.115')     # 年化利率
term_rate = annual_rate / Decimal('12')  # 月利率
day_rate = annual_rate / Decimal('12') /Decimal('30')  # 日利率repayPattern = {"MCAT": "随借随还,按日计息","BFTO": "利随本清,按日计息","MIRD": "按月付息到期还本","EPEI": "等本等息,按月付息",             # 对借款人最不利"MCEP": "等额本金,按月付息",             # 借款总利息最低"MCEI": "等额等息,按月付息"
}line = PrettyTable(["期数", "还款本息", "当期本金", "当期利息","剩余本金","还款方式"])#line.align["期数"] = "1"  # 以期数字段左对齐
#line.padding_width = 2    # 填充宽度(字段间隔)# "EPEI": "等本等息,按月付息"               每期利息和本金一样,最后一期本金为上一期的剩余本金,最后一期利息为总利息-已还利息
def get_EPEI(num):show = copy.deepcopy(line)term_int = float_deal(principal * term_rate)         # 每期还利息(2位小数)total_int = float_deal(principal*term_rate*num)     # 总利息(2位小数)term_prin = float_deal(principal / num)             # 每期还本金(2位小数)prin = principal                                    # 初始化剩余本金为借款本金for i in range(1,num+1):# 如果是最后一期,还款本金为上一期的剩余本金; 利息为总利息-已还利息if i == num:term_prin = printerm_int = total_int - (term_int*(num-1))term_amt = term_prin + term_intprin = prin - term_prin                               # 剩余本金=上期剩余本金-当期还本金show.add_row([i, term_amt, term_prin, term_int, prin,'EPEI'])print('等本等息总利息为:',total_int)print(show)# "MIRD": "按月付息到期还本"      最后一期还本金,每期利息固定
def get_MIRD(num):show = copy.deepcopy(line)term_int = float_deal(principal*term_rate)term_prin = float_deal(0.0)total_int = float_deal(principal * term_rate * num)  # 总利息(2位小数)prin = principalfor i in range(1,num+1):# 如果是最后一期,还款本金为上一期的剩余本金; 利息为总利息-已还利息if i == num:term_prin = printerm_int = total_int - (term_int*(num-1))term_amt = term_prin + term_intprin = prin - term_prin                                        # 剩余本金=上期剩余本金-当期还本金show.add_row([i, term_amt, term_prin, term_int, prin, 'MIRD'])print('按月付息到期还本总利息为:', total_int)print(show)# "等额本金,按月付息"
def get_MCEP(num):## 每月本金相同,利息递减,相当于剩余本金的利息,每期利息固定:上一期本金*利率show = copy.deepcopy(line)term_prin = float_deal(principal / num)               # 每期还本金(2位小数)prin = principaltotal_int = float_deal(0.0)for i in range(1, num + 1):term_int = float_deal(prin * term_rate)          # 每期利息固定:上一期本金*利率# 如果是最后一期,还款本金为上一期的剩余本金;if i == num:term_prin = printerm_amt = term_prin + term_intprin = prin - term_prin                  # 剩余本金=上期剩余本金-当期还本金show.add_row([i, term_amt, term_prin, term_int, prin,'MCEP'])total_int = float_deal(total_int +  term_int)print('等额本金总利息为:', total_int)print(show)# "MCEI": "等额本息,按月付息"
def get_MCEI(num):# 本金+利息保持相同,本金逐月递增,利息逐月递减,月还款数不变。show = copy.deepcopy(line)term_amt = float_deal((principal*term_rate*(1+term_rate)**num)/((1+term_rate)**num-1))      # 每期还款总额       **是幂运算prin = principaltotal_int = float_deal(0.0)for i in range(1, num + 1):term_int = float_deal(prin * term_rate)        # 每期利息计算固定:上一期本金*利率term_prin = term_amt - term_int# 如果是最后一期,还款本金为上一期的剩余本金;if i == num:term_prin = printerm_amt = term_prin + term_intprin = prin - term_prin             # 剩余本金=上期剩余本金-当期还本金show.add_row([i, term_amt, term_prin, term_int,prin,'MCEI'])total_int = total_int +  term_intprint('等额本息总利息为:', total_int)print(show)# "MCAT": "随借随还,按日计息"
def get_MCAT(num,pay):show = copy.deepcopy(line)day_int = float_deal(pay*day_rate*num)repay_amt = day_int + payre_prin = principal-payif pay>principal:print("还款金额:",pay,"不能大于本金:",principal)else:show.add_row([1, repay_amt, pay, day_int, re_prin, 'MCAT'])print('随借随还总利息为:', day_int)print(show)# "BFTO": "利随本清,按日计息"
def get_BFTO(num):show = copy.deepcopy(line)day_int = float_deal(principal*day_rate*num)repay_amt = day_int + principalshow.add_row([1, repay_amt, principal, day_int, 0.0, 'BFTO'])print('利随本清总利息为:', day_int)print(show)if __name__ == '__main__':get_EPEI(24)          # 等本等息,按月付息get_MIRD(24)          # 到期还本,按月付息get_MCEP(24)          # 等额本金,按月付息get_MCEI(24)          # 等额本息,按月付息get_MCAT(720,195)     # 随借随还,按日计息get_BFTO(720)         # 利随本清,按日计息

以下是控制台打印效果,以等额本息为模版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts自定义showlading()样式和文本

1、首先引入echarts.js 2、在页面定义自己的echarts变量 var myChart echarts.init(document.getElementById(main)); 3、自定义showLoading()样式 myChart.showLoading(default, {text:统计中,请稍候...,maskColor: #404a59,textColor: #fff,}); text:文本内…

测试人员做到这几点,线上80%的BUG将落入你手,企业将避免重大风险

BUG事故给敲了很大的警钟,也给公司带来重大损失,作为测试人员,我们如何提现发现线上BUG并及时解决,避免落入用户手中,给企业带来无法挽回的损失。 案例1: 1月20日凌晨,拼多多App因技术漏洞&am…

解决$ is not define

今天写js的时候,发现怎么也没有效果。然后我前端调试的时候报这样的错 $ is not define 这个错误我以前也出现过。所以就这个错误的解决,我来总结一下。 1.首先,"$"这个符号是在jquery中定义的。所以你要看一下,你有没…

模拟导入系统通讯录5000+手机号 校验大量数据处理

模拟导入系统通讯录5000手机号 校验大量数据处理 之前再测试一个导入手机通讯录系统时,随机抽了几个人的手机进行了测试,都导入显示正常 当公司BD进行项目试用时,导入通讯录一直处于下图加载中 1、于是进行抓包查看日志进行定位&#xff0c…

Monkey随机性能压测初探(一)

Monkey介绍 Monkey程序由Android系统自带,是Android SDK提供的一个命令行工具, 可运行Android模拟器和实体设备上。Monkey会发送伪随机的用户事件流,通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对程序进行压力测试,检测…

【Java】使用前准备工作配置环境变量

我们要使用java前,必须先安装JDK并且配置相关的环境变量,如果我们未配置环境变量,那么我们在cmd命令中,输入javac,会提示“javac”不是内部或外部命令,这里主要介绍如何配置jdk的环境变量。 JDK官网下载&a…

Jmeter性能测试工具Timer定时器详解

jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其中,定时器(timer)是很重要的一个元件,jemter提供了9种定时器,下面一一介绍: 一、定时器的作用域 1、定时器是在每个…

【Maven】Java项目管理工具

一、为什么要Maven 在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。 Maven是当前最受欢迎的Java项目管理构建自动化综合…

fiddler抓包工具配置详解

没有解决不了的问题,只是没有找到合适的方法 fiddler官网 https://www.progress.com/ 官网下载fiddler https://www.telerik.com/download/fiddler/fiddler4 fiddler插件下载 https://www.telerik.com/fiddler/add-ons 最近看到很多人都在问的一个问题&#xff0…

【Maven】Eclipse中的Maven项目安装与配置

上一篇文章我们了解到了Maven的基本信息和如何在电脑本地安装Maven,这篇文章主要介绍如何在Eclipse关联Maven的配置和本地仓储地址,并且如何创建一个Maven项目、关联依赖包等。 一、关联Eclipse和Maven 点击Windows菜单栏下的Preference,找…

python两个字典合并,两个list合并

python两个字典合并,两个list合并 1.两个字典:a{a:1,b:2,c:3} b {aa:11,bb:22,cc:33} 合并1:dict(a,**b) 操作如下: 合并2:dict(a.items()b.items()) 如下: 合并3:c {} c.update(a) c.up…

C++ 一个字符串只包含K和D。K表示杀人,D表示死亡。计算连续杀敌次数,阵亡则归零。

题&#xff1a; 首先笔者的第一思路是前后两个字符串比较。如果相同index。 #include<iostream> #include<stdio.h> #include<string> using namespace std; int main() {string s;cout << "6请输入字符串&#xff1a;" << endl;cin …

【业务办理】广州市户口市内迁移流程

一、申办条件 符合下列条件之一的本市户籍人员&#xff08;除学校学生集体户口外&#xff09;&#xff0c;可办理户口市内迁移。 1.迁入本人合法住宅房屋地址。 2.投靠直系亲属&#xff0c;迁入其合法住宅房屋地址&#xff0c;或迁入其家庭户内。 3.因离婚、房屋所有权发生转移…

【Python】pyCryptodome模块实现AES加密、解密

高级加密标准&#xff08;英语&#xff1a;Advanced Encryption Standard&#xff0c;缩写&#xff1a;AES&#xff09;&#xff0c;在密码学中又称Rijndael加密法&#xff0c;是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES&#xff0c;已经被多方分析且广…

jmeter环境部署

win环境下&#xff1a; 1、复制jmeter整个包到本地解压、安装jdk 2、jdk环境环境变量配置&#xff08;电脑-属性-高级系统设置-环境变量&#xff09; 系统变量JAVA_HOME 变量值C:\Program Files\Java\jdk1.8.0_101 用户变量path 变量值%JAVA_HOME%\bin cmd下输java或jav…

【Python】pdf2image模块+poppler将PDF转换为图片

有时我们需要将PDF转换成图片&#xff0c;今天我们主要说的是pdf2imagepoppler对PDF转换成图片格式。 pdf2image是个包装器&#xff0c;真正的转换工具是poppler GitHub地址&#xff1a;https://github.com/Belval/pdf2image &#xff0c;上面也有相关的配置说明。 1、安装pdf…

jmeter五种参数化方式之CSV Data Set Config参数化

一、用户定义的变量 一般会设置全局不变的参数&#xff0c;如host、账号、密码等 设置名称username&#xff0c;password 值王荔&#xff0c;123456 线程设置2次和循环设置2次&#xff0c;2次采样器传参和结果一样 二、用户参数 添加用户参数 设置3组参数 参数化 当线程设置…

【Liunx服务器】阿里云服务器下部署多个tomcat服务

现在有这样一个场景&#xff0c;一个阿里云服务器上面已经有tomcat项目和多个maven项目&#xff0c;现在需要在一个新项目中配置一个空的tomcat&#xff0c;现将具体流程记录下来。 1.下载tomcat包或者找到已下载的包 2.将tomcat的包解压到指定项目目录&#xff1a;/data/proj…

python 按照当前日期创建文件

import time import os.path#获得当前系统时间的字符串 localtimetime.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time())) print(localtimelocaltime) #系统当前时间年份 yeartime.strftime(%Y,time.localtime(time.time())) #月份 monthtime.strftime(%m,time.localti…

数据结构二叉树遍历求后序

注意左右子树的递归 参考自https://blog.csdn.net/hou_blog/article/details/50015503