Python中的二进制搜索,无限循环?

2024-05-29 05:54:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个来自在线课程(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

Tags: check二进制解决方案payment评分余额课程balance
1条回答
网友
1楼 · 发布于 2024-05-29 05:54:14

似乎罪魁祸首是在内部while循环之后从未重置month的值。也就是说,一旦内部执行了一次,它就再也不会执行了。这意味着平衡值不会改变,你将陷入一个无限循环。在

因为您只使用month来迭代一组次数,所以应该将内部循环改为

for m in range(month):
    balance = (balance - payment)*(1 + MonthlyInterestRate)

编辑:

划掉这个问题,只是在你的函数上玩一下,如果起始平衡大于13,它似乎很快就会收敛到某个值上。如果平衡小于10,那么你的函数会减少平衡,所以它绝对不会终止。如果余额小于13,那么它似乎在1次迭代中终止。在

我用不同的年利率测试了这个函数,它对结果完全没有影响。收敛数似乎约为初始平衡的90%。这是一个有缺陷的函数。在

相关问题 更多 >

    热门问题