2016-09-27 88 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

相關問題