我应该编写一个简单的程序来执行以下操作:
采取以下投入:
我应该打印固定的每月付款和偿还债务所需的月数(最多12个月,可能更少)。我也应该在最后打印余额(可能是负数)。
我们应假设根据月初的余额(在该月的付款之前)按月复利。每月付款必须是10美元的倍数,并且所有月份必须相同。由于这种方案,余额可能会变为负值。
所以,每月利率=
年利率/ 12.0
每月更新余额=
旧余额*(1 +月利率) - 最低月付款
现在,分配此问题的人提供了一个测试用例,说明正确的程序:
>>>
Enter the outstanding balance: 1200
Enter annual interest rate: 0.18
RESULT
Monthly payment to pay off debt in 1 year: 120
Number of months needed: 11
Balance: -10.05
>>>
这是我编写的程序(我将输入修改为与上面相同,以便查看程序是否正常工作:
## ob = float (raw_input ("Enter the outstanding balance:"))
##accir = float(raw_input("Enter annual interest rate:"))
ob = float (1200)
mp = float (0)
n = float (0)
while rb >= 0:
rb = ob
mp += 10
n += 1
rb = ( rb*(1 + (accir/12.0)**n) - n*mp)
print "Result:"
print "Monthly payment to pay off debt in one year:" , mp
print "Number of months needed:" , n
print "Balance:" , rb
似乎没问题,但是当我运行它时我得到了这个:
>>>
Result:
Monthly payment to pay off debt in one year: 110.0
Number of months needed: 11.0
Balance: - 10.0
>>>
与前面我上面写的正确输出相比,它略有不同。
很抱歉这篇杂乱的文章,我不知道如何在这个论坛上编写代码。此外,请注意,我没有完全按照我的方式编写问题和程序,但大致相同。
问题是什么?感谢。
答案 0 :(得分:0)
首先应该清理一件事 - 如何根据年率计算每月费率。一般复合利息公式为:
At = A0(1 + r)^t
其中At是时间t的总量,A0是时间0的量,r是速率。重新安排r:
r = (At/A0)^1/t - 1
请注意,At / A0实际上是年率加1,在这种情况下我们希望t为12.因此获得月率的方法是将APR表示为小数,添加一个,替换为将上述比率提高到一个二分之一然后减去一个。
https://math.stackexchange.com/questions/902687/bactracking-to-find-compound-interest/902693#902693
无论如何,这是答案:
def main(rb):
count = 0
while rb > 0:
rb = round(rb*(0.18/12 + 1) - 120, 2)
count += 1
#print(count, rb)
return count, rb
print(main(input('Balance: '))) #Balance: 1200
我已经使用了你给出的每月费率的定义,因为你必须使用它,即使它应该读取rb *(1.18 **(1.0 / 12))。 1.0在python2中强制执行真正的除法。如果在python3中运行任一版本,则必须将int函数应用于输入; python2假定这一点。
注意如果原始余额大于7999,则利息将超过最低付款额,程序将进入无限循环。