Шахматный слон ходит по диагонали даны две различные клетки шахматной доски определите может ли слон

Обновлено: 01.05.2024

Условный оператор или оператор ветвления - это оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения. Спасибо, Википедия! Такое определение можно найти в любой книге по программированию. Его крайне желательно хотя бы понимать.

Попробую дать более популярное определение: условный оператор выполняет некоторое действие, если указанное условие истинно (равно True).

Вот так выглядит if. else в Python

if True :
print ( 'Условие истинно, поэтому я напечатаюсь' )

Приведу пример поинтереснее:

a = 10
b = 5
if a > b:
print ( 'a больше b равно True ' )

Если условие ложно, то код, находящийся под оператором if не выполнится:

a = 3
b = 9999999
if a > b:
print ( 'Я никогда не напечатаюсь :(' )

Дополним предыдущий пример оператором else

a = 3
b = 9999999
if a > b:
print ( 'Я никогда не напечатаюсь :(' )
else :
print ( 'if не выполнился, так что печатаюсь я' )

Если условие в if ложно, то выполнится оператор под оператором else

Приведу еще несколько примеров:

Иногда двух вариантов недостаточно, для этого существует оператор elif, а для все остального есть.

age = int ( input ())
if age 10 :
print ( 'Ваш возраст - это одна цифра :)' )
el if age 15 :
print ( 'Геометрия - это жестко (хочу обратно в началку)' )
else :
print ( 'В школе было круто' )

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

a = int ( input ( 'Введите число от одного до 1 до 100 ' ))
if a 10 :
print ( 'Ваше число меньше 10 ' )
el if a 20 :
print ( 'Ваше число меньше двадцатки' )
el if a 30 :
print ( '30 - это потолок' )
el if a 40 :
print ( 'Ваше число меньше 40 ' )
el if a 50 :
print ( 'Много, но не больше полтинника' )
el if a 60 :
print ( 'Число меньше, чем шесть*десять' )
el if a 70 :
print ( 'Ваше число расположено в восьмом десятке' )
el if a 80 :
print ( 'Ваше число меньше 80' )
el if a 90 :
print ( 'Ваше число находится в 9 десятке' )
el if a 100 :
print ( 'Сотня больше вашего числа' )
else :
print ( 'Хитро, но меня не обманешь, число слишком большое' )

Да, мне нечем было заняться, ну и что? Никогда не делайте так, как написано в примере выше. Если в вашем коде больше трех elif значит что-то не так и стоит придумать новый алгоритм. Давайте еще разок: много elif - плохо!

Примеры решения задач

Проверить является ли клетка шахматной доски белой

Во втором случаем числа вводятся с клавиатуры

x = int ( input ( 'Введите координату x: ' ))
y = int ( input ( 'Введите координату y: ' ))
if (x + y) % 2 == 1 :
print ( 'YES' )
else :
print ( 'NO' )

Проверить может ли слон ходить с первой шахматной на вторую

То же самое, но с помощью ввода с клавиатуры

x1 = int ( input ( 'Введите координату x1: ' ))
x2 = int ( input ( 'Введите координату y1: ' ))
y1 = int ( input ( 'Введите координату x2: ' ))
y2 = int ( input ( 'Введите координату y2: ' ))
if x1 == x2 and y1 != y2 or x1 != x2 and y1 == y2:
print ( 'YES' )
else :
print ( 'NO' )

Решение задач

1. Пользователь вводит два целых числа. Выведите меньшее из них.

2. Пользователь вводит свое имя и возраст. Если возраст пользователя больше 18, то вывести строку "Добрый вечер, name! Вы совершеннолетний, поздравляем!", иначе вывести строку "Привет, name! Приносим извинения, но вы не можете гулять после 22:00". Пример:

3. Пользователь вводит три строки. Одна из них равна строке "Python", выведите номер этой строки.

4. Пользователь вводит три целых числа. Два из них равны друг другу. Выведите третье число, не равное остальным. Если среди введенных чисел не оказалось двух равных друг другу, выведите строку "Ошибка".

