我遇到一个在线课程(入门Python)的问题。从本质上讲,我们被告知使用二元搜索来找到每月最低的固定金额,以清除一年内的债务(四舍五入到最接近的0.01美元),给出余额和年利率。我的解决方案上传到他们的在线评分者时,只给出了这个错误:
“运行解决方案时出现问题。 我们无法运行您的解决方案。“
我可能处于无限循环中吗?如果是这样,我不太明白。原始代码发布在下面。谢谢大家花时间阅读本文!
MonthlyInterestRate = annualInterestRate/12
month = 1
LB = balance/12
UB = balance*(2.7/12)
check = balance
while abs(balance) > 10:
payment = (LB + UB)/2
while month <= 12:
balance = (balance - payment)*(1 + MonthlyInterestRate)
month = month + 1
if balance > 10:
LB = payment
balance = check
elif balance < -10:
UB = payment
balance = check
else:
print('Lowest Payment: ' + str(payment))
break
答案 0 :(得分:2)
似乎可能的罪魁祸首是你永远不会重置内部while循环之后的月份值。也就是说,一旦内部执行了一次,它将永远不再执行。这意味着平衡值不会改变,你将陷入无限循环。
由于您只使用月份来迭代一定次数,因此您应该将内部循环更改为
for m in range(month):
balance = (balance - payment)*(1 + MonthlyInterestRate)
编辑:
如果起始余额大于13,那么只是玩你的功能似乎很快会收敛到一些。如果余额小于10,那么你的功能会降低平衡,所以它肯定不会终止。如果余额小于13,那么它似乎在1次迭代中终止。
我测试了不同年利率的功能,结果完全没有差别。收敛数似乎约为起始余额的90%。这是一个独立的功能。