Question:
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a == c or a == c + 1 or a == c - 1 and b == d or b == d + 1 or b == d - 1:
print("YES")
else:
print("NO")
I am trying to solve the problem for the rook move. 4 values are entered and you need to find out if the rook can go like this. Described all the steps of the rook, but when you enter 4322, YES
is displayed.
Why is the condition not triggered?
Answer:
It's all about the priority of operations.
In order to understand how this construction is interpreted, I propose to simplify it by replacing each comparison with the result – False
/ True
.
Get it:
False or False or False and False or True or False
this construction is interpreted from left to right and the first four predicates:
False or False or False and False
can be simplified to the only False
– it turns out:
False or True or False
the result is True
NOTE: for the future – if both or
and and
predicates are present in the comparison string, then set the precedence explicitly using parentheses:
print((False or False or False) and (False or True or False))
# False