1

編集: 以下は、受け取ったフィードバック/回答に基づいた作業コードです。

この質問は、MIT のオープン コースウェアを使用して Python/CS を学習しているときに出てきた、以前の質問に由来しています。--以前の質問はこちら--

次のコードを使用して、毎月の支払いなどのリストを作成しています。ただし、ループの最後に、月に支払われた合計金額の現在の合計を示す必要があります。

オリジナルコード

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)


    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

    if month in xrange(12, 12+1):
        print 'RESULTS'
        print 'Total amount paid: '
        print 'Remaining balance: %.2f' % (remainingBalance,)

問題は、支払われた金額の現在の合計を維持する方法を理解できなかったことです. 追加してみましtotalPaid = round(interestPaid + principalPaid, 2)たが、それは1か月の合計になりました。各月の値を維持し、最後にそれらをすべて合計して印刷することはできません。

また、結果の金額が1131.12になるはずであることも知っています

リストを介して各値がわかっているときにこれを行う多くの例を見つけましたが、それを正しく推定することはできません。

固定コード

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))
totalPaid = 0

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)
    totalPaid += round(minPayment, 2)

    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

    if month in xrange(12, 12+1):
        print 'RESULTS'
        print 'Total amount paid: %.2f' % (totalPaid,)
        print 'Remaining balance: %.2f' % (remainingBalance,)
4

5 に答える 5

3

ループの前に、変数を初期化して値を蓄積します。

total_paid = 0

次に、ループの本体に適切な量を追加します。演算子を使用し+=て、既存の変数に追加できます。

total_paid += 1

の短縮形ですtotal_paid = total_paid + 1total_paid反復ごとに新しい値を与えるのではなく、既存の値に追加する必要があります。

あなたの問題の詳細についてはわかりませんが、これはループ時に値を累積するための一般的な形式です。

于 2011-02-14T22:13:36.633 に答える
1

あなたはいつも最低限の支払いをしますか?その計算を再度理解する代わりに、minPayment を使用するだけです。現在の合計を保持し、ループ後に出力します。

balance = float(raw_input("Outstanding Balance: "))
interestRate = float(raw_input("Interest Rate: "))
minPayRate = float(raw_input("Minimum Monthly Payment Rate: "))
paid = 0

for month in xrange(1, 12+1):
    interestPaid = round(interestRate / 12.0 * balance, 2)
    minPayment = round(minPayRate * balance, 2)
    principalPaid = round(minPayment - interestPaid, 2)
    remainingBalance = round(balance - principalPaid, 2)
    paid += minPayment

    print  # Make the output easier to read.
    print 'Month: %d' % (month,)
    print 'Minimum monthly payment: %.2f' % (minPayment,)
    print 'Principle paid: %.2f' % (principalPaid,)
    print 'Remaining balance: %.2f' % (remainingBalance,)

    balance = remainingBalance

print
print 'RESULTS'
print 'Total amount paid:', paid
print 'Remaining balance: %.2f' % (remainingBalance,)

また、range の値は 1 つだけであるため、month == 12 をチェックするだけですが、ここでは必要ありません。

于 2011-02-14T22:18:19.000 に答える
0

実際に totalPaid を 0 に初期化してから、

totalPaid = round(interestPaid + principalPaid, 2) + totalPaid

ループの内側。あなたの問題は、合計を累積していないことです。反復ごとに新しいものを設定しているだけです。

于 2011-02-14T22:16:29.647 に答える
0

近かったようですね。問題は、毎回合計を上書きしていたことです。次のようなことを試してください:

totalPaid = totalPaid + round(interestPaid + principalPaid, 2)
于 2011-02-14T22:18:05.007 に答える