第1关:按揭贷款——定义抽象类

编程要求

本关的编程任务是补全 7-1.py 文件中 findPayment 、init 、 makePayment 以及 getTotalPaid 四个函数,以实现计算按揭贷款的要求。具体要求如下:

本关要求补全上述描述的 4 个函数,并通过研究按揭贷款的规则,来帮助人们选择合适的贷款方式;
具体请参见后续测试样例。
本关涉及的代码文件7-1.py的代码框架如下:

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”:
print(Mortgage(100000, 6.5, 36))
print(Mortgage(100000, 6.5, 120))

测试说明

平台会对你编写的代码进行测试:

测试输入:无输入
预期输出:

The Mortgage is None, Loan is 100000, Months is 36, Rate is 0.01, Monthly payment is 3064.90
The Mortgage is None, Loan is 100000, Months is 120, Rate is 0.01, Monthly payment is 1135.48
开始你的任务吧,祝你成功!

代码

def findPayment(loan, r, m):#********** Begin *********## 请在下面编写代码return loan*((r*pow(1+r,m)/(pow(1+r,m)-1)))# 请不要修改下面的代码#********** End *********#
class Mortgage(object):def __init__(self, loan, annRate, months):#********** Begin *********## 请在下面编写代码self.loan=loanself.annRate=annRateself.months=monthsself.rate = self.annRate/12/100self.paid = [0.0]self.owed = [loan]self.payment = findPayment(loan,self.rate,months)# 请不要修改下面的代码#********** End *********#self.legend = Nonedef makePayment(self):#********** Begin *********## 请在下面编写代码self.paid.append(self.payment)reduction = self.payment - self.owed[-1] * self.rateself.owed.append(self.owed[-1] - reduction)# 请不要修改下面的代码#********** End *********#def getTotalPaid(self):#********** Begin *********## 请在下面编写代码return sum(self.paid)# 请不要修改下面的代码#********** 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__":print(Mortgage(100000, 6.5, 36))print(Mortgage(100000, 6.5, 120))

第2关:三种贷款方式建模

编程要求

本关的编程任务是,补全 7-2.py文件中 Begin-End 区间的代码,实现用三种贷款方式建模的要求。具体要求如下:

本关要求补全7-2.py文件中,3 个子类定义的 init 函数和 makePayment 函数,以实现三种贷款方式建模的功能;
具体请参见后续测试样例。
本关涉及的代码文件 7-2.py 的代码框架如下:

def findPayment(loan, r, m):
return loan * ((r * (1 + r) ** m) / ((1 + r) ** m - 1))
class Mortgage(object):
def init(self, loan, annRate, months):
self.loan = loan
self.rate = annRate / 1200.0
self.months = months
self.paid = [0.0]
self.owed = [loan]
self.payment = findPayment(loan, self.rate, self.months)
self.legend = None
def makePayment(self):
self.paid.append(self.payment)
reduction = self.payment - self.owed[-1] * self.rate
self.owed.append(self.owed[-1] - reduction)
def getTotalPaid(self):
return sum(self.paid)
def str(self):
return str(self.legend)
class Fixed(Mortgage):
def init(self, loan, r, months):
# 请在此添加代码,补全函数__init__
#********** Begin #
#
* End #
self.legend = 'Fixed, ’ + str® + ‘%, for ’ + str(months) + ’ months’
class FixedWithPoints(Mortgage):
def init(self, loan, r, months, pts):
# 请在此添加代码,补全函数__init__
#
* Begin #
#
* End #
self.legend = 'Fixed, ’ + str® + ‘%, ’ + str(pts) + ’ points, for ’ + str(months) + ’ months’
class TwoRate(Mortgage):
def init(self, loan, r, months, teaserRate, teaserMonths):
# 请在此添加代码,补全函数__init__
#
* Begin #
#
* End #
self.legend = str(teaserRate)
+ '% for ’ + str(self.teaserMonths)
+ ’ months, \n then ’ + str® + ‘%, for ’ + str(months) + ’ months’
def makePayment(self):
# 请在此添加代码,补全函数makePayment
#
* Begin #
#
* End *********#
Mortgage.makePayment(self)
if name==“main”:
print(Fixed(100000, 6.5, 36))
print(Fixed(100000, 6.5, 120))
print(FixedWithPoints(100000, 6.5, 36, 20))
print(FixedWithPoints(100000, 6.5, 120, 20))
print(TwoRate(100000, 9.0, 36, 4.8, 12))
print(TwoRate(100000, 7.0, 120, 4.8, 36))

测试说明

