为什么这个while循环不中断?

时间:2019-06-24 16:48:55

标签: 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 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不会在一开始就被评估吗?

5 个答案:

答案 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 的语句开始。因此,如果xc,则(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,使用您发布的第二个代码,或者可以使用递归。

推荐选项:

  1. 使用AND
AND
  1. 递归
OR