2185. A08 类-贷款

""" 按揭贷款:各种贷款选择除了有共同点(每次贷款包含本金和利息)外,又有不同点(如利率、是否支付点等),因此可将按揭贷款中的贷款,设计成一个类 Mortgage ,而 3 种贷款设计成它的子类。由于贷款类并不作具体的,诸如计算利息等这类计算,故可以将其设计成抽象类( abst\fract class ),只包含必要的供子类使用的函数,而不做具体的实现,也不建议直接实例化这个类。

接下来我们对 Mortgage 类和函数 findPayment 进行说明:

  • 每月应支付给银行的还款由函数 findPayment 计算,公式为:

$$loan \frac{r (1+r)^m}{(1+r)^m - 1} $$

其中:loan 为贷款额, r 是月利息率, m 是贷款月数。

  • Mortgage 对象初始化时,需要指定贷款额( loan )、月利息率( rate )、贷款期限( months ,以月计),以及每月开始时—即到该月—已经支付的金额( paid ,是一个列表)、每月开始时还剩的贷款额( owed ,是一个列表)、每月应付金额(payment ),以及对贷款类型的描述( legend )。 __init__ 函数中的参数 loan 为贷款额, months 为还款月数, annRate 为年利息。例如年利息为 6.5% ,则初始化时,annRate 的值为 6.5;

  • makePayment 方法用于记录贷款的支付情况,每月支付给银行的金额,一部分用于支付利息,一部分用于归还本金。首先,在 paid 中,添加当月还款金额;然后,用前一月结束时,还欠银行的钱减去上一个月的利息,即为本月已还的本金。则本月还欠银行的本金,为上月本金减去本月已还本金。因此,该方法中,同时对 paid 和 owed 属性值进行了修改;

  • getTotalPaid 方法用于计算支付给银行的本金和利息总额。

请在Begin和End之间按要求补充代码,然后提交全部代码:

"""

def findPayment(loan, r, m): # 请在此添加代码,补全函数findPayment #********** Begin *********# #********** End *********# class Mortgage(object): def __init__(self, loan, annRate, months): # 请在此添加代码,补全函数__init__ #********** Begin *********# #********** End *********# self.legend = None def makePayment(self): # 请在此添加代码,补全函数makePayment #********** Begin *********# #********** End *********# def getTotalPaid(self): # 请在此添加代码,补全函数getTotalPaid #********** Begin *********# #********** End *********# def __str__(self): return 'The Mortgage is {self.legend}, Loan is {self.loan}, Months is {self.months}, Rate is {self.rate:.2f}, Monthly payment is {self.payment:.2f}'.format(self=self) if __name__=="__main__": loan, annRate, months = [float(x) for x in input().split()] m1 = Mortgage(loan, annRate, months) print(m1) m1.makePayment() m1.makePayment() print('Two months payment is {:.2f}'.format(m1.getTotalPaid()))

输入

从键盘输入一组loan, annRate, months的值(用空格划分)

输出

输出格式化信息

样例

标准输入 复制文本
100000 6.5 120
标准输出 复制文本
The Mortgage is None, Loan is 100000.0, Months is 120.0, Rate is 0.01, Monthly payment is 1135.48
Two months payment is 2270.96
登录以提交代码。
单点时限 1 秒
内存限制 128 MB
提交 111
通过 54