Условия неправильно работают python

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")

Пытаюсь решить задачку на ход ладьи, вводится 4 значения и нужно узнать может ли так сходить ладья. Описал все шаги ладьи но при вводе 4322 выводится yes. Почему не срабатывает условие?


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

Автор решения: Эникейщик

Условия работают правильно. При вводе 4322 выполняется b = d+1 (3=2+1). Поэтому выводится "yes".

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

Все дело в приоритете операций.

Для того, чтобы понять как интерпретируется данная конструкция предлагаю ее упростить, заменив каждое сравнение результатом - False / True.

Получиться:

False or False or False and False or True or False

данная конструкция интерпретируется слева направо и первые четыре предиката:

False or False or False and False

можно упростить до единственного False - получится:

False or True or False

результатом будет True


NOTE: на будущее - если в строке сравнения присутствуют оба предиката or и and , то задавайте приоритет явно при помощи скобок:

print((False or False or False) and (False or True or False))
# False
→ Ссылка