вопрос по решению задачи "ход короля" на pythontutor

codingtodeath

Новичок
Пользователь
Июл 13, 2023
1
0
1
Здравствуйте, начал освоение пайтона около недели назад и в данный момент прорешиваю задачи с сайта pythontutor. С одной из задач возникла проблема, которую никак не могу решить.

текст задачи:

Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую или NO в противном случае.

мое решение:
if (c==a+1 or a-1 or c==a) and (d==b+1 or b+1 or d==b):
решение пользователя:
if (x - a == 1 or x - a == 0 or x - a == -1) and (y - z == 1 or y - z == 0 or y - z == -1)
решение из интернета:
if (x - a == 1 or x - a == 0 or x - a == -1) and (y - z == 1 or y - z == 0 or y - z == -1)

почему мое решение не подходит, а другие подходят хотя принцип один и тот же? обьясните пожалуйста в чем я допустил ошибку
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
У вас в проверке условия не проверяются случай когда переменная с равна a-1. Т.е. для первого c==a+1 написан оператор сравнения ==, а для a-1 его нет. То же самое с переменной d, более того 2 раза записан b+1, должно быть b-1 как я понял.

решение пользователя:
if (x - a == 1 or x - a == 0 or x - a == -1) and (y - z == 1 or y - z == 0 or y - z == -1)
решение из интернета:
if (x - a == 1 or x - a == 0 or x - a == -1) and (y - z == 1 or y - z == 0 or y - z == -1)
Как по мне, это длинные простыни, можно же проще:
if x - a in (1, 0, -1) and y - z in (1, 0, -1)

Ну а в вашем случае можно записать как-то так:
if c in (a+1, a-1, a) and d in (b+1, b-1, b)
 

Форум IT Специалистов