balance = 4773
annualInterestRate = 0.2
pay = 10
while balance > 0:
for key in range(1,13):
balance -= pay
balance = balance + (balance * (annualInterestRate / 12.0))
pay += 10
print('Lowest Payment: '+str(pay))
当余额为3329时,它返回310的良好结果但是当4773进入无限循环而不是得到440的结果时...
答案 0 :(得分:2)
在while循环的每次迭代中,余额增加,因此它保持大于0.您可以打印余额的中间值:
balance = 4773
annualInterestRate = 0.2
pay = 10
while balance > 0:
print balance
for key in range(1,13):
balance -= pay
balance = balance + (balance * (annualInterestRate / 12.0))
pay += 10
输出:
4773
5686.32508646
6666.19699272
7727.21549777
8887.18344195
10167.8094501
11595.5648257
13202.7284403
15028.6608622
17121.3580173
...
你能解释一下如何获得440吗?哪个微积分?所以我们可以尝试修复你的代码。看起来3390
是您可以设置为收敛的balance
的更大(整数)初始值。
在你的循环中,你可以:
balance -= pay
balance = balance + (balance * (annualInterestRate / 12.0))
相当于:
balance = balance - pay + ((balance - pay) * (annualInterestRate / 12.0))
或:
balance = balance + balance * (annualInterestRate/12) - pay * (annualInterestRate/12)
让我们简化,但放pay2 = pay * (annualInterestRate/12)
。因此,如果balance
大于兴趣pay2
,balance * (annualInterestRate/12)
基本上会减少。
为了更好地了解正在发生的事情,想象一下,这是利益与薪酬增长之间的竞争。利息在开始时大于支付,因此它不断增加,但在某些时候,支付可能大到足以减少balance
,此时,pay
将始终大于利息。但是,如果利益从高层开始,利息就会增长,薪酬永远不会达到利息(这实际上是令人悲伤的)。数学原因是,当balance
继续增长时,薪酬是线性的,而利益则不是越来越多。
答案 1 :(得分:1)
代码没什么问题。根据您的公式,4773的余额增加超过了支付的增加,即10
。这就解释了为什么平衡会不断增长到无穷大,因此循环永远不会结束。
while balance > 0:
for key in range(1,13):
balance -= pay
balance = balance + (balance * (annualInterestRate / 12.0))
pay += 10
我认为你可能想降低你的兴趣,或者让你的工资更高,所以你可以偿还你的债务:)