我开始学习编码并从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的第一个值。我无法做到更好。
答案 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次,因为你的程序的其余部分都可以。