获得某些输入的无限循环

时间:2014-03-05 00:32:58

标签: python while-loop infinite-loop binary-search

使用二分搜索进行练习,以获得信用卡付款问题的答案。我认为我有坚如磐石(尽管我确定是基本的)代码,适用于示例输入,但是检查返回无限循环。我已经尝试了大约20个不同的Balance输入,并且所有输入都正确,直到插入Balance = 2000,然后它抛出了无限循环。我无法弄清楚为什么。非常感谢任何帮助。这是我的代码:

balance = 2000
annualInterestRate = .18
monthlyInterestRate = annualInterestRate / 12.0
lower_bound = balance / 12.0
upper_bound = (balance * (1 + monthlyInterestRate) ** 12) / 12.0
monthly_payment = (lower_bound + upper_bound) / 2.0
new_balance = balance

while new_balance != 0:
    monthly_payment = (lower_bound + upper_bound) / 2.0
    new_balance = balance
    month = 0

    while month < 12 and new_balance != 0:

        month += 1
        new_balance = new_balance - monthly_payment
        new_balance = new_balance + (new_balance * monthlyInterestRate)
        new_balance = round(new_balance,2)

    if new_balance < 0:
        upper_bound = monthly_payment

    else:
        lower_bound = monthly_payment 


print "Lowest Payment:", round(monthly_payment,2)

2 个答案:

答案 0 :(得分:0)

舍入误差:new_balance结束0.01。您可能想检查while条件下lower_bound和upper_bound是否仍然不相等。

答案 1 :(得分:0)

我注意到new_balance可能变为负数。如果是这种情况,那么它将永远不会脱离主循环。进行调试测试

if new_balance < 0:
  raise ValueError

你可以在外面打印或只是用它来检查。或者,将while更改为

while new_balance > 0:

此外,检查new_balance是否不是&lt; .01前一轮。事实上,我永远不会允许进行一轮比赛,但总是会向下舍入。

在进行了快速检查之后,我看到在回合结束后打印出new_balance

.01
1846.64
1690.98

然后循环再次继续到.01。