2016-09-27 10 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これは、 'balance'の値が中程度(数値が大きすぎない)のときにコードがうまく動作する理由を、どのように説明していますか?なぜそれが大量に誤動作させるのか私の心には意味がありません。 – EllaP

+0

@heltonbikerのように 'monthlypayment'が' balance'より大きい場合や、 'newbalance'より大きい場合はforループの中で' - = 'を実行しているためwhileループの条件が失敗します。大きな数字ではできないと言っているわけではありません。 – Corgs

0

あなたはwhileの試験条件はFalseになるようにする必要があります。 newbalance > 0なので、最終的には正の値を持つforループから出現するはずです。

+0

あなたはあまりにも多くを支払っているか、金利が低すぎるように見えます; o) – heltonbiker

+0

テスト条件は' False'になっていなければなりません。ループは 'True'の間に繰り返されます。 – Barmar

+0

@Barmarありがとう、私は間違いを訂正した。 – heltonbiker

関連する問題