虽然不假

While not False

所以我需要一个代码来捕捉一个人是否输入了一个字符串而不是一个数字,并不断要求这个人输入一个有效的数字。

所以我在网上找到了我的代码的这个修复程序,虽然它有效,但我仍然不明白为什么它有效

大部分我都看懂了,值设置为False但是;

为什么 while not false 甚至在一开始就循环?

实际上是什么保持了循环 运行?


下面的代码片段:

def repeat():
    correct_value = False
    while not correct_value:
        try:
            guess = int(input())
        except ValueError:
            print("Please Enter a Number")
        else:
            correct_value = True
    return guess

not False 意味着 True,这就是它首先起作用的原因。 异常处理用于此类目的。它尝试接受一个整数输入,如果用户没有输入整数,它会抛出一个由 except 块处理的错误。

如果用户确实给出了一个整数,correct_value 变为真,所以非真意味着假,所以循环终止并且函数 returns 输入。

not False 表示 True。关键字 'not' 将 True 取反为 False,反之亦然。与 'while True' 循环不同,'while False' 循环将被跳过。查看此代码以了解我的意思:

exit = False

while exit:
    print('In while loop')
    break

while not exit:
    print('In 2nd while loop')
    break;

print('End')

输出:

In 2nd while loop
End

看看下面的代码:

def repeat():
    correct_value = False

    # while not False so the correct_value = True
    # so it is an equivalent of -> while True:
    # while True will always run
    while not correct_value:
        try:
            guess = int(input())
        except ValueError:
            print("Please Enter a Number")
        else:
            correct_value = True
    return guess

为什么“while not false”一开始就循环?
它循环是因为双重否定总是True

真正保持循环的是什么运行?
完全相同的 while not False,结果是 while True

补充一下其他答案,你也可以这样想:在英语中,“not correct”就是“不正确”的意思。所以“虽然不正确”意味着“虽然不正确” - 即输入仍然不正确。

正如“正确”的反义词是“不正确”一样,False的反义词是True

您可以像这样轻松编写代码:

def repeat():
    incorrect_value = True # assume incorrect so that loop will run at all
    while incorrect_value:
        try:
            guess = int(input())
        except ValueError:
            print("Please Enter a Number")
        else:
            incorrect_value = False # stop the loop next time the condition is checked
    return guess