在 while 循环的每次迭代中,balance 都会增加,因此它保持大于 0。您可以打印 balance 的中间值:
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
持续增长而越来越多。