5. Пользователь вводит целое число. Проверьте является ли это число четырехзначным, если является, то выведите строку "Успешно", иначе "Неудача".

6. Пользователь вводит целое число - текущее время в часах. Если количество часов находится между 7 и 10, то программа должна вывести строку "Пора вставать!", иначе выведется строка "Ты проспал!". Если введенное число отрицательно или больше 23, то программа должна вывести строку "Ошибка".

7. Пользователь вводит текущее время в часах. Если количество часов находится в диапазоне от 0 до 7, то программа выводит строку "Ночь". Если часовая стрелка находится между 7 и 11, то выведется строка "Утро". От 12 до 17 выведется строка "День". Если текущее время находится между 17 и 23, то программа должна вывести строку "Вечер". В случае, когда введенное число отрицательно или превосходит 23, программа должна вывести строку "Ошибка".

8. Пользователь вводит строку - название времени года. Если введенная строка - это лето, то выведите строку "Тополинный пух, жара, июль", если зима, то "Снеговик, снежки и горка", если осень, то "Пора в школу!", если весна, то "Весенняя капель". В случае, если введенная строка не равна ни одному из предложенных вариантов, программа должна выводить строку "Ошибка".

9. Пользователь вводит целое число - номер месяца своего рождения. Выведите строку "Вы родились летом", если номер месяц совпадает с номером одного из летних месяцев. Если номер месяца совпал с номером одного из зимних месяцев, то нужно вывести "К холодам вам не привыкать". Для людей, которые празднуют свой день рождения осенью выведите "Я тоже люблю осенний листопад". Если весна ваше время года выведите строку "Подснежник". В случае, если введенное число меньше единицы или больше 12, выведите строку "Ошибка".

10. Пользователь вводит номер года своего рождения. Если этот год является високосным выведите "Вы случайно родились не 29 февраля?", иначе выведите "Ничего необычного".
Для справки, в високосном году 366 дней, а в обычном - 365. Номер високосного года, делится на 4, за исключением номеров тех годов, которые делятся на 100 и не делятся на 400 (например, годы 300, 1300 и 1900 не являются високосными, а 1200 и 2000 - являются).

11. Пользователь вводит целое число. Выведите его строку-описание вида "отрицательное четное число", "нулевое число", "положительное нечетное число", например, численным описанием числа 190 является строка "положительное четное число".

12. Дано целое число, лежащее в диапазоне от 1 до 999. Если число двузначное, выведите строку "Двузначное", если число содержит одну значащую цифру, то выведите строку "Цифра", если число является трехзначным выведите "Трехзначное". В случае, если введенное число меньше 0 или больше 999, выведите строку "Ошибка!".

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

14. Шахматный ферзь ходит по диагонали, горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ферзь попасть с первой клетки на вторую одним ходом. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку "Ошибка!".

15. Шахматный конь ходит буквой "Г" - на две клетки по вертикали в любом направлении и на одну клетку по горизонтали, или наоборот. Даны две различные клетки шахматной доски, определите, может ли конь попасть с первой клетки на вторую одним ходом. В случае, если хотя бы одно из введенных чисел не лежит в диапазоне от 1 до 8, выведите строку "Ошибка!".

16. Треугольник существует только тогда, когда сумма любых двух его сторон больше третьей. Дано a, b, c - стороны предполагаемого треугольника. Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.

Шахматный слон ходит по диагонали. Даны две различные клетки шахматной доски, определите, может ли слон попасть с первой клетки на вторую одним ходом.
Пока есть это:
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a == c or b == d:
print('NO')
elif abs((a+b-c+d)%2) == 0:
print('YES')
else:
print('NO')
Но ругается на такие вводные:
7
4
2
5
Не могу понять как выделить клетки не на одной диагонали и исключить их.

x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2):
print('YES')
else:
print('NO')

или так
a,c,b,d = (int(input()) for i in range(4))
print('YES' if abs(a - b) == abs(c - d) else 'NO')

бред полный Гуру (2507) как так?

x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2):
print('YES')
else:
print('NO')

x1=int(input())
y1=int(input())
x2=int(input())
y2=int(input())
if x2!=x1 and y2!=y1 and (x2-y2==x1-y1 or x2+y2==x1+y1):
print('YES')
else:
print('NO')

Задача с питонтутор, но одного понять не могу, почему все решают через "модуль". даже ответ разработчиков с "модулем" и не только в этой задаче, но и предыдущих. Ничего, что модуль какбэ еще не изучался на питонтуторе? и правильно ли его использовать в решениях?

a1 = int(input())
b1 = int(input())
a2 = int(input())
b2 = int(input())
if a1 == a2 and b1 == b2:
print('odna i ta zhe tochka')
elif (a1 + b1) == (a2 + b2) or (a2 - a1) == (b2 - b1) or -1 * (a2 - a1) == -1 * (b2 - b1):
print('yes')
else:
print('no')

o1=int(input())
r1=int(input())
o2=int(input())
r2=int(input())
if o1==o2+r1-r2 and r1==r2+o1-o2 or o1==o2-r1+r2 and r1==r2-o1+o2:
print('YES')
else:
print('NO')o1=int(input())
r1=int(input())
o2=int(input())
r2=int(input())
if o1==o2+r1-r2 and r1==r2+o1-o2 or o1==o2-r1+r2 and r1==r2-o1+o2:
print('YES')
else:
print('NO')

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

if (y1 - y2) % 2 == (x1 - x2) % 2 and y1 != x1 and y2 != x2 and abs(y1 - x1) == abs(y2 - x2):
print('YES')
else:
print('NO')

x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if x1 - x2 == y1 - y2 or x1 + y1 == x2 + y2 :
print('YES')
else:
print('NO')
Простая без всяких abs
Сработала на 33 тестах

x1 - x2 == y1 - y2 это для того чтобы слон мог ходить по диагонали на любое растоянние назад, а x1 + y1 == x2 + y2, чтобы идти вперёд

st1 = int(input())
str1 = int(input())
st2 = int(input())
str2 = int(input())
a = st1 - st2 == str1 - str2
b = st2 - st1 == str2 - str1
c = st2 - st1 == str1 - str2
d = st1 - st2 == str2 - str1
if a or b or c or d:
print("YES")
else:
print("NO")

этот код подходит если вариант с "abs" не работает

Эта задача имеет простое и элегантное решение и без применения функции abs:
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if x1 - y1 == x2 - y2 or x1 + y1 == x2 + y2:
print("YES")
else:
print("NO")

x = int(input())
y = int(input())
x1 = int(input())
y1 = int(input())

if (x - x1) == (y - y1) or (x - x1) + (y - y1) == 0:
print("YES")
else: print("NO")

Начало столетия

Напишите программу, которая определяет, оканчивается ли год с данным номером на два нуля. Если год оканчивается, то выведите «YES», иначе выведите «NO».

Формат входных данных
На вход программе подаётся натуральное число.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Шахматная доска

Заданы две клетки шахматной доски. Напишите программу, которая определяет имеют ли указанные клетки один цвет или нет. Если они покрашены в один цвет, то выведите слово «YES», а если в разные цвета — то «NO».

Формат входных данных
На вход программе подаётся четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Girls only

Футбольная команда набирает девочек от 10 до 15 лет включительно. Напишите программу, которая запрашивает возраст и пол претендента, используя обозначение пола буквы m (от male – мужчина) и f (от female – женщина) и определяет подходит ли претендент для вступления в команду или нет. Если претендент подходит, то выведите «YES», иначе выведите «NO».

Формат входных данных
На вход программе подаётся натуральное число – возраст претендента и буква обозначающая пол m (мужчина) или f (женщина).

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Римские цифры

Напишите программу, которая считывает целое число и выводит соответствующую ему римскую цифру. Если число находится вне диапазона 1-10, то программа должна вывести текст «ошибка».

В таблице приведены римские цифры для чисел от 1 до 10.

Формат входных данных
На вход программе подаётся целое число.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

ЧислоРимская цифра
1I
2II
3III
4IV
5V
6VI
7VII
8VIII
9IX
10X

YES or NO вот в чем вопрос

Напишите программу, которая принимает на вход число и в зависимости от условий выводит текст «YES», либо «NO».

Условия:

если число нечётное, то вывести «YES»;
если число чётное в диапазоне от 2 до 5 (включительно), то вывести «NO»;
если число чётное в диапазоне от 6 до 20 (включительно), то вывести «YES»;
если число чётное и больше 20, то вывести «NO».

Формат входных данных
На вход программе подаётся натуральное число.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Ход слона ?️

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

Формат входных данных
На вход программе подаётся четыре числа от 1 до 8.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Примечание. Шахматный слон ходит по диагоналям.

Ход коня

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

Формат входных данных
На вход программе подаётся четыре числа от 1 до 8.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Примечание. Шахматный конь ходит буквой «Г».

Ход ферзя

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

Формат входных данных
На вход программе подаётся четыре числа от 1 до 8.

Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи.

Примечание. Шахматный ферзь ходит по диагонали, горизонтали или вертикали.


python mathematics

Продолжаю решать шахматные задачки на Python. В прошлой задаче нужно было проверять окрашены ли заданные клетки на шахматной доске в один цвет. Теперь будут задачи на ход шахматных фигур и самая простая из них это:

Ход ладьи

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

Задача очень простая, чтобы решить достаточно представить себе ладью на шахматном поле и проанализировать ее ход. Ладья ходит только либо по вертикале вверх или вниз, либо по горизонтали влево или вправо. Становится ясно, что одна из координат клетки всегда остается неизменной, т.е. если ладья ходит по вертикале неизменна координата Х если по горизонтали то Y. Отсюда напишем условие при котором будем сравнивать если координаты X первой и второй клетки одинаковы или координаты Y первой и второй клетки одинаковы значит выводим YES – ладья может попасть с первой клетки на вторую, иначе – NO, не может.

Ход короля

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

Задача посложнее. Проанализируем ход. Король может ходить вверх вниз, вправо влево и по диагонали но только на одну клетку. Т.е. если разность между координатами X и Y будет составлять 1 или -1 (в случае если переходит с меньшей координаты на большую) или разность одной из координат равна 0 то соответственно король может перейти с первой клетки на вторую.

Что не так с кодом? Все это можно было записать гораздо лаконичнее.

либо использовать функцию абсолютной величины (модуля) числа – abs()

Ход слона

Шахматный слон ходит по диагонали. Даны две различные клетки шахматной доски, определите, может ли слон попасть с первой клетки на вторую одним ходом.

Проанализируем ход. Двигая слона по шахматной клетки можно заметить, что слон всегда ходит по диагоналям квадрата, т.е. если по координате X он передвинется на 5 клеток то и по координате Y он передвинется на 5 клеток. Отсюда можем сделать вывод, что модуль разности координатов X1 и X2 и Y1 и Y2 всегда будет равен

Ход ферзя

Шахматный ферзь ходит по диагонали, горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ферзь попасть с первой клетки на вторую одним ходом.

Проанализируем ход ферзя. Эта фигура ходит как король, но уже на любое доступное количество клеток, ну или можем сказать, что ферзь ходит и как ладья и как слон, мы уже анализировали и писали код для этих фигур поэтому просто объединим два условия в одно:

Ход коня

Шахматный конь ходит буквой “Г” — на две клетки по вертикали в любом направлении и на одну клетку по горизонтали, или наоборот. Даны две различные клетки шахматной доски, определите, может ли конь попасть с первой клетки на вторую одним ходом.

Самая интересная фигура. Проанализировав ход коня буквой "Г" можно увидеть что если конь ходит вниз или вверх буквой то его координата по X меняется на 1 а координата по Y на 2, если влево и вправо то наоборот X на 2 а Y на 1. Исходя из этого можно написать код, что если разность координат X1 и X2 уменьшилась или увеличилась на 1 и при этом разность координат Y1 и Y2 уменьшалась или увеличилась на 2 или если разность координат X1 и X2 уменьшилась или увеличилась на 2 и при этом разность координат Y1 и Y2 уменьшалась или увеличилась на 1 то выводим YES иначе NO

