【问题标题】:Can someone explain this python while loop to me?有人可以向我解释这个 python while 循环吗?
【发布时间】:2012-08-19 22:16:54
【问题描述】:

我是 python/编程初学者。我被分配了一个关于 MIT 开放课件的问题:

编写一个程序来计算每月最低固定还款额,以便在 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 作为原始输入余额,使用 0.18 作为利率。有人能用文字解释一下你将如何得出 minPay = 120、month = 11 和 balance = - 10.05 吗?

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

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

2) 由于 newBalance 不是

我无法理解这个问题。任何见解都将不胜感激。

【问题讨论】:

  • 请正确格式化您的代码。您还可以通过点击代码按钮来格式化内联代码。我会为你做一个sn-p。
  • 拿起笔和纸,开始像 python 那样解释代码。
  • 换个角度看。如果最低还款额不足以在规定时间内支付余额怎么办?
  • @zerkms,也称为试运行en.wikipedia.org/wiki/Dry_run_(testing)。考虑到您在湿件上运行程序,这个名字很奇怪。
  • @gnibbler:现在我知道它的正确“营销”名称了,谢谢 :-)

标签: python while-loop


【解决方案1】:

我强烈建议像 Python 解释器那样遍历代码的每一行,然后查看程序为何按预期执行。

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

至于你的问题,

  1. 是的,New balance 确实具有您期望的价值

  2. 是的,它确实被重新分配给 balance,在 else 部分。您可能想要更改此设置。

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

【讨论】:

  • 谢谢 Himanshu。将来我将使用打印语句来帮助调试过程。
【解决方案2】:

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

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

随着minPay 在每次迭代中增加,newBalance 将最终变为负数。

【讨论】:

  • 感谢 rotoglup 的输入。
【解决方案3】:
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 并重复该过程,直到我们的余额小于或等于零。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2016-05-08
    • 2011-07-14
    • 2010-10-04
    相关资源
    最近更新 更多