Python 为什么这个while循环没有中断?

Python 为什么这个while循环没有中断?,python,input,Python,Input,如果输入h、l或c,此循环不会中断: x = input('enter h,l, or c') while (x != 'c') or (x != 'h') or (x != 'l'): print('Sorry I didn't understand. Please enter h,l, or c') x = input("enter h,l, or c") 我的意图可以这样解决: x = input("enter h,l, or c") while True: if

如果输入h、l或c,此循环不会中断:

x = input('enter h,l, or c')
while (x != 'c') or (x != 'h') or (x != 'l'):
    print('Sorry I didn't understand. Please enter h,l, or c')
    x = input("enter h,l, or c")
我的意图可以这样解决:

x = input("enter h,l, or c")
while True:
    if x == 'c' or x == 'h' or x == 'l':
        break
    else:
        print('Sorry I didnt understand. Please enter h,l, or c')
        x = input("enter h,l, or c")
第一段代码的错误是什么?在while开始时没有对X进行评估吗?

您应该使用and条件,而不是or。也就是说,如果它是被接受的字母之一,那么x!='c',x!='h'和x!='h'被评估为假

x = input('enter h,l, or c')
while (x != 'c') and (x != 'h') and (x != 'l'):
    print("Sorry I didn't understand. Please enter h,l, or c")
    x = input("enter h,l, or c")

看看你的情况:

while (x != 'c') or (x != 'h') or (x != 'l'):
考虑输入字符为c的情况。第一个条件为假,但其他两个条件为真。F或T或T为真

您需要在您的条件下安装和安装连接器。更好的是,试试看

while not x in ['h', 'l', 'c']:

因为逻辑运算出错

不是A或B

这个逻辑等于

不是A也不是B

所以第一个代码应该是

x = input('enter h,l, or c')
while (x != 'c') and (x != 'h') and (x != 'l'):
    print("Sorry I didn't understand. Please enter h,l, or c")
    x = input("enter h,l, or c")

让我们从false或true被计算为true的语句开始。因此,如果x是c,那么x!='c'将为false,但第二种情况是x!='h’将为真,根据我们的第一条语句,整个or表达式将计算为真,因此您的循环将永远不会退出。相反,您需要做的是:

x=输入“输入h、l或c” 而不是x=='c'或x=='h'或x=='l': 对不起,我不明白。请输入h、l或c x=输入端h、l或c
您的while循环将始终计算为True

您的代码如下所示:

0 x = input('enter h,l, or c')
1 while True:
2    print('Sorry I didn't understand. Please enter h,l, or c')
3    x = input("enter h,l, or c")
让我们解释一下

输入场景:

a。如果输入为“z”,则z不等于任何字母,因此在所有条件下均为真。这意味着任何不是‘h’、‘l’、‘c’之一的输入都将计算为真

b。如果输入为“h”,h既不等于l也不等于c。这将评估为真或假或真的场景,并且显然会变成真。因此,如果您的输入也是指定的任何字母,则它将为True,因为它不等于条件中的其他字母,并且只需要一个True,或条件才能计算为True

因此,您当前的代码将始终计算为True,循环将无限运行。您需要使用AND而不是OR,使用您发布的第二个代码,或者您可以使用递归

建议的选择:

使用及 递归
您的解决方案是错误的,因为它接受由hlc组合而成的所有输入。您必须在h、l、c中使用while而不是x:。嗯,您可以尝试找到从未犯过此错误的人,但这可能需要很长时间。请阅读以获取有关调试代码的提示。这些技术还可以用来学习工作代码的工作原理。
0 x = input('enter h,l, or c')
1 while True:
2    print('Sorry I didn't understand. Please enter h,l, or c')
3    x = input("enter h,l, or c")
x = input('enter h,l, or c')
while (x != 'c') and (x != 'h') and (x != 'l'):
    print("Sorry I didn't understand. Please enter h,l, or c")
    x = input("enter h,l, or c")

def checker():
    x = input("enter h,l, or c")
    if (x != 'c') and (x != 'h') and (x != 'l'):
        print("Sorry I didn't understand. Please enter h,l, or c")
        checker()

checker()