Форум сайта python.su
0
Привет всем. Я тут начал изучать Python самостоятельно путем решение всяких задач. Помогите, пожалуйста, с вот этой вот задачкой. Объясните почему в одном случае у меня получается такой ответ, в другом другой, хотя эти 2 кода практически одинаковы.
Вот сама задача :
Шахматный король ходит по горизонтали, вертикали и диагонали, но только на 1 клетку. Даны две различные клетки шахматной доски, определите, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую или NO в противном случае.
А вот мои 2 кода:
Правильный:
a1 = int(input())
a2 = int(input())
b1 = int(input())
b2 = int(input())
if ‘((a1 == b1) or (a1 + 1 == b1) or (a1 - 1 == b1)) and’ + \
‘((a2 == b2) or (a2 + 1 == b2) or (a2 - 1 == b2))’:
print('YES')
else:
print('NO')
Неправильный:
a1 = int(input())
a2 = int(input())
b1 = int(input())
b2 = int(input())
if ‘((a1 == b1) or (a1 + 1 == b1) or (a1 - 1 == b1)) and’ + \
‘((a2 == b2) or (a2 + 1 == b2) or (a2 - 1 == b2))’:
print('YES')
else:
print('NO')
Сразу скажу что мне нужен этот перенос строки, и вот в первом случае когда я не обособляю апострофами код, то все нормально
Когда обособляю, то код ломается
Введите в 1 программу 1, 1, 1, 8 и он выдаст ‘NO’ и это будет правильно, во 2 программу введите тоже самое и он выдаст ‘YES’ и это будет неправильно.
СУТЬ в том что я не могу разобраться когда нужно при переносе строки обособлять код апострофами, а когда не нужно, в первом случае ругается PEP8, во втором он не ругается, но код неправильный)))
Заранее извиняюсь за такой столб текста, ошибки в тексте и все остальное.
Очень хочу разобраться в этом!
Офлайн
294
zootycoonМ-м-м это игра “найди десять отличий”, сколько не смотрел оба кода абсолютно идентичны
А вот мои 2 кода:
zootycoonКакие апострофы? вы о чем? откуда вы вообще взяли эти апострофы в PEP8? если под апострофами вы подразумеваете одинарные кавычки то в одинарные кавычки заключают строки, и во втором случае у вас в условии просто конкатенация двух строк, а в пайтоне непустая строка всегда возвращает True, поэтому у вас всегда будет ‘YES’.
СУТЬ в том что я не могу разобраться когда нужно при переносе строки обособлять код апострофами, а когда не нужно, в первом случае ругается PEP8, во втором он не ругается, но код неправильный)))
[code python][/code]
Отредактировано PEHDOM (Ноя. 13, 2018 17:16:52)
Офлайн
61
А зачем нужен перевод строки?
PEHDOM вам правильно указал на ошибку.
Все что у питона находится между кавычками (одинарными или двойными) это строка (type String)
Поэтому там у вас не условия а текст.
Можно еще делать немного иначе, разбив на сегменты ваши:
a1 = 3 b1 = 1 cheker1 = ((a1 == b1) or (a1 + 1 == b1) or (a1 - 1 == b1)) print(type(cheker1), cheker1)
if cheker1 and checkerx:
Отредактировано ZerG (Ноя. 13, 2018 19:34:54)
Офлайн