Python Почему в одном True в другом False

почему если в код ввести:

print(1 == 1 != False)

вывод: True

а если ввести:

print(2 == 1 != False)

то вывод: False


Ответы (4 шт):

Автор решения: Роман Ч.

Давайте поэтапно, действия выполняются слева направо:

  1. 1==1 это True, True != False это правда, соответственно вывод будет True
  2. 2==1 это False, False != False это ложь, потому что они равны. Соответственно вывод будет False
→ Ссылка
Автор решения: Sergey Semkin

Это логические операции

Так как pyhton для ленивых то он опускает некоторые скобки и твоё лог. выражение выглядит вот так

(1 == 1) != False

Сначала он сравнивает значение в скобках, а после ответ из скобок сравнивает с false

→ Ссылка
Автор решения: CrazyElf

Объяснения, которые даны в других ответах, вообще-то неправильные. И проверить это довольно легко, вот пример:

print(False == False == False)
print(0 == 0 == 0)

Согласно объяснениям из других ответов тут должно получиться:

(False == False) == False -> True == False -> False
(0 == 0) == 0 -> True == 0 -> False

Однако же питоном выводится обратный результат:

True
True

Объяснение простое. Результат таких действий определяется по следующей схеме:

a op1 b op2 c ... y opN z -> a op1 b and b op2 c and ... y opN z
                                     ^^^         ^^^

Т.е. выражение:

False == False == False

Вычисляется как:

(False == False) and (False == False)

Объясняется это в эпическом тексте WTF Python!, который, похоже, многие ещё до сих пор не прочитали.

Примеры автора вопроса, соответственно:

1 == 1 != False -> 1 == 1 and 1 != False -> True and True -> True
2 == 1 != False -> 2 == 1 and 1 != False -> False and True -> False

И, как правильно дополнил Roman Konoval, такая форма записи вообще была придумана в питоне, чтобы покороче записывать условия такого вида:

0 <= x <= 100 -> 0 <= x and x <= 100
a < b < c < d < e -> a < b and b < c and ...
→ Ссылка
Автор решения: Mikhail Sibirev

Есть ещё более простое объяснение. В Python тип bool - это потомок типа int, т.е. True и False - это 1 и 0 соответственно. Таким образом, получаем:

в первом примере:

1 != 0

Результат: True

во втором примере:

0 != 0

Результат: False

См.также: https://ru.stackoverflow.com/a/553527/208075

→ Ссылка