Очень страшное решение на самом деле, но рабочее. Можно и нужно было применить модуль разницы координат и ввести дополнительные переменные.

Вот такие интересные были на мой взгляд задачи. Для меня они казались сложными по началу, но если хорошенько разобраться в условии и понять как должны происходить процессы в задаче то решение приходит само по себе. Главное быть внимательным и не спешить.

Условие
Шахматный слон ходит по диагонали. Даны две различные клетки шахматной доски, определите, может ли слон попасть с первой клетки на вторую одним ходом.

Отредактировано FishHook (Апрель 17, 2017 18:55:37)

dzen
Предлагаю поразмышлять иначе. Слон ходит по диагонали. По диагонали чего? Очевидно, что по диагонали квадрата. Вам надо проверить, являются ли координаты вершинами квадрата. Для этого достаточно сравнить равенство вертикальной и горизонтальной сторон. Длина стороны вычисляется как разность координат. Длину вертикальной стороны получим разностью вертикальных координат, горизонтальной - горизонтальных. Итого - одно математическое вычисление.


Благодарю за елегантное решение

Вот еще одна загадка:

Улитка ползет по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползет до вершины шеста?

Программа получает на вход натуральные числа h, a, b.

Программа должна вывести одно натуральное число. Гарантируется, что a>b.

Отредактировано dzen (Апрель 20, 2017 00:38:20)

От h отнимаешь a, потом считаешь скорость улитки в день a-b, потом считаешь за сколько дней улитка с такой скотостью проползет h-a(округляешь до большего) и добавляешь 1. Итоговая формула: math.ceil((h-a)/(a-b))+1 будет колличество дней за которое улитка доползет до вершины.

Отредактировано PEHDOM (Апрель 20, 2017 01:17:18)

Не, не так просто тут решается. :)

Для h=1 a=3 b=2 получается -1.

Я в курсе, что при a больше h в два и более раза, результат будет ноль или отрицательным, это решаеться банальной проверкой: если а больше b тогда 1 - иначе считаем по формуле.
Поскольку эта задача учебная, то она не предполагает что а будет болше h, иначе накой ляд тогда даеться b? Разв что перподаватель захочет завалить ученика и начнет придираться…
Это детская задача для детей гдето 6-8 лет. звучит примерно так h=10, a=3, b=2. Нужно решить в уме.
Первое что приходит в голову это тупо посчитать скорость улитки в день(a-b) выходит 1 метр в день, следовательно 10 метров улитка проползет за 10 дней. Что собсвенно неверно. Потому как на восьмой день улитка стартует с отметки в 7м, проползает три метра и достигает вершины. Вниз ей сползать уже ненужно.
Нет конечно можно захерачить модель, и в цикле перемещать “улитку” вверх “днем”, а потом вниз “ночью”, считая к-во дней, и постоянно сверяя пройденое расстояние с высотой, но все банально считается по формуле.

Отредактировано PEHDOM (Апрель 20, 2017 09:48:51)

Нет никаких детских задач. Есть улитка, она ползает в космическом корабле, у неё на спине ядерный заряд. Ты говоришь “а пускай она -1 вернёт”. Была же реальная ошибка в F-16, который неправильно летал из-за переполнения переменной.

Это модель улитки. А сама улитка вообще нафиг не нужна. Если бы эта улитка была реальной, можно было бы просто взять эту палку, по которой она ползает, и выбросить в окно с третьего этажа.

В задании ясно сказано, что на h есть только одно ограничение: значение h - натуральное число. А натуральное число - это целое число от 1 до +inf.

(Мы эту задачу тут решали уже года два назад. Я её сейчас распаковал и там у меня тесты все составлены ещё с тех времён. Я прогнал их и они показали, что твой вариант падает на такой комбинации. Тогда пацан тоже запарился решать её правильно и так и не решил. А я её не решил тогда, потому что лень было.)

Читайте также: