Условная инструкция

Синтаксис условной инструкции в языке Python.

Условная инструкция

Синтаксис условной инструкции

Все ранее рассматриваемые программы имели линейную структуру: все инструкции выполнялись последовательно одна за одной, каждая записанная инструкция обязательно выполняется.

Допустим мы хотим по данному числу x определить его абсолютную величину (модуль). Программа должна напечатать значение переменной x, если x>0 или же величину -x в противном случае. Линейная структура программы нарушается: в зависимости от справедливости условия x>0 должна быть выведена одна или другая величина. Соответствующий фрагмент программы на Питоне имеет вид:

x = int(input())
if x > 0:
     print(x)
else:
     print(-x)

В этой программе используется условная инструкция if (если). После слова if указывается проверяемое условие (x > 0), завершающееся двоеточием. После этого идет блок (последовательность) инструкций, который будет выполнен, если условие истинно, в нашем примере это вывод на экран величины x. Затем идет слово else (иначе), также завершающееся двоеточием, и блок инструкций, который будет выполнен, если проверяемое условие неверно, в данном случае будет выведено значение -x.

Итак, условная инструкция в Питоне имеет следующий синтаксис:

if Условие:
     Блок инструкций 1
else:
     Блок инструкций 2

Блок инструкций 1 будет выполнен, если Условие истинно. Если Условие ложно, будет выполнен Блок инструкций 2.

В условной инструкции может отсутствовать слово else и последующий блок. Такая инструкция называется неполным ветвлением. Например, если дано число x и мы хотим заменить его на абсолютную величину x, то это можно сделать следующим образом:

if x < 0:
     x = -x
print(x)

В этом примере переменной x будет присвоено значение -x, но только в том случае, когда x < 0. А вот инструкция print(x) будет выполнена всегда, независимо от проверяемого условия.

Для выделения блока инструкций, относящихся к инструкции if или else в языке Питон используются отступы. Все инструкции, которые относятся к одному блоку, должны иметь равную величину отступа, то есть одинаковое число пробелов в начале строки. Рекомендуется использовать отступ в 4 пробела и не рекомедуется использовать в качестве отступа символ табуляции.

Это одно из существенных отличий синтаксиса Питона от синтаксиса большинства языков, в которых блоки выделяются специальными словами, например, нц... кц в Кумире, begin... end в Паскале или фигурными скобками в Си.

Вложенные условные инструкции

Внутри условных инструкций можно использовать любые инструкции языка Питон, в том числе и условную инструкцию. Получаем вложенное ветвление – после одной развилки в ходе исполнения программы появляется другая развилка. При этом вложенные блоки имеют больший размер отступа (например, 8 пробелов). Покажем это на примере программы, которая по данным ненулевым числам x и y определяет, в какой из четвертей координатной плоскости находится точка (x, y):

x = int(input())
y = int(input())
if x > 0:
     if y > 0:        # x > 0, y > 0
         print("Первая четверть")
     else:        # x > 0, y < 0
         print("Четвертая четверть")
else:
     if y > 0:        # x < 0, y > 0
         print("Вторая четверть")
     else:        # x < 0, y < 0
         print("Третья четверть")

В этом примере мы использовали комментарии – текст, который интерпретатор игнорирует. Комментариями в Питоне является символ # и весь текст после этого символа до конца строки.

Операторы сравнения

Как правило, в качестве проверяемого условия используется результат вычисления одного из следующих операторов сравнения:

<Меньше — условие верно, если первый операнд меньше второго.
>Больше — условие верно, если первый операнд больше второго.
<=Меньше или равно
>=Больше или равно
==Равенство. Условие верно, если два операнда равны
!=Неравенство. Условие верно, если два операнда неравны

Например, условие (x * x < 1000) означает «значение x * x меньше 1000», а условие (2 * x != y) означает «удвоенное значение переменной x не равно значению переменной y».

Операторы сравнения в Питоне можно объединять в цепочки (в отличии от большинства других языков программирования, где для этого нужно использовать логические связки), например, a == b == c или 1 <= x <= 10.

Тип данных bool

Операторы сравнения возвращают значения специального логического типа bool. Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь). Если преобразовать логическое True к типу int, то получится 1, а преобразование False даст 0. При обратном преобразовании число 0 преобразуется в False, а любое ненулевое число в True. При преобразовании str в bool пустая строка преобразовывается в False, а любая непустая строка в True.

Логические операторы

