我遇到了一个来自在线课程(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
似乎罪魁祸首是在内部while循环之后从未重置month的值。也就是说,一旦内部执行了一次,它就再也不会执行了。这意味着平衡值不会改变,你将陷入一个无限循环。在
因为您只使用month来迭代一组次数,所以应该将内部循环改为
编辑:
划掉这个问题,只是在你的函数上玩一下,如果起始平衡大于13,它似乎很快就会收敛到某个值上。如果平衡小于10,那么你的函数会减少平衡,所以它绝对不会终止。如果余额小于13,那么它似乎在1次迭代中终止。在
我用不同的年利率测试了这个函数,它对结果完全没有影响。收敛数似乎约为初始平衡的90%。这是一个有缺陷的函数。在
相关问题 更多 >
编程相关推荐