Python实战:个人贷款计算器

78b833a7aaa208904f2f8c27312f4269.gif

在后台回复【阅读书籍】

即可获取python相关电子书~

Hi,我是山月。

不知道大家生活里有没有用过个人贷款计算器。现在网上有很多这方面的在线工具,挺方便的,比如招商银行官网里:

5c3dd604301a2df37f2f82eb02cd19e6.png

👆官网:http://www.cmbchina.com/CmbWebPubInfo/Cal_Loan_Per.aspx?chnl=dkjsq

其实它的原理很简单,加之,基础的tkinter知识山月已经介绍过了👉:初识Tkinter:一些必须掌握的基础知识

因此,山月就想着把它当成一个小的实战项目来巩固一下知识,顺便检验下学习成果。

如果对GUI界面有兴趣的小伙伴可以一起来学习哦~

效果👇(文末提供源代码):

01

原理

实现的基本原理是通过贷款金额、贷款年限、贷款利率来得出每月需要还多少钱,本息一共是多少

当然,有两种选择方式来还款:等额本金和等额本息。

这里不说两种还款方式的优劣,只说两种还款方式的每月还款金额计算的差异。

等额本息还款计算:

每月还款额 = 贷款本金×[月利率×(1+月利率) ^ 还款月数]÷{[(1+月利率) ^ 还款月数]-1}

等额本金还款计算:

每月还款额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率。

现在原理我们知道的差不多了,我们来设计下我们的框架

  • 获取贷款金额、贷款年限、贷款利率

  • 点击计算,出现两种还款方式的结果:每月还款金额、总支付利息、本息合计

  • 为了重复计算,设置个重置功能,把输入的值和产生的值删除掉

下面我们开始来看看吧。

02

实现目标

1、界面构建

我们来构建下我们的计算界面吧:

48c51dd857b349d4a2a5112f647883c8.png

这些都是些基础的组件摆放,我们直接来看实现的代码:

bd9d950fd03551c761dcc18c802a07f6.png

代码较长,为不影响观看,以图片格式摆放,如果需要源代码,在后台回复【贷款计算器】即可获取。

2、函数说明

目前的三个按钮【计算】、【重置】、【点击查看】点击了都没有反应,因为我们还没绑定对应的函数。

现在我们来完善函数的内容。

1) 函数count

由于有很多数据要处理,所以我们先构建个函数count来处理一些数据

由于等额本金还款方式的已归还本金累计额不方便直接计算,所以这部分在后面再进行计算。

# 所有数据计算
def count(self):
    self.Loan_money = int(self.Entry_money.get())   # 获取输入的贷款本金
    self.Loan_term = int(self.Entry_term.get())     # 获取输入的贷款年限
    self.Loan_rate = float(self.Entry_rate.get())   # 获取输入的贷款年利率

    self.Loan_term_month = self.Loan_term*12       # 把贷款年限的单位由年转换成月
    self.Loan_rate_month = self.Loan_rate/100/12   # 把年利率转换成月利率

    '''
    等额本息还款法:
    每月还款额 = 贷款本金×[月利率×(1+月利率) ^ 还款月数]÷{[(1+月利率) ^ 还款月数]-1}

    等额本金还款:
    每月还款额=(贷款本金÷还款月数)+(贷款本金-已归还本金累计额)×月利率。

    '''
    # 计算等额本息法每月还款金额
    self.repayment_months_money = self.Loan_money*self.Loan_rate_month*pow((1+self.Loan_rate_month),self.Loan_term_month)/(pow((1+self.Loan_rate_month),self.Loan_term_month)-1)
    self.repayment_months_money_2 = round(self.repayment_months_money,2)
    
    # 计算等额本息法总共要还的本息之和
    self.repayment_all_money = self.repayment_months_money_2 * self.Loan_term_month
    self.repayment_all_money_2 = round(self.repayment_all_money,2)
    
    # 计算等额本息法要还的利息
    self.repayment_rate_money = self.repayment_all_money - self.Loan_money
    self.repayment_rate_money_2 = round(self.repayment_rate_money,2)
    
    # 等额本金法每月需要还款本金:贷款本金÷还款月数
    self.money_month = self.Loan_money/self.Loan_term_month

注意:由于存在四舍五入以及python是先转换成2进制进行计算等原因,不同工具计算结果会有些许差异。

这里暂且不表,我们主要看思路。

比如我们贷款50w,年限20年,年利率4.5%。这个时候,我们计算出来的结果:

计算等额本息法每月还款金额:  3163.25       
计算等额本息法总共要还的本息之和:  759180.0
计算等额本息法要还的利息:  259180.0

但是我们在招商银行里的计算结果:

af847368c1be6430870108575672b188.png

可以发现,除月供都是3163.25之外,本息之和和利息总额有0.75的差距。

山月的本息之和的计算方式:月供金额*月份,即3163.25*240=759180。

2)函数show

这部分是计算按钮对应的函数。

即我们通过获取Entry控件输入的数据,经过处理计算,把结果写入到对应的Text控件

# 计算按钮对应的函数
def show(self):
    self.count()

    # 把等额本息还款法的结果插入对应的Text组件
    self.Text_months_money.delete(1.0, "end") 
    self.Text_months_money.insert('end',self.repayment_months_money_2)
    self.Text_total_rates.delete(1.0, "end") 
    self.Text_total_rates.insert('end',self.repayment_rate_money_2)
    self.Text_total_money.delete(1.0, "end") 
    self.Text_total_money.insert('end',self.repayment_all_money_2)

    # 计算等额本金法还款本息之和和还款利息
    self.all_money_Equalloan = 0
    for i in range(self.Loan_term_month):
        self.repayment_months_money = self.money_month + (self.Loan_money-(self.money_month*i))*self.Loan_rate_month
        self.repayment_months_money_2 = round(self.repayment_months_money,2)
        self.all_money_Equalloan += self.repayment_months_money_2
        self.all_money_Equalloan_2 = round(self.all_money_Equalloan,2)
    self.Loan_money_Equalloan = self.all_money_Equalloan_2 - self.Loan_money
    self.Loan_money_Equalloan_2 = round(self.Loan_money_Equalloan,2)

    # 把等额本金还款法的结果插入对应的Text组件
    self.Text_total_rates_Equalloan.delete(1.0, "end") 
    self.Text_total_rates_Equalloan.insert('end',self.Loan_money_Equalloan_2)
    self.Text_total_money_Equalloan.delete(1.0, "end") 
    self.Text_total_money_Equalloan.insert('end',self.all_money_Equalloan_2)

3)函数cle

这是重置按钮对应的函数,用来删除Entry控件和Text控件的内容

# 重置按钮对应的函数
def cle(self):
    self.Entry_money.delete(0,"end")
    self.Entry_term.delete(0,"end")
    self.Entry_rate.delete(0,"end") 

    self.Text_months_money.delete(1.0, "end") 
    self.Text_total_rates.delete(1.0, "end") 
    self.Text_total_money.delete(1.0, "end") 
    self.Text_total_rates_Equalloan.delete(1.0, "end") 
    self.Text_total_money_Equalloan.delete(1.0, "end")

4)函数repayment

这是点击查看按钮对应的函数。

因为等额本金每月的还款金额是在慢慢的减少的,所以这里另外创建了个顶级窗口来显示月供数据

# 点击查看按钮对应的函数    
def repayment(self):
    self.count()

    # 构建个顶级窗口
    self.top_repayment = tkinter.Toplevel()
    self.top_repayment.lift(windows)
    self.top_repayment.title('每月还款')
    self.top_repayment.geometry('300x500+200+80')
    self.top_repayment.configure(bg='#576679')

    # 设置带滚动条的Text组件
    scr = tkinter.Scrollbar(self.top_repayment)
    scr.pack(side=RIGHT, fill=Y)
    Text_repayment_month = tkinter.Text(self.top_repayment, width=60, height=40, font=('黑体',12),fg='#E9D1A7', bg='#576679',yscrollcommand=scr.set)
    Text_repayment_month.pack(expand=YES,fill=BOTH)

    # 计算等额本金还款法每月还款金额,并插入到Text组件里
    for i in range(self.Loan_term_month):
        self.repayment_months_money = self.money_month + (self.Loan_money-(self.money_month*i))*self.Loan_rate_month
        self.repayment_months_money_2 = round(self.repayment_months_money,2)
        Text_repayment_month.insert("end", " 第 %s 月: %s元" % (i+1,self.repayment_months_money_2))
        Text_repayment_month.insert(tkinter.INSERT, '\n')  # 换行

结果(贷款50w,年限20年,年利率4.5%):

347ad719dbd0db95dc5a3262fcbc929e.png

招商银行计算结果:

c3242b898ea379d782c2084131d0f21f.png

bingo~现在就是组装啦,你会了吗?

参考代码放在后台了,回复【贷款计算器】自取。

已经到底啦~(≧▽≦*)/~

d0e4495b59e7a7f647eadccca88ab9e8.png 往 期 推 荐 c692b3b297957170858578af48f46461.png

初识Tkinter:一些必须掌握的基础知识

2021-12-09

2708972494f3996e9b7ed6771f01ca45.png

用Python写份【幸运】的元旦祝福

2021-12-31

1b7715a330c639873963b5c5a2181741.png

年会将近?赶紧学学如何用Python做个抽奖界面

2022-01-02

981fe2fbd209b6e76277f8a462485384.png

如何用Python做日历?

2022-01-10

2b0f6be86367630f0375cce76a3248f3.png

ebe18c015876ce00a5a85a1a95787c39.gif

您的“点赞”、“在看”和 “分享”是我们产出的动力。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值