平台会对你编写的代码进行测试:

测试输入:无输入
预期输出:

Fixed, 6.5%, for 36 months
Fixed, 6.5%, for 120 months
Fixed, 6.5%, 20 points, for 36 months
Fixed, 6.5%, 20 points, for 120 months
4.8% for 12 months,
then 9.0%, for 36 months
4.8% for 36 months,
then 7.0%, for 120 months
开始你的任务吧,祝你成功!

代码

def findPayment(loan, r, m):return loan * ((r * (1 + r) ** m) / ((1 + r) ** m - 1))class Mortgage(object):def __init__(self, loan, annRate, months):self.loan = loanself.rate = annRate / 1200.0self.months = monthsself.paid = [0.0]self.owed = [loan]self.payment = findPayment(loan, self.rate, self.months)self.legend = Nonedef makePayment(self):self.paid.append(self.payment)reduction = self.payment - self.owed[-1] * self.rateself.owed.append(self.owed[-1] - reduction)def getTotalPaid(self):return sum(self.paid)def __str__(self):return str(self.legend)class Fixed(Mortgage):def __init__(self, loan, r, months):# 请在此添加代码,补全函数__init__#********** Begin *********#self.loan = loanself.r = rself.months = months#********** End *********#self.legend = 'Fixed, ' + str(r) + '%, for ' + str(months) + ' months'class FixedWithPoints(Mortgage):def __init__(self, loan, r, months, pts):# 请在此添加代码,补全函数__init__#********** Begin *********#self.loan = loanself.r = rself.months = monthsself.pts=pts#********** End *********#self.legend = 'Fixed, ' + str(r) + '%, ' + str(pts) + ' points, for ' + str(months) + ' months'class TwoRate(Mortgage):def __init__(self, loan, r, months, teaserRate, teaserMonths):# 请在此添加代码,补全函数__init__#********** Begin *********#self.loan = loanself.r = rself.months = monthsself.teaserRate=teaserRateself.teaserMonths=teaserMonths#********** End *********#self.legend = str(teaserRate)\+ '% for ' + str(self.teaserMonths)\+ ' months, \n then ' + str(r) + '%, for ' + str(months) + ' months'def makePayment(self):# 请在此添加代码,补全函数makePayment#********** Begin *********#if len(self.paid) == self.teaserMonths + 1:self.rate = self.nextRateself.payment = findPayment(self.owed[-1], self.rate, self.months - self.teaserMonths)#********** End *********#Mortgage.makePayment(self)if __name__=="__main__":print(Fixed(100000, 6.5, 36))print(Fixed(100000, 6.5, 120))print(FixedWithPoints(100000, 6.5, 36, 20))print(FixedWithPoints(100000, 6.5, 120, 20))print(TwoRate(100000, 9.0, 36, 4.8, 12))print(TwoRate(100000, 7.0, 120, 4.8, 36))

第3关:比较各种贷款的利弊

编程要求

本关的编程任务是,补全step3/7-3.py文件中 Begin-End 区间的代码,以实现比较各种贷款利弊的要求。具体要求如下:

本关要求补全 compareMortgages 函数,然后分别计算三种贷款方式,最后还给银行的总金额,以此为依据,来对比三种贷款方式的利弊;
具体请参见后续测试样例。
本关涉及的代码文件7-3.py的代码框架如下:

