Этот цикл не прерывается, если вводится 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
datagoat 24 Июн 2019 в 19:48

5 ответов

Лучший ответ

Посмотрите на ваше состояние:

while (x != 'c') or (x != 'h') or (x != 'l'):

Рассмотрим случай, когда входным символом является c. Первое условие: False, а два других - True. F или T или T это True.

Вам нужны and соединители в вашем состоянии. Еще лучше, попробуйте

while not x in ['h', 'l', 'c']:
3
Prune 24 Июн 2019 в 17:02

Ваш цикл 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")

Давай объясним

ВХОДНЫЕ СЦЕНАРИИ:

А. Если input равен 'z', z не равен ни одной из букв, поэтому он становится True для всех условий. Это означает, что любой ввод, который не является одним из 'h', 'l', 'c', будет оцениваться как True.

Б . Если input равен 'h', h не равен ни l, ни c. Это оценивает сценарий True OR False OR True и, очевидно, становится True. Таким образом, если в качестве входных данных также используется любая из указанных букв, это будет True, поскольку он не равен другим буквам в условии, и для True требуется только одна True X4}} условие для оценки True.

Таким образом, ваш текущий код ВСЕГДА оценивается как True, и цикл будет выполняться бесконечно. Вам нужно использовать AND вместо OR, использовать второй код, который вы опубликовали, или вы можете использовать рекурсию.

РЕКОМЕНДУЕМЫЕ ВАРИАНТЫ:

  1. Используйте И
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")

  1. Рекурсия
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()
1
ayivima 24 Июн 2019 в 17:35

Вы должны были использовать условие 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")
3
Siong Thye Goh 24 Июн 2019 в 17:01

Начнем с утверждения, что 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")
1
tantalum 24 Июн 2019 в 16:57

Из-за ошибки в логической операции.

нет (А или В)

Эта логика равна

(не 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")
2
dolgom 24 Июн 2019 в 18:30