Почему этот цикл while не прерывается? - PullRequest
0 голосов
/ 24 июня 2019

Этот цикл не прерывается, если вводится 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 ]

3 голосов
/ 24 июня 2019

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

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

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

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

while not x in ['h', 'l', 'c']:
2 голосов
/ 24 июня 2019

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

не (А или В)

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

(не А) и (не В)

Итак, первый код должен быть

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 голосов
/ 24 июня 2019

Вы должны были использовать 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")
1 голос
/ 24 июня 2019

Ваш цикл 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, потому что она не равна другим буквам в условии, и для оценки условия OR требуется только один True до True.

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

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

  1. Используйте AND
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 голос
/ 24 июня 2019

Давайте начнем с утверждения, что 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...