2016-09-27 33 views
-3

这是我计算信用卡余额的程序。它适用于大多数输入,但是当balance变得太大时,程序运行一个无限循环。可以做些什么来改进代码,以便计算更大的值?为什么在这个程序中大数值导致无限循环?

monthlyPayment = 0 

monthlyInterestRate = annualInterestRate /12 
newbalance = balance 
month = 0 

while newbalance > 0: 
    monthlyPayment += .1 
    newbalance = balance 

    for month in range(1,13): 
     newbalance -= monthlyPayment 
     newbalance += monthlyInterestRate * newbalance 
     month += 1 
print("Lowest Payment:" + str(round(monthlyPayment,2))) 
+0

我们仍然不知道'annualInterestRate'的价值 – heltonbiker

回答

4
while newbalance > 0: 
    monthlyPayment += .1 
    newbalance = balance 

这是你的问题。只要balance大于0,newbalance将始终重置为balance,并且while循环将评估为true,并将导致无限循环。

+0

应该指出''newbalance'在'for'循环中被修改,因此它有可能会假设一个负值。这取决于' - ='操作是否会比以下'+ ='操作更多地减少新平衡。 – heltonbiker

+0

@Corgs这是如何解释为什么代码工作正常时,“平衡”的价值适中(不是一个数字太大)?在我看来,大数字导致它发生故障是没有意义的。 – EllaP

+0

像@heltonbiker一样,如果'monthlypayment'大于'balance'或总和大于'newbalance'时,在for循环中,while循环中的条件将因为您执行' - ='而失败。不要说数字越大,它就不会发生,它就不太可能。 – Corgs

0

您必须进行试验条件的while成为False。由于它是newbalance > 0,它最终应该从for循环中以正值出现。

+0

看起来你付的太多了,或者你的利率太低了o) – heltonbiker

+0

测试条件必须变成'False'。循环在“真”时重复。 – Barmar

+0

@Barmar谢谢,我纠正了错误。 – heltonbiker

相关问题