当变量等于if语句时,为什么python不会停止循环

Inf*_*oge 1 python loops

当我运行我的代码时,数字变成42.0(它应该做什么),但当它变成42.0时(虽然if语句或while循环)不会停止,我将如何让我的代码停止?

import time
def life(inp):
    inp = float(inp)
    while float(inp) != float(42):
        inp = inp*12/4/4+4+6.5
        if float(inp) == float(42) or inp == 42:
            print inp
            break
        print inp
        time.sleep(0.1)


life(6)
Run Code Online (Sandbox Code Playgroud)

Ste*_*ann 13

因为它不是 42.0,你可以通过print '%.60f' % inp改为看到它.然后你会看到你实际上被困在41.999999999999985789145284797996282577514648437500000000000000.

或者用print repr(inp),显示41.999999999999986(不是确切的存储值,但它表明它不是42.0).

如果您只是这样做print inp,print str(inp)那么Python会显示数字的"漂亮版本",但这并不一定代表数字.

您可能希望改为"足够接近",例如:

while abs(float(inp) - float(42)) > 1e-9:
Run Code Online (Sandbox Code Playgroud)

或者看看这个答案.