Иногда нужно проверить одновременно не одно, а несколько условий. Например, проверить, является ли данное число четным можно при помощи условия (n % 2 == 0) (остаток от деления n на 2 равен 0), а если необходимо проверить, что два данных целых числа n и m являются четными, необходимо проверить справедливость обоих условий: n % 2 == 0 и m % 2 == 0, для чего их необходимо объединить при помощи оператора and (логическое И): n % 2 == 0 and m % 2 == 0.

В Питоне существуют стандартные логические операторы:

  • логическое И,
  • логическое ИЛИ,
  • логическое отрицание.

Логическое И является бинарным оператором (то есть оператором с двумя операндами: левым и правым) и имеет вид and. Оператор and возвращает True тогда и только тогда, когда оба его операнда имеют значение True.

Логическое ИЛИ является бинарным оператором и возвращает True тогда и только тогда, когда хотя бы один операнд равен True. Оператор «логическое ИЛИ» имеет вид or.

Логическое НЕ (отрицание) является унарным (то есть с одним операндом) оператором и имеет вид not, за которым следует единственный операнд. Логическое НЕ возвращает True, если операнд равен False и наоборот.

Пример. Проверим, что хотя бы одно из чисел a или b оканчивается на 0:

if a % 10 == 0 or b % 10 == 0:

Проверим, что число a — положительное, а b — неотрицательное:

if a > 0 and not (b < 0):

Или можно вместо not (b < 0) записать (b >= 0).

Каскадные условные инструкции

Пример программы, определяющий четверть координатной плоскости, можно переписать используя «каскадную» последовательность операцией if... elif... else:

x = int(input())
y = int(input())
if x > 0 and y > 0:
     print("Первая четверть")
elif x > 0 and y < 0:
     print("Четвертая четверть")
elif y > 0:
     print("Вторая четверть")
else:
     print("Третья четверть")

В такой конструкции условия if, ..., elif проверяются по очереди, выполняется блок, соответствующий первому из истинных условий. Если все проверяемые условия ложны, то выполняется блок else, если он присутствует.

Задача №3501. Максимум двух чисел

Даны два целых числа. Выведите значение наибольшего из них.

Входные данные
Вводятся два числа.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
5
3
5

Ввод Вывод
3
3
3

Решение
a = int(input())
b = int(input())
if a > b:
     print(a)
else:
     print(b)

Задача №3502. Какое число больше?

Даны два целых числа. Программа должна вывести число 1, если первое число больше второго, число 2, если второе больше первого или число 0, если они равны.

Входные данные
Вводятся два целых числа.

Выходные данные
Выведите ответ на задачу.

Примечание
Эту задачу желательно решить с использованием каскадных инструкций if... elif... else.

Примеры

Ввод Вывод
1
2
2

Решение
a = int(input())
b = int(input())
if a > b:
     print(1)
elif a < b:
     print(2)
else:
     print(0)

Задача №3503. Знак числа

В математике функция sign(x) (знак числа) определена так:
sign(x) = 1, если x > 0,
sign(x) = -1, если x < 0,
sign(x) = 0, если x = 0.

Для данного числа x выведите значение sign(x).

Входные данные
Вводится одно целое число.

Выходные данные
Выведите ответ на задачу.

Примечание
Эту задачу желательно решить с использованием каскадных инструкций if... elif... else.

Примеры

Ввод Вывод
3 1

Решение
x = int(input())
if x > 0:
     print(1)
elif x < 0:
     print(-1)
else:
     print(0)

Задача №3504. Високосный год

Дано натуральное число. Требуется определить, является ли год с данным номером високосным. Если год является високосным, то выведите YES, иначе выведите NO. Напомним, что в соответствии с григорианским календарем, год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400.

Входные данные
Вводится одно целое число.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
100 NO

Решение
leap = int(input())
if (leap % 100 == 0) and (leap % 400) != 0:
     print("NO")
elif (leap % 4) == 0 or (leap % 400) == 0:
     print("YES")
else:
     print("NO")

Задача №3505. Максимум трех чисел

Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число).

Используйте ровно два оператора сравнения (>, <, >=, <=) для решения этой задачи. Использовать функции max и min нельзя.

Входные данные
Вводится три целых числа.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
1
2
3
3

Решение
a = int(input())
b = int(input())
c = int(input())
x = a
if x < b:
     x = b
if x < c:
     x = c
print(x)

Задача №3506. Существует ли треугольник?

Даны три натуральных числа a, b, c. Определите, существует ли треугольник с такими сторонами. Если треугольник существует, выведите строку YES, иначе выведите строку NO.

Треугольник — это три точки, не лежащие на одной прямой.

Входные данные
Вводятся три натуральных числа.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
3
4
5
YES

Решение
a = int(input())
b = int(input())
c = int(input())
if a + b > c and a + c > b and b + c > a:
     print("YES")
else:
     print("NO")

Задача №3507. Сколько совпадает чисел

Даны три целых числа. Определите, сколько среди них совпадающих. Программа должна вывести одно из чисел: 3 (если все совпадают), 2 (если два совпадает) или 0 (если все числа различны).

Входные данные
Вводятся три целых числа.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
1
2
3
0

Решение
# 3 (если все совпадают)
# 0 (если все числа различны)
# 2 (если два совпадает)

a = int(input())
b = int(input())
c = int(input())
if a == b and a == c and b == c:
     print(3)
elif a != b and a != c and b != c:
     print(0)
else:
     print(2)

Задача №3508. Тестирующая система

Денис Павлович задал школьникам задачу: “Если данное четырехзначное число является симметричным, выведите 1, иначе выведите любое другое целое число”. Для проверки Денис Павлович использует заранее подготовленный набор тестов и правильных ответов к ним.

Ире кажется, что она решила эту задачу, но тестирующая система Ejudge почему-то не принимает ее решение. Ира думает, что это происходит оттого, что она выводит не то любое другое число, которое записано в ответах у Дениса Павловича.

Напишите программу, которая по ответу Дениса Павловича и по ответу Иры определяет, верно ли Ира решила задачу.

Входные данные
Программа получает на вход два числа: ответ Дениса Павловича и ответ Иры.

Выходные данные
Программа должна вывести YES, если Ира дала верный ответ и NO в противном случае.

Примеры

Ввод Вывод
11
-1
YES

Ввод Вывод
3
1
NO

Решение
x = int(input())
y = int(input())
if (x != 1 and y != 1) or (x == 1 and y == 1):
     print("YES")
else:
     print("NO")

Задача №3509. Ход ладьи

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

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

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

Примеры

Ввод Вывод
4
4
5
5
NO

Ввод Вывод
4
4
5
4
YES

Решение
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if x1 == x2 or y1 == y2:
     print("YES")
else:
     print("NO")

Задача №3510. Ход короля

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

В этой задаче удобно использовать функцию abs(x), которая соответствует операции |x|.

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

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

Примеры

Ввод Вывод
4
4
5
5
YES

Решение
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) <= 1 and abs(y1 - y2) <= 1:
     print("YES")
else:
     print("NO")

Задача №3511. Ход слона

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

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

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

Примеры

Ввод Вывод
4
4
5
5
YES

Ввод Вывод
4
4
5
4
NO

Решение
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2):
     print("YES")
else:
     print("NO")

Задача №3512. Ход ферзя

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

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

Выходные данные
Программа должна вывести YES, если из первой клетки ходом ферзя можно попасть во вторую или NO в противном случае.

Примеры

Ввод Вывод
1
1
2
2
YES

Ввод Вывод
1
1
2
3
NO

Решение
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if abs(x1 - x2) == abs(y1 - y2) or (x1 == x2) or (y1 == y2):
     print("YES")
else:
     print("NO")

Задача №3513. Ход коня

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

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

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

Примеры

Ввод Вывод
1
1
1
4
NO

Ввод Вывод
2
4
3
2
YES

Решение
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if (abs(x1 - x2) == 2 and abs(y1 - y2) == 1) or (abs(x1 - x2) == 1 and abs(y1 - y2) == 2):
     print("YES")
else:
     print("NO")

Задача №3514. Шахматная доска

Заданы две клетки шахматной доски. Если они покрашены в один цвет, то выведите слово YES, а если в разные цвета – то NO.

Входные данные
Вводятся 4 числа - координаты клеток.

Выходные данные
Выведите ответ на задачу.

Примеры

Ввод Вывод
1
1
2
2
YES

Ввод Вывод
1
1
2
3
NO

Решение
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if (x1 + y1 + x2 + y2) % 2 == 0:
     print("YES")
else:
     print("NO")

Задача №3515. Шоколадка

Шоколадка имеет вид прямоугольника, разделенного на n×m долек. Шоколадку можно один раз разломить по прямой на две части. Определите, можно ли таким образом отломить от шоколадки ровно k долек.

Входные данные
Программа получает на вход три числа: n, m, k

Выходные данные
Программа должна вывести одно из двух слов: YES или NO.

Примеры

Ввод Вывод
4
2
6
YES

Ввод Вывод
2
10
7
NO

Решение
n = int(input())
m = int(input())
k = int(input())
if n * m >= k and (k % n == 0 or k % m == 0):
     print("YES")
else:
     print("NO")