程序停止使用8000以上的输入

时间:2015-04-01 04:46:35

标签: python

我写了以下信用卡计划以回复此网站上的问题(Credit card balance exercise in Python):

def main(rb):
    count = 0
    while rb > 0:
        rb = rb*(0.18/12 + 1) - 120
        count += 1
    return count, round(rb, 2)

print(main(input('Balance: ')))   #Balance: 1200

它计算将要偿还的数量和最终余额。 OP对1200的原始余额感兴趣,但我改变了它,因此用户可以输入他们自己的原始余额。对于8000及以下的值,答案只需几分之一秒。 8000以上没有答案。终端只是空白。我之前从未遇到过这种行为。我为此感到困惑。任何人都可以复制它吗?为什么会这样?

2 个答案:

答案 0 :(得分:4)

您可以通过使用rb = 8001单步执行循环来查看原因。

8001 * (0.18 / 12 + 1) - 120 ~= 8001.014999999999

值<= 8000时,值减小,值>&gt; 8000,值增加,因此rb >= 0将始终为真。

答案 1 :(得分:2)

$ 8000 *(1 + 0.18 / 12) - $ 120 = $ 8000。

因此,当您模拟付款时,您将获得无限循环。

你的代码实际上终止了$ 8000的输入只是运气,因为浮点数已经四舍五入。如果计算完全完成,程序将不会终止。