【问题标题】:add results of a for loop after each iteration in Python在 Python 中每次迭代后添加 for 循环的结果
【发布时间】:2015-03-19 04:20:18
【问题描述】:

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

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

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

balance - 信用卡上的未结余额

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)

一切正常,除了总支付额仅是 minimumMonthlyPayment 的第一个值的 12 倍。我不能让它变得更好。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

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

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

    每次循环,totalPaid 都会增加为该特定月份计算的最低付款额。如果您打算添加支付最低付款以外的任何费用的情况,则当然必须更改/增强此逻辑。

    【讨论】:

    • 非常感谢它完美地工作!我刚刚学到了一些新东西!
    • @MaryseGauthier 在这种情况下,太棒了,欢迎来到 SO。 :)
    【解决方案2】:

    在你的 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 次,因为您的程序的其余部分会这样做。

    【讨论】:

    • 也感谢您的帮助!实际上我放 range (1, 13) 的原因是我需要打印 Month: 1 to Month: 12 所以 for month in range(1, 13) 似乎可以很好地做到这一点,再加上其余的工作功能。至少我是这么理解的。再次感谢!
    猜你喜欢
    • 2018-05-23
    • 2018-09-01
    • 2020-09-15
    • 2015-02-10
    • 1970-01-01
    • 2011-07-11
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多