def findPayment(loan, r, m):
return loan * ((r * (1 + r) ** m) / ((1 + r) ** m - 1))
class Mortgage(object):
def init(self, loan, annRate, months):
self.loan = loan
self.rate = annRate / 1200.0
self.months = months
self.paid = [0.0]
self.owed = [loan]
self.payment = findPayment(loan, self.rate, self.months)
self.legend = None
def makePayment(self):
self.paid.append(self.payment)
reduction = self.payment - self.owed[-1] * self.rate
self.owed.append(self.owed[-1] - reduction)
def getTotalPaid(self):
return sum(self.paid)
def str(self):
return str(self.legend)
class Fixed(Mortgage):
def init(self, loan, r, months):
Mortgage.init(self, loan, r, months)
self.legend = 'Fixed, ’ + str® + ‘%, for ’ + str(months) + ’ months’
class FixedWithPoints(Mortgage):
def init(self, loan, r, months, pts):
Mortgage.init(self, loan, r, months)
self.pts = pts
self.paid = [loan * (pts / 100.0)]
self.legend = 'Fixed, ’ + str® + ‘%, ’ + str(pts) + ’ points, for ’ + str(months) + ’ months’
class TwoRate(Mortgage):
def init(self, loan, r, months, teaserRate, teaserMonths):
Mortgage.init(self, loan, teaserRate, months)
self.teaserMonths = teaserMonths
self.teaserRate = teaserRate/1200
self.nextRate = r / 1200.0
self.legend = str(teaserRate)
+ '% for ’ + str(self.teaserMonths)
+ ’ months, \n then ’ + str® + ‘%, for ’ + str(months) + ’ months’
def makePayment(self):
if len(self.paid) == self.teaserMonths + 1:
self.rate = self.nextRate
self.payment = findPayment(self.owed[-1], self.rate, self.months - self.teaserMonths)
Mortgage.makePayment(self)
def compareMortgages(amt, years, fixedRate, pts, ptsRate, varRate1, varRate2, varMonths):
# 请在此添加代码,补全函数compareMortgages
#********** Begin #
#
* End #
for m in range(totMonths):
# 请在此添加代码,补全函数compareMortgages
#
* Begin #
#
* End ********#
for m in morts:
print(m)
print(‘Loan ’ + str(amt) + ’ Total payments = ’ + str(int(m.getTotalPaid())))
if name==“main”:
compareMortgages(200000, 30, 7, 3.25, 5, 4.5, 9.5, 48)
print(’
40)
compareMortgages(1000000, 30, 7, 20, 5, 4.5, 9.5, 48)
print(’
’ * 40)
compareMortgages(500000, 10, 7, 20, 5, 4.5, 9.5, 48)

测试说明

平台会对你编写的代码进行测试:

测试输入:无输入
预期输出:
Fixed, 7%, for 360 months
Loan 200000 Total payments = 479017
Fixed, 5%, 3.25 points, for 360 months
Loan 200000 Total payments = 393011
4.5% for 48 months,
then 9.5%, for 360 months
Loan 200000 Total payments = 551444


Fixed, 7%, for 360 months
Loan 1000000 Total payments = 2395088
Fixed, 5%, 20 points, for 360 months
Loan 1000000 Total payments = 2132557
4.5% for 48 months,
then 9.5%, for 360 months
Loan 1000000 Total payments = 2757224


Fixed, 7%, for 120 months
Loan 500000 Total payments = 696650
Fixed, 5%, 20 points, for 120 months
Loan 500000 Total payments = 736393
4.5% for 48 months,
then 9.5%, for 120 months
Loan 500000 Total payments = 678254

开始你的任务吧,祝你成功!

代码

def findPayment(loan, r, m):return loan * ((r * (1 + r) ** m) / ((1 + r) ** m - 1))class Mortgage(object):def __init__(self, loan, annRate, months):self.loan = loanself.rate = annRate / 1200.0self.months = monthsself.paid = [0.0]self.owed = [loan]self.payment = findPayment(loan, self.rate, self.months)self.legend = Nonedef makePayment(self):self.paid.append(self.payment)reduction = self.payment - self.owed[-1] * self.rateself.owed.append(self.owed[-1] - reduction)def getTotalPaid(self):return sum(self.paid)def __str__(self):return str(self.legend)class Fixed(Mortgage):def __init__(self, loan, r, months):Mortgage.__init__(self, loan, r, months)self.legend = 'Fixed, ' + str(r) + '%, for ' + str(months) + ' months'class FixedWithPoints(Mortgage):def __init__(self, loan, r, months, pts):Mortgage.__init__(self, loan, r, months)self.pts = ptsself.paid = [loan * (pts / 100.0)]self.legend = 'Fixed, ' + str(r) + '%, ' + str(pts) + ' points, for ' + str(months) + ' months'class TwoRate(Mortgage):def __init__(self, loan, r, months, teaserRate, teaserMonths):Mortgage.__init__(self, loan, teaserRate, months)self.teaserMonths = teaserMonthsself.teaserRate = teaserRate/1200self.nextRate = r / 1200.0self.legend = str(teaserRate)\+ '% for ' + str(self.teaserMonths)\+ ' months, \n then ' + str(r) + '%, for ' + str(months) + ' months'def makePayment(self):if len(self.paid) == self.teaserMonths + 1:self.rate = self.nextRateself.payment = findPayment(self.owed[-1], self.rate, self.months - self.teaserMonths)Mortgage.makePayment(self)def compareMortgages(amt, years, fixedRate, pts, ptsRate, varRate1, varRate2, varMonths):# 请在此添加代码,补全函数compareMortgages#********** Begin *********#totMonths = years * 12fixed1 = Fixed(amt, fixedRate, totMonths)fixed2 = FixedWithPoints(amt, ptsRate, totMonths, pts)twoRate = TwoRate(amt, varRate2, totMonths, varRate1, varMonths)morts = [fixed1, fixed2, twoRate]#********** End *********#for m in range(totMonths):# 请在此添加代码,补全函数compareMortgages#********** Begin *********#for mort in morts:mort.makePayment()#********** End *********#for m in morts:print(m)print('Loan ' + str(amt) + ' Total payments = ' + str(int(m.getTotalPaid())))if __name__=="__main__":compareMortgages(200000, 30, 7, 3.25, 5, 4.5, 9.5, 48)print('*'*40)compareMortgages(1000000, 30, 7, 20, 5, 4.5, 9.5, 48)print('*' * 40)compareMortgages(500000, 10, 7, 20, 5, 4.5, 9.5, 48)

