@mekoer

Условие if и оператор or?

Сейчас нахожусь на начальной стадии изучения языка. Ниже код, почему при его применение в ответе вижу 'ok'.

a = '1111'
if a == 'нет' or 'да':
    print('ok')
else:
    print('net')
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
MaKvc
@MaKvc
Отчаянный веб-разработчик
Читайте!
Ваше условие (if a == 'нет' or 'да':) работает следующим образом:
Python проверяет, a равно 'нет', естественно а неравно 'нет', а содержит строку '1111', НО ПОТОМ идет OR, операнд справа - это строка 'да', естественно Python считает ее за истину true, она ведь непустая!
Получается, это условие, эквивалентно if a == 'нет' or true:, а это значит, что print('ok') выполнится в любом случае, так как, в условии есть часть or true,Pythony плевать на a == 'нет', он видит OR, видит true и выполняет условие, проще говоря, можно выкинуть лишнее, и записать так: if true: - это, все также эквивалентно if a == 'нет' or 'да':
Для большего понимания происходящего, попробуйте заменить if a == 'нет' or 'да': на if a == 'нет' or '':. В этом случае, пустая строка эквивалентна false и при этом,a неравно 'нет', а это значит, что условие не будет выполнено и вы не увидите print('ok').

Правильное условие:
if a == 'да':
    print('ok')
elif a == 'нет':
    print('net')
else:
    print('error')

В случае с or, правильно будет так:
if a == 'да' or a == 'нет':

ЗАНОВЕС!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
нужно писать
a == 'нет' or a == 'да'
Ответ написан
@bbkmzzzz
if var: <- интерпретатор в этом случае проверяет, не является ли значение переменной пустым или None, если не является - условие истинно
x = 10
print(True if x else False)

x = 0
print(True if x else False)

x = 'string'
print(True if x else False)

x = ''
print(True if x else False)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы