Форум сайта python.su
Вопрос в том, почему если я пишу 5 == 1 or 2 (5 же вроде не равно 1 или 2, втф) оно считает что это верно?
>>> if 5 == 1 or 2: s = 2 + 4 >>> print(s) 6 >>>
Отредактировано Pam_pam (Янв. 4, 2017 13:24:43)
Офлайн
Потому что есть такое понятие старшинство операции, и вам с этим понятием необходимо ознакомиться
Офлайн
Эммм…
# print(5 == 3 or 3) print(bool(5 == 3 or 3))
Отредактировано 4kpt_IV (Янв. 4, 2017 13:34:05)
Офлайн
# Оператор if тип 1. Работает корректно s = 1 if 5 == 1 or 5 == 2: s = 2 + 4 print(s) # Оператор if тип 2. Работает не корректно в данном контексте s1 = 1 if 5 == 1 or 2: s1 = 2 + 4 print(s1)
Отредактировано _nemo_ (Янв. 5, 2017 15:15:56)
Офлайн
_nemo_Оператор работает корректно т.к. 5 == 1 - False, а любое число не равное 0 будет - True. False or True будет True.# Оператор if тип 2. Работает не корректно в данном контексте s1 = 1 if 5 == 1 or 2: s1 = 2 + 4 print(s1)
Офлайн
Раз уж вы так настойчиво спрашиваете, почему.
Задумайтесь, какие преобразования происходят при вычислении
bool(5 == 1 or 2)
(5 == 1) or 2
>>>5 == 1 False
>>>False or 2
True or _что_угодно_
>>>if is_in_bounds(x, y) and is_empty(x, y): >>> draw_dot(x, y)
>>>bool(2) True >>>False or True True
>>>True == 1 True >>>False == 0 True >>>5 + True 6 >>>False - True -1
>>>5 == (1 or 2)
>>>5 == 1 or 5 == 2
Отредактировано greeblie (Янв. 5, 2017 16:50:51)
Офлайн
Romissevd
Оператор работает корректно т.к. 5 == 1 - False, а любое число не равное 0 будет - True. False or True будет True.
P.S. В данном случае не будет сравнения 5 сперва с 1, а потом с 2.
Офлайн