educoder Linux与Python编程2021 答案
https://blog.csdn.net/u014708644/category_11465058.html

Linux 与 Python编程2021 Python面向对象编程实训 educoder实训相关推荐

  1. Dave Python 练习十五 -- 面向对象编程

    #encoding=utf-8 ### *************** 面向对象编程 ******************** #*********** Part 1: 面向对象编程 ******** ...

  2. plc 编程 c语言编程实例,PLC面向对象编程和梯形图编程,谁OUT了?

    在工业自动化领域,梯形图逻辑仍然是最常用的编程语言之一,但对于更加复杂的控制对象,面向对象编程不失为一种高效率的方式.下面先来谈谈面向对象编程: 面向对象编程是计算机高级语言的一种先进的编程模式,在工 ...

  3. 盘一盘 Python 系列特别篇 - 面向对象编程

    本文含 14123 字,53 图表截屏 建议阅读 72 分钟 0 引言 在写 Keras (下) 时,发现很多内容都要用到类 (class) 和对象 (object),因此本文作为 Python 系列 ...

  4. 【廖雪峰Python学习笔记】面向对象编程OOP

    面向对象编程 OOP:Object Oriented Programming 程序的基本单元:对象 [ = 数据 + 操作数据的函数] [属性 + 方法] 三大特点:数据封装.继承和多态 OPP中的计 ...

  5. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

  6. Python学习笔记:面向对象编程(4)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:面向对象编程(3)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:面向对象编程(2)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:面向对象编程(1)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. 【Python】Python语言学习:面向对象编程,类和对象,封装、继承和多态

    这一周Python语言学习,记录如下. 01 面向对象编OOP 1.1 为什么学习和应用OOP? 1 OOP适合更加复杂的需求分析和项目开发. 2 OOP具有更强大的封装能力. 3 OOP相比于面向过 ...

最新文章

  1. STM32F4 HAL库开发 -- USB U盘
  2. modifying的博客
  3. 以卖香蕉为例,从4个方面了解SQL的数据汇总
  4. “贵妇”必备的高价糖水,我给燕窝上了10年智商税
  5. netty 关闭chnnal_Netty 源码学习——服务端流程分析
  6. 405 not allowed什么意思_clock是什么意思
  7. pip安装环境报错[Errno 99] Cannot assign requested address问题解决
  8. 移动端 重定向 https 请求
  9. MySQL数据库数据类型
  10. Turbo码,接近完美的编码
  11. 334个地级市名单_中国各级行政区划数量,统计到乡镇一级
  12. 腾讯云域名购买和域名解析教程
  13. 【bzoj1059】 ZJOI2007矩阵游戏 二分图匹配
  14. 2017年语义理解总结(二)
  15. 有生之年转ta系列 美术部分 1.1 美术理论基础
  16. mediawiki 各种扩展整理
  17. ES已经安装了ik分词器,仍然报错analyzer [ik_max_word] not found for field
  18. php自动tag,discuz! 2.5x 3.0x的自动tag系统是如何实现的?
  19. group by column中的column与前面条件发生的错误的解决方案
  20. 家用洗地机有什么优缺点?入门级家用洗地机

热门文章

  1. ThreadLocal工具类
  2. 19校招华为笔试 Code3
  3. Python学习——语法错误与异常
  4. 2021-02-13L:1652 2.08---2.141576L
  5. 《联盟》读书笔记(二)
  6. 大工计算机英语考试,大工15春《专业英语(计算机英语)》在线测试123
  7. 服务器显示404什么意思,404是什么意思?
  8. 73个必会的经济类热词
  9. 评论:中国网络游戏虚拟物品交易的前景
  10. 电脑桌面计算机图标下不显示文字,电脑桌面图标下面的文字有时会突然不见,然后 – 手机爱问...