Top.Mail.Ru
Ответы

Помогите найти ошибку в коде python!

Задача: На доске стоит белая шашка. Требуется определить, может ли она попасть в заданную клетку, делая ходы по правилам (не превращаясь в дамку).

Формат ввода

Вводится клетка, где стоит шашка, а затем клетка, куда шашка должна попасть.

Каждая клетка описывается номером вертикали, а затем номером горизонтали.

Формат вывода

Выведите слово YES (заглавными буквами), если шашка может попасть из начальной клетки в указанную, и NO в противном случае.

Примечания

Доска имеет размер 8x8, вертикали нумеруются маленькими латинскими буквами от a до h, горизонтали - числами от 1 до 8. Исходная и конечная клетки не совпадают.

a = int(input())
b = int(input())
c = int(input())
d = int(input())

v1 = (a + 2 == c and ((b - 2 == d) or (b + 2 == d)))
v2 = (a + 2 == c and (b == d))

k1 = (a + 3 == c and ((b - 3 == d) or (b + 3 == d)))
k2 = (a + 3 == c and ((b - 2 == d) or (b + 2 == d)))
k3 = (a + 3 == c and ((b - 1 == d) or (b + 1 == d)))

l1 = (a + 4 == c and ((b - 4 == d) or (b + 4 == d)))
l2 = (a + 4 == c and ((b - 2 == d) or (b + 2 == d)))
l3 = (a + 4 == c and (b == d))

s1 = (a + 5 == c and ((b - 1 == d) or (b + 1 == d)))
s2 = (a + 5 == c and ((b - 3 == d) or (b + 3 == d)))
s3 = (a + 5 == c and ((b - 5 == d) or (b + 5 == d)))

w1 = (a + 6 == c and ((b - 6 == d) or (b + 6 == d)))
w2 = (a + 6 == c and ((b - 4 == d) or (b + 4 == d)))
w3 = (a + 6 == c and ((b - 2 == d) or (b + 2 == d)))
w4 = (a + 6 == c and (b == d))

s1 = (a + 7 == c and ((b - 7 == d) or (b + 7 == d)))
s2 = (a + 7 == c and ((b - 5 == d) or (b + 5 == d)))
s3 = (a + 7 == c and ((b - 3 == d) or (b + 3 == d)))
s4 = (a + 7 == c and ((b - 1 == d) or (b + 1 == d)))
s = s1 + s2 + s3 + s4

if a == c and b == d:
print("YES")
elif (a + 1 == c and b - 1 == d) or (a + 1 == c and b + 1 == d):
print("YES")
elif (v1 is True) or (v2 is True):
print("YES")
elif (k1 is True) or (k2 is True) or (k3 is True):
print("YES")
elif (l1 is True) or (l2 is True) or (l3 is True):
print("YES")
elif (s1 is True) or (s2 is True) or (s3 is True) or (s4 is True):
print("YES")
elif (w1 is True) or (w2 is True) or (w3 is True) or (w4 is True):
print("YES")
elif s == 1:
print("YES")
else:
print("NO")

Вроде работает правильно, но анализатор не принимает программу. Хотя бы понять, где ошибка...

Дополнен

upd: пробелы для print в коде учтены

По дате
По рейтингу
Аватар пользователя
Новичок
8лет

Это беспредел, а не код. Для начала:
- давай переменным вменяемые имена: не a,b,c,d, а хотя бы ch_v,ch_h, tgt_v, tgt_h - от checker (шашка), target (цель), h,v - горизонталь, вертикаль.
- скобки либо ставь для обеих операндов одного вида, либо ни для одного: не (что-то and (что-то or (что-то)), а или
((что-то) and ((что-то) or (что-то)), или что-то and (что-то or что-то).
- не сравнивай булевы переменные с True, тем более оператором is: не elif (s1 is True), а просто if s1 (s1 тоже как-то по-человечески обзови).
- код выкладывай не сюда, а на какой-нибудь pastebin.com - тут отступы убиваются.
- нарисуй это все на листике - может, увидишь, как лучше можно сравнить (тут на самом деле на одну строчку все сравнение).

Аватар пользователя
Знаток
8лет

Как и было сказано выше, ответ в одну строку:

x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())

print("YES") if abs(x1 - x2) % 2 == abs(y1-y2) % 2 else print("NO")

Аватар пользователя
Знаток
8лет

А кто будет длинный пробел ставить?