0

我在在线课程(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
4

1 回答 1

2

似乎可能的罪魁祸首是您从未在内部 while 循环之后重置月份的值。也就是说,一旦 inner 执行了一次,它将永远不会再次执行。这意味着 balance 的值不会改变,你将陷入无限循环。

由于您只使用月份来迭代一定次数,因此您应该将内部循环更改为

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

编辑:

从头开始,只是玩弄你的函数,如果起始余额大于 13,它似乎很快会收敛。如果余额小于 10,那么你的函数会减少余额,所以它肯定不会终止。如果余额小于 13,那么它似乎在 1 次迭代中终止。

我用不同的年利率测试了这个函数,它对结果完全没有影响。收敛数似乎约为起始余额的 90%。这是一个无聊的功能。

于 2012-10-15T22:16:29.113 回答