Оператор or работает не так, как нужно

Пытаюсь написать шахматы на Python. Крайне редко использую оператор or, но в этот раз без него никак. Почему оператор or работает не так, как нужно?

old_y = int(input("Введите позицию y (1-8) фигуры\n"))
old_y -= 1
old_x = input("Введите позицию x (a-h) фигуры\n")
old_x = abc.index(old_x)
new_y = int(input("Введите позицию y (1-8) фигуры\n"))
new_y -= 1
new_x = input("Введите позицию x (a-h) фигуры\n")
new_x = abc.index(new_x)
if board[old_y][old_x] == "♙" and old_y == 1:
    if new_y == 2 or new_y == 3 and new_x - old_x == 1 or new_x - old_x == -1 or new_x - old_x == 0:
        pass  # Выполняется вот эта часть, хотя разница между переменными new_x и old_x = -7
    else:
        print("Неверно задан ход\n")
        continue

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

Автор решения: CrazyElf
if new_y == 2 or new_y == 3 and new_x - old_x == 1 or new_x - old_x == -1 or new_x - old_x == 0:

У оператора and приоритет выше, чем у оператора or, поэтому ваша запись эквивалентна такой:

if new_y == 2 or (new_y == 3 and new_x - old_x == 1) or new_x - old_x == -1 or new_x - old_x == 0:

Если вы хотите сгруппировать условия, которые через or, то используйте скобки:

if (new_y == 2 or new_y == 3) and (new_x - old_x == 1 or new_x - old_x == -1 or new_x - old_x == 0):

А вообще всё это можно записать короче с помощью оператора in:

if new_y in (2,3) and (new_x - old_x) in (1,-1,0):

Или так, чтобы объединить проверку на 1 и -1:

if new_y in (2,3) and abs(new_x - old_x) in (0,1):
→ Ссылка