Почему в этом коде при проверке слов с помощью оператора in с использованием скобок он ведет себя так, как ожидается, в то время как без скобок - по-другому?

Почему, если убрать скобочки в 3-й и 5-й строках кода, выводом будет всегда "Отлично, у меня тоже всё хорошо :)" при любом вводе пользователя?
  • 19 октября 2023 г. 10:18
Ответы на вопрос 2
Это происходит из-за приоритета операторов в Python. 

Оператор `in` имеет более высокий приоритет, чем оператор `and`. 

Поэтому, когда мы пишем условие как `(word in phrase) and (word in another_phrase)`, сначала выполняется проверка `(word in phrase)`, а затем результат этой проверки связывается с оператором `and` и выполняется проверка `(word in another_phrase)`.

Однако, если мы уберем скобки и напишем условие как `word in phrase and word in another_phrase`, то сначала будет выполнена проверка `word in phrase and word`, а затем результат этой проверки (который является булевым значением) будет связан с оператором `and` и выполнится неправильно. 

Поэтому, когда мы убираем скобки, вывод будет всегда "Отлично, у меня тоже всё хорошо :)", потому что любое слово будет считаться содержащимся и в `phrase` и в `another_phrase`.
("хорошо" or "прекрасно" or "отлично" or "пойдет") - Я думаю, что это выражение равно True. Вот как он выглядит, если перепишем его в синтаксисе Python: otvet = "хорошо" or "прекрасно" or "отлично" or "пойдет"

Это выражение не должно работать. "or" - это логический оператор. Вы пытаетесь сравнивать строки в качестве логического выражения, которое дает результат True или False. Затем вы пытаетесь найти этот результат в списке с помощью оператора "in", но он будет искать последнее введенное слово, а не то, что вы ожидаете. Из-за скобок вы меняете приоритет операций, и сначала выполняется оператор "in" с ближайшим словом, а затем оператор "or" с истинными строками. В результате всегда будет True.
Похожие вопросы