为什么在这个程序中大数值导致无限循环?
这是我计算信用卡余额的程序。它适用于大多数输入,但是当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)))
while newbalance > 0:
monthlyPayment += .1
newbalance = balance
这是你的问题。只要balance
大于0,newbalance
将始终重置为balance
,并且while循环将评估为true,并将导致无限循环。
应该指出''newbalance'在'for'循环中被修改,因此它有可能会假设一个负值。这取决于' - ='操作是否会比以下'+ ='操作更多地减少新平衡。 – heltonbiker
@Corgs这是如何解释为什么代码工作正常时,“平衡”的价值适中(不是一个数字太大)?在我看来,大数字导致它发生故障是没有意义的。 – EllaP
像@heltonbiker一样,如果'monthlypayment'大于'balance'或总和大于'newbalance'时,在for循环中,while循环中的条件将因为您执行' - ='而失败。不要说数字越大,它就不会发生,它就不太可能。 – Corgs
您必须进行试验条件的while
成为False
。由于它是newbalance > 0
,它最终应该从for
循环中以正值出现。
看起来你付的太多了,或者你的利率太低了o) – heltonbiker
测试条件必须变成'False'。循环在“真”时重复。 – Barmar
@Barmar谢谢,我纠正了错误。 – heltonbiker
我们仍然不知道'annualInterestRate'的价值 – heltonbiker