@egorzenit

Почему при использовании оператора or в Пайтон, нарушается логика if?

Всем привет, такой вопрос.
Есть к примеру какое то условие if

if message.text == 'BLA' or 'BLABLA':
    exec something
else:
    exec чето еще


Вопрос сообственно такой, почему оператор "or" в питоне при его использовании начинает обрабатывать любое сообщение и считать его подходящим под условие?

Грубо говоря неважно что я введу в message.text, он все равно спустится в условие как будто сообщение BLA или BLABLA

если же я не использую оператор or и проверяю только одно условие, все работает как нужно. Что я не так делаю? как проверять выражения с использованием оператора или(or) в питоне?
  • Вопрос задан
  • 155 просмотров
Решения вопроса 2
drygdryg
@drygdryg
Python-разработчик
Потому что у оператора or меньший приоритет, чем у оператора ==. Сначала выполняется message.text == 'BLA', затем 'BLABLA' — последнее всегда расценивается как True (непустая строка). Можно расставить скобки для лучшего понимания приоритета выполнения:
if (message.text == 'BLA') or 'BLABLA':
Затем строку "BLABLA" можно заменить на True:
if (message.text == 'BLA') or True:
Это условное выражение всегда будет равно True.

Скорее всего, вы хотели написать:
if message.text == 'BLA' or message.text == 'BLABLA':

Я заменил бы эти два условия кортежем с допустимыми значениями и оператором in:
if message.text in ('BLA', 'BLABLA'):
Ответ написан
@vanoren
Начинающий разработчик
if message.text == 'BLA' or message.text == 'BLABLA':
    ...

Иначе питон преобразует текст к значению boolean, и BLABLA будет равно True.
Оператор or, если один из операндов равен True - возвращает True, иначе False
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы