+ 1
Задача
Решение нашел но случайно. hour = int(input()) day = int(input()) if day==6 or day==7and hour<10 or hour>21: print ("Closed") if ((hour>=10) and (hour<=21)) and (day>=1 and day<=5): print ("Open") Но я не понимаю ведь в первом условии if разве не должны выполнится условие до and и после and и только тогда программа выдаст True и напишите Close Если к примеру написать 22 часа и 4 день . Программа напишет что магазин закрыт хотя первое условие не выполнено day ==6 or day ==7, а второе выполнено хотя межу ними стоит and который обязует к выполнению двух условий . Объясните пожалуйста почему первое условие if выполняется и выводит Closed Если hour=22 day=4
1 Answer
0
It can happen that our code is wrong, but by accident it does the right thing in some situations :)
The answer is related to the operator precedence rules.
"and" has higher precedence than "or" so it sticks to its two sides and evaluates sooner.
Let's examine your condition:
day==6 or day==7 and hour<10 or hour>21
Python interprets it this way:
day==6 or (day==7 and hour<10) or hour>21
When we have day=4, hour=22:
day==6 # False
day==7 and hour<10 # False
hour>21 # True
So the result is:
(False or False or True) # True
More on logical operator precedence:
https://stackoverflow.com/questions/16679272/priority-of-the-logical-statements-not-and-or-in-python