[英]Credit card balance exercise in Python
我应该编写一个简单的程序来执行以下操作:
接受以下输入:
我应该打印出固定的每月还款额和还清债务的月份数(最多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
>>>
与我上面较早编写的正确输出相比,哪一个略有不同。
很抱歉写得很乱,我不知道如何在该论坛中编写代码。 另外,请注意,我编写的问题和程序并非完全与我一样,但大致相同。
可能是什么问题? 谢谢。
首先要解决的一件事-如何从年利率中得出月利率。 一般复利公式为:
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,利息将超过最低还款额,程序将进入无限循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.