Проверка соответствия одному из нескольких условий.

MacSeem

Пользователь
Пользователь
Май 15, 2020
37
6
8
Не могу понять, как проверить, равно ли введенное число хотя бы одному из нескольких. Пробую через оператор or но проверка всегда отрицательная, даже если ввод правильный. Подскажите плиз.
Python:
x = int (input ('вводи 1 или 2 или 3'))
while x != 1 or 2 or 3:
    print ('вводи что сказано')
    x = input ()
print ('ты ввел', x, 'молодец')
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:
Python:
x = int(input('вводи 1 или 2 или 3: '))
while x not in [1, 2, 3]:
    print('вводи что сказано')
    x = int(input())
print('ты ввел', x, 'молодец')
 
  • Мне нравится
Реакции: Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
спасибо! но всё-таки интересно, почему "or" не работает тут.
Потому что цикл while работает пока условие не станет True, а условие x != 1 or 2 or 3 всегда True, так как 2 is True и 3 is True. В итоге получается True или False в зависимости от значения x or True or True и цикл останавливается.
Условие можно переписать с использованием and вместо or тогда оно будет работать:
Python:
while x != 1 and x != 2 and x != 3:
 

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
@stud_55 я очень редко пользуюсь такой констукцией с while, изящьно выглядит.
 

MacSeem

Пользователь
Пользователь
Май 15, 2020
37
6
8
Вот пример:
Python:
x = int(input('вводи 1 или 2 или 3: '))
while x not in [1, 2, 3]:
    print('вводи что сказано')
    x = int(input())
print('ты ввел', x, 'молодец')
спасибо! но всё-таки интересно, почему "or" не работает тут.
 

MacSeem

Пользователь
Пользователь
Май 15, 2020
37
6
8
Потому что цикл while работает пока условие не станет True, а условие x != 1 or 2 or 3 всегда True, так как 2 is True и 3 is True. В итоге получается True или False в зависимости от значения x or True or True и цикл останавливается.
Условие можно переписать с использованием and вместо or тогда оно будет работать:
Python:
while x != 1 and x != 2 and x != 3:
спасиб!
 

MacSeem

Пользователь
Пользователь
Май 15, 2020
37
6
8
В итоге вот, два рабочих варианта. Один c and и другой c or. Пошел с логикой теперь разбираться :)

Код:
x = int (input ('вводи 1 или 2 или 3'))
while x != 1 and x != 2 and x != 3:
    print ('вводи что сказано')
    x = int (input ('вводи 1 или 2 или 3'))
print ('ты ввел', x, 'молодец')

Код:
x = int (input ('вводи 1 или 2 или 3'))
while not (x == 1 or x == 2 or x == 3):
    print ('вводи что сказано')
    x = int (input ('вводи 1 или 2 или 3'))
print ('ты ввел', x, 'молодец')
 
Последнее редактирование:

Форум IT Специалистов