0
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 的结果...

4

2 回答 2

2

在 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持续增长而越来越多。

于 2013-11-02T00:50:08.543 回答
1

代码没有问题。用你的公式,4773处余额的增加大于支付的增加,即10。这就解释了为什么余额不断增长到无穷大,因此循环永远不会结束。

while balance > 0:
    for key in range(1,13):
        balance -= pay
        balance = balance + (balance * (annualInterestRate / 12.0))
    pay += 10

我想你可能想降低你的利息,或者提高你的薪水,这样你就可以偿还债务了:)

于 2013-11-02T00:56:44.983 回答