2011-02-14 190 views
0

編輯:下面是基於我收到的反饋/答案的工作代碼。在for循環中計算運行總數 - Python

這個問題源於我以前使用MIT開放課件學習Python/CS時出現的問題。 - See my previous question here -

我使用下面的代碼來製作月付款和其他東西的列表。然而,在循環結束時,我需要爲每個月支付的總金額計算總計。

原始代碼

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),但是總共只有一個月,我似乎無法讓它保持每個月的價值,然後將它們全部加到最後打印出來。

我也知道,所產生的量應該是這樣,當每個值是知道的,通過列表的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,) 
+0

你爲什麼不更新**`totalPaid`?爲什麼你將它設置爲一個新的價值?爲什麼不在表達式中包含`totalPaid`? – 2011-02-14 22:13:12

回答

2

你的循環之前,初始化變量累積值:

total_paid = 0 

,然後在你的循環體,適量添加到它。您可以使用+=運算符添加到現有變量,例如

total_paid += 1 

total_paid = total_paid + 1的簡寫。您不希望每次迭代都給total_paid一個新值,而是希望增加其現有值。

我不確定您的問題的具體情況,但這是循環累計值的一般形式。

+0

謝謝你讓我更清楚。我能夠推斷你所說的並且在循環之前和循環內添加了`totalPaid = 0`我添加了`totalPaid + = round(minPayment,2)` – tehaaron 2011-02-14 22:22:36

+0

@tehaaron沒問題,總是樂於幫助某人學習Python – 2011-02-14 22:27:27

0

你確實有totalPaid初始化爲0,然後

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

在循環中。你的問題是你沒有積累總數,你只是在每次迭代中設置一個新的。

0

聽起來像你接近。問題是你每次都覆蓋總數。嘗試這樣的:

totalPaid = totalPaid + round(interestPaid + principalPaid, 2) 
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,) 

另請注意,該範圍只有一個值,所以您只需檢查月份== 12,但在這裏根本沒有必要。