当输入超过8000时,程序停止工作

2024-04-27 05:18:49 发布

您现在位置: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以上,永远不会有答案。终端一直是空白的。我以前从没见过这种行为。我对此感到困惑。有人能复制吗?为什么会这样?你知道吗


Tags: 答案in程序网站maindefcountcard
2条回答

您可以通过使用rb = 8001遍历一次循环来了解它挂起的原因。你知道吗

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

值为<;=8000时,值减小;值为>;8000时,值增大,因此rb >= 0始终为真。你知道吗

8000美元*(1+0.18/12)—$120=8000美元。你知道吗

因此,当你模拟支付你得到一个无限循环。你知道吗

您的代码实际上在输入8000美元时终止,这只是运气,因为浮点数是四舍五入的。如果计算准确,程序就不会终止。你知道吗

相关问题 更多 >