在Python中每次迭代后添加for循环的结果

时间:2015-01-20 19:41:02

标签: python python-2.7

我开始学习编码并从Python开始。在我的Python课程中,我遇到了以下问题:

  

编写一个程序,计算一年后的信用卡余额   一个人只支付信用证所要求的最低月付款   卡公司每个月。

     

以下变量包含如下所述的值:

     

余额 - 信用卡上的未结余额

     

annualInterestRate - 年度利率小数

     

monthlyPaymentRate - 最小月支付率为小数

     

每个月,计算每月付款和   剩余余额,并打印屏幕格式:

     

月:1   每月最低付款:96.0
  剩余余额:4784.0

(我已经把那部分好了)

  

最后,打印出当年支付的总金额和年末余额,格式为:

     

支付总额:96.0   剩余余额:4784.0

(经过多个小时的尝试和搜索,这是我付出的总薪水的一部分)

所以这就是我需要做的事情:将最低月付款的所有结果加在一起,以获得支付的总额。

这是我的代码:

def creditPayment(balance, annuelInterestRate, monthlyPaymentRate):

    for month in range(1, 13):

        monthlyInterestRate = annuelInterestRate/ 12.0
        minimumMonthlyPayment = monthlyPaymentRate * balance
        monthlyUnpaidBalance = balance - minimumMonthlyPayment
        balance = monthlyUnpaidBalance + (monthlyInterestRate * monthlyUnpaidBalance)

        totalPaid = sum((minimumMonthlyPayment) for _ in  range(0, 13))  

        print 'Month: ', month
        print 'Minimum monthly payment: ', round(minimumMonthlyPayment, 2)
        print 'Remaining balance: ', round(balance, 2)
        print ' '
    print 'Total paid: ', round(totalPaid, 2)
    print 'Remaining balance: ', round(balance, 2)

print creditPayment(4213, 0.2, 0.04)

一切正常,除了总支付额外,只增加12倍于minimumMonthlyPayment的第一个值。我无法做到更好。

2 个答案:

答案 0 :(得分:1)

如果我正确解释了您的问题,我假设您的意图是每个月totalPaid增加minimumMonthlyPayment。如果是这样的话:

totalPaid = 0.0
for month in range(1, 13):
    #
    # Other stuff you're doing in the loop
    #
    totalPaid += minimumMonthlyPayment

每次循环时,totalPaid都会按照特定月份计算的最低付款额递增。如果您打算添加除最低付款以外的任何其他情况,则必须更改/扩充此逻辑。

答案 1 :(得分:1)

在你的for循环中,你有:

totalPaid = sum((minimumMonthlyPayment) for _ in  range(0, 13))

这是将totalPaid设置为minimumMonthlyPayment的13倍,因为它是循环的迭代,因此在最后一个循环中,该值设置为最后一次最小付款的13倍。您需要在每次迭代时向totalPaid添加一个值,以便在添加之前更新该值。以下是我将代码更改为:

def creditPayment(balance, annuelInterestRate, monthlyPaymentRate):
    totalPaid = 0
    for month in range(1, 13):

        monthlyInterestRate = annuelInterestRate/ 12.0
        minimumMonthlyPayment = monthlyPaymentRate * balance
        monthlyUnpaidBalance = balance - minimumMonthlyPayment
        balance = monthlyUnpaidBalance + (monthlyInterestRate * monthlyUnpaidBalance)

        totalPaid +=minimumMonthlyPayment

        print 'Month: ', month
        print 'Minimum monthly payment: ', round(minimumMonthlyPayment, 2)
        print 'Remaining balance: ', round(balance, 2)
        print ' '
    print 'Total paid: ', round(totalPaid, 2)
    print 'Remaining balance: ', round(balance, 2)
    print creditPayment(4213, 0.2, 0.04)
print creditPayment(4213, 0.2, 0.04)

此外,由于您未在for _ in range(0, 13)中使用迭代器的实际值,因此使用range(13)会更具可读性。我怀疑你可能已经打算让它循环12次,因为你的程序的其余部分都可以。