有人可以解释这个python循环给我吗?

时间:2012-08-19 22:16:54

标签: python while-loop

我是一名python /编程初学者。我在麻省理工学院开放课件上被分配了一个问题:

编写计算最低固定月付款的计划,以便在12个月内还清信用卡余额。

将以下浮点数作为raw_input()

1)信用卡上的未结余额 2)年利率为小数

打印固定的最低付款额,偿还债务所需的月数(最多12个月,可能少于12个月)和余额(可能是负数)。

假设根据月初的余额(在该月的付款之前)按月复利。每月付款必须是10美元的倍数,并且所有月份都相同。请注意,使用此付款方案可能会使余额变为负数。

答案是:

balance = float(raw_input('Enter the outstanding balance on your credit card: '))
interest = float(raw_input('Enter the annual credit card interest rate as a decimal: '))
minPay = 10
newBalance = balance

while balance > 0:
    for month in range(1,13):
        newBalance = newBalance*(1+(interest/12))-minPay
        if newBalance <=0:
            break
    if newBalance <= 0:
        balance = newBalance
    else:
        newBalance = balance
        minPay = minPay+10


print 'RESULT'
print 'Monthly payment to pay off debt in 1 year: ' + str(minPay)
print 'Number of months needed: ' + str(month)
print 'Balance: ' + str(round(balance,2))

我的问题:

1)使用1200作为原始输入余额,使用.18作为利率。有人可以用语言解释你如何达到minPay = 120,月= 11,以及余额= - 10.05?

我对newBalance = newBalance *(1 +(兴趣/ 12)) - minPay感到困惑。

使用1200作为余额会使newBalance = 1200 *(1 +(。18/12)) - 10 = 1218 - 10 = 1208。

2)由于newBalance不是&lt; = 0,程序将继续执行else语句。 else语句的newBalance = balance部分发生了什么。是否将newBalance分配回1200(原始余额输入)。

我在理解这个问题时遇到了一些麻烦。任何见解都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

我强烈建议像python解释器那样查看代码的每一行,然后看看为什么程序会按预期执行。

如果您对此很懒,请尝试在循环中放置一个print语句,以查看每个步骤的每个变量的值。这总能帮助我弄清楚代码在做什么。

至于你的问题,

  1. 是的,新余额确实具有您期望的价值

  2. 是的,它会在else部分重新分配到平衡点。您可能想要更改此内容。

  3. 因为,我不明白代码实际上在做什么,我无法帮助你解决正确的方法,但尝试添加print语句,它应该有所帮助。祝你好运!

答案 1 :(得分:0)

  

else语句的newBalance = balance部分发生了什么?是否将newBalance分配回1200(原始余额输入)。

是的就是这样。然后minPay增加,循环再次开始。

当每次迭代minPay增加时,newBalance将结束为负数。

答案 2 :(得分:0)

balance = 3329
annualInterestRate = 0.2

minimum_fixed_payment = 10
unpaid_balance = balance
MonthlyInterestRate = annualInterestRate / 12
month_count = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

while balance > 0:
    for month in month_count:
        unpaid_balance = unpaid_balance - minimum_fixed_payment
        interest = MonthlyInterestRate * unpaid_balance
        unpaid_balance = unpaid_balance + interest

        if unpaid_balance <= 0:
            break
    if unpaid_balance <= 0:
        balance = unpaid_balance
    else:
        unpaid_balance = balance
        minimum_fixed_payment = minimum_fixed_payment + 10


print "Lowest Payment: %s" % (minimum_fixed_payment)

回答这个问题的最简单方法是从这个角度来看,即使用最低固定金额,我们每月从未付余额中扣除最低固定金额,并检查剩余价值是否小于0如果不是,我们将最低固定金额增加10并重复该过程,直到我们的余额小于或等于零。

这是我对代码所做的修改。

相关问题