Ваш цикл 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
, использовать второй код, который вы опубликовали, или вы можете использовать рекурсию.
РЕКОМЕНДУЕМЫЕ ВАРИАНТЫ:
- Используйте 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")
- Рекурсия
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()