如果输入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")
第一段代码有何不正确之处? X不会在一开始就被评估吗?
答案 0 :(得分:3)
查看您的状况:
while (x != 'c') or (x != 'h') or (x != 'l'):
请考虑输入字符为c
的情况。第一个条件为False
,但其他两个条件为True
。 F或T或T为True
。
您的状况需要and
连接器。更好的是,尝试
while not x in ['h', 'l', 'c']:
答案 1 :(得分:2)
您应该使用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")
答案 2 :(得分:2)
由于逻辑运算错误。
不是(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")
答案 3 :(得分:1)
让我们从声明false or true
被评估为 true 的语句开始。因此,如果x
为c
,则(x != 'c')
将为 false ,而第二种情况(x != 'h')
将为 true ,根据我们的第一条陈述,整个or
表达式的计算结果为 true ,因此您的循环将永远不会退出。相反,您需要的是:
x = input('enter h,l, or c')
while not ((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")
答案 4 :(得分:1)
您的while循环将始终计算为True
0 x = input('enter h,l, or c')
1 while (x != 'c') or (x != 'h') or (x != 'l'):
2 print('Sorry I didn't understand. Please enter h,l, or c')
3 x = input("enter h,l, or c")
您的代码已变成这样:
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不等于任何字母,因此对于所有条件,它都变为True
。这意味着任何非“ h”,“ l”,“ c”之一的输入都将求值为True
。
b。如果输入为“ h”,则h既不等于l也不等于c。这将评估为True OR False OR True
场景,并且显然变成True
。因此,如果您输入的内容也是指定的任何字母,则它将为True
,因为它不等于条件中的其他字母,并且{{ 1}}条件评估为True
。
因此,您当前的代码将始终求值为True,并且循环将无限运行。您需要使用OR
而不是True
,使用您发布的第二个代码,或者可以使用递归。
推荐选项:
AND
OR