python123题目——分期付款计算器

类型:简单分支

描述

购买房屋或大宗家电时,很多时候可以分期付款,还款方式分为等额本息和等额本金两种:

等额本息(Average Capital Plus Interest:ACPI)还款公式:

每月还款额=贷款本金*月利率*(1+月利率)**总还款月数/((1+月利率)**总还款月数-1)

等额本金(Average Capital:AC)还款公式:

每月还款额=贷款本金/总还款月数+(贷款本金-累计已还款本金)*月利率

设计一个程序计算分期付款时每一期的应还款额,还款方式输入错误时,输出“还款方式输入错误”。

输入格式

4行输入:

  • 第1行输入一个浮点数,表示贷款本金
  • 第2行输入一个整数,表示分期月数
  • 第3行输入一个字符串,表示还款方式,限定只能输入"ACPI"或"AC",分别表示等额本息和等额本金
  • 第4行输入一个浮点数,表示月利率

输出格式

输出每月还款额,等额本金方式时,输出的数字间用逗号分隔(用round()函数保留2位小数)

还款方式输入错误时,输出“还款方式输入错误”

示例 1

输入:
6800
12
AC
0.006
输出:[607.47, 604.07, 600.67, 597.27, 593.87, 590.47, 587.07, 583.67, 580.27, 576.87, 573.47, 570.07]

参考代码

这道题当时考试时错的,怎么改也改不对,就是不知道自己哪里错了……

现在回忆了一下,提醒各位一下,容易被忽视的点在‘AC’公式中的‘累计已还款本金’。什么是‘累计已还款本金’?不是贷款数-还款数!

还款=本金+利息,像是之前那么减的话,其实是把利息也考虑进去了,而公式中该位置只与本金相关。

所以‘累计已还款本金’应该是:

price / month * i

这里的i是第i月的意思。

整体代码如下:

price,month,mode,rate = float(input()),int(input()),input(),float(input())
if mode == 'AC':
    ls = []
    for i in range(month):
        repayment = price / month + (price - price / month * i) * rate
        ls.append(round(repayment,2))
    print(ls)
elif mode == 'ACPI':
    repayment = price * rate * (1 + rate) ** month /((1 + rate) ** month - 1)
    print(round(repayment,2))
else:
    print('还款方式输入错误')

你可能感兴趣的:(python123题库解答,python,开发语言)