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