我已经完成了MITx CS课程的作业,我遇到了以下问题:
以下变量包含如下所述的值:
余额 - 信用卡上的未结余额
annualInterestRate - 年度利率小数
回顾一下问题:我们正在寻找最小的月度 付款,以便我们可以在一年内支付全部余额。 这个支付价值的合理下限是多少? $ 0是 明显的anwer,但你可以做得更好。如果没有 利息,债务可以通过每月支付十二分之一来偿还 原来的平衡,所以我们必须至少付出这么多 月。原始余额的十二分之一是一个很好的下限。
什么是好的上限?想象一下,我们不是每月支付 在年底偿还了全部余额。我们最终是什么 薪水必须大于我们每月支付的金额 分期付款,因为利息在我们的余额上复杂化了 每个月没有还清。所以月度上限很好 在获得利息之后,付款将是余额的十二分之一 每月复合一整年。
简而言之:
每月利率=(年利率)/ 12.0每月付款 下限=余额/ 12月支付上限=(余额x(1 +每月利率)12)/ 12.0
编写一个使用这些边界和二分搜索的程序(更多信息 信息查看维基百科页面上的二分搜索)找到 最低每月支付到分(不超过10美元的倍数)这样 我们可以在一年内偿还债务。尝试用大号 输入,并注意它是多快(尝试相同的大输入) 问题2的解决方案比较!)。产生与之相同的回报值 你在问题2中做过。
现在,这是我能够提出的,但实际上会产生错误的输出。我不知道这段代码出了什么问题:
#------------Defined variables---------------#
balance = 999999
annualInterestRate = 0.18
#------------Defined variables---------------#
monthlyInterestRate = annualInterestRate / 12.0
monthlyPaymentLower = balance / 12
monthlyPaymentUpper = (balance * (1 + monthlyInterestRate)**12) / 12.0
month = 1
total = 0
while (total < balance) and month < 13:
pay = (monthlyPaymentLower + monthlyPaymentUpper) / 2
total += pay
if total < balance:
monthlyPaymentLower = pay
elif total > balance:
monthlyPaymentHigher = pay
month += 1
if month == 13:
total = 0
month = 1
print 'Lowest Payment: ' + str(round(pay, 2))
帮助?
像往常一样,不寻找完整的解决方案或源代码,只需在我出错的地方留下一些提示。 (我总是得到负面投票。:/)
答案 0 :(得分:0)
到位
total += pay
你必须像问题2那样计算12次安装的平衡
for month in range(12):
balance = balance - pay
balance = balance + monthlyInterest
比您必须将balance
与0
进行比较并更改monthlyPaymentLower
或monthlyPaymentUpper
您必须将monthlyPaymentLower
与monthlyPaymentUpper
进行比较,看看是否可以完成
if monthlyPaymentUpper - monthlyPaymentLower < 0.001 :
print "now I can finish searching"
当然,在这种情况下,您需要在代码中更改更多内容:)