我写了以下信用卡计划以回复此网站上的问题(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以上没有答案。终端只是空白。我之前从未遇到过这种行为。我为此感到困惑。任何人都可以复制它吗?为什么会这样?
答案 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的输入只是运气,因为浮点数已经四舍五入。如果计算完全完成,程序将不会终止。