2011-02-14 185 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,但在这里根本没有必要。