使用二分搜索进行练习,以获得信用卡付款问题的答案。我认为我有坚如磐石(尽管我确定是基本的)代码,适用于示例输入,但是检查返回无限循环。我已经尝试了大约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)
答案 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。