Python Почему в одном True в другом False
почему если в код ввести:
print(1 == 1 != False)
вывод: True
а если ввести:
print(2 == 1 != False)
то вывод: False
Ответы (4 шт):
Давайте поэтапно, действия выполняются слева направо:
1==1 это True,True != Falseэто правда, соответственно вывод будет True2==1 это False,False != Falseэто ложь, потому что они равны. Соответственно вывод будет False
Это логические операции
Так как pyhton для ленивых то он опускает некоторые скобки и твоё лог. выражение выглядит вот так
(1 == 1) != False
Сначала он сравнивает значение в скобках, а после ответ из скобок сравнивает с false
Объяснения, которые даны в других ответах, вообще-то неправильные. И проверить это довольно легко, вот пример:
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 ...
Есть ещё более простое объяснение. В Python тип bool - это потомок типа int, т.е. True и False - это 1 и 0 соответственно. Таким образом, получаем:
в первом примере:
1 != 0
Результат: True
во втором примере:
0 != 0
Результат: False