Условный оператор
Логическим (булевым) называется выражение, которое может быть истинным или ложным. В следующих примерах используется оператор ==
, который сравнивает два операнда и возвращает True
, если они равны, и False
— если нет:
>>> 5 == 5
True
>>> 5 == 6
False
True
и False
— это специальные значения, принадлежащие типу bool
.
Операторы сравнения
Оператор в математике | Оператор в Python | Пояснение | Пример |
---|---|---|---|
> | > | Больше |
5 > 3 - True 5 > 5 - False |
< | < | Меньше |
-1 < 1 - True 8 < 6 - False |
= | == | Равно |
2 == 2 - True -3 == 3 - False |
≠ | != | Не равно |
4 != 7 - True 1 != 1 - False |
≥ | >= | Больше или равно |
9 >= 9 - True 0 >= 1 - False |
≤ | <= | Меньше или равно |
-8 <= -7 - True 5 <= -5 - False |
Строки сравниваются посимвольно по лексикографическому порядку. Если символы совпадают, больше та строка, у которой длина больше. Строки равны только в том случае, если на одних и тех же позициях находится одинаковые символы и длина строк совпадает.
>>> 'hello' > 'temperature'
False
>>> 'ZFDHDF' < 'a'
True
>>> 'abc' > 'ab'
True
>>> 'xyz' == 'xyz'
True
Условное выполнение
Для написания полезных программ почти всегда нужна возможность проверять условия и соответственно изменять поведение программы. Условные инструкции дают нам эту возможность. Самая простая форма — это инструкция if
:
if x > 0:
print(f"x - положительное число")
Количество инструкций, которые могут быть указаны в теле, не ограничено, но должна быть хотя бы одна.
Пример 1
Увеличьте число \(x\) на \(2\), если оно неположительное.
x = int(input())
if x <= 0:
x += 2
print(f"{x}")
0
2
>>>
5
5
Пример 2
Найдите предыдущее число, если число \(x\) нечётное.
x = int(input())
if x % 2 == 1:
x -= 1
print(f"{x}")
7
6
>>>
4
4
Пример 3
Выведите «Seven», если цифра \(7\) является последней цифрой положительного числа \(x\).
x = int(input())
if x % 10 == 7:
print(f'Seven')
2027
Seven
Альтернативное выполнение
Вторая форма инструкции if
— "альтернативное выполнение", в котором есть две возможности, и условие определяет, какая из них выполняется. Синтаксис выглядит так:
if x % 2 == 0:
print(f"x - чётное число")
else:
print(f"x - нечётное число")
Если остаток от деления \(x\) на \(2\) равен \(0\), то мы знаем, что \(x\) — четное число, и программа отображает соответствующее сообщение. Если условие ложно, выполняется второй набор инструкций. Поскольку условие может быть либо истинным, либо ложным, будет выполнена ровно одна из альтернатив. Альтернативы называются ветвями, потому что это и есть ветви в потоке выполнения.
Пример 1
Выведите YES
в том случае, если \(a+b=c\) и выведите NO
в противном случае.
a, b, c = map(int, input().split())
if a + b == c:
print(f"YES")
else:
print(f"NO")
1 2 3
YES
>>>
2 5 8
NO
Пример 2
В первой строке выведите Yes
, если число \(x\) делится нацело на 4, иначе выведите No
. Во второй строке выведите Yes
, если число \(x\) делится нацело на 7, иначе выведите No
.
x = int(input())
if x % 4 == 0:
print(f"Yes")
else:
print(f"No")
if x % 7 == 0:
print(f"Yes")
else:
print(f"No")
16
Yes
No
>>>
28
Yes
Yes
Вложенные условия
Одно условие также может быть вложено в другое. Например:
if x == y:
print(f"x и y равны")
else:
if x < y:
print(f"x меньше, чем y")
else:
print(f"x больше, чем y")
Внешняя условная инструкция содержит две ветви. Первая ветвь содержит обычную инструкцию. Вторая ветвь содержит еще одну инструкцию if
, у которой две собственные ветви. Эти две ветви — простые инструкции. Разумеется, они могли бы быть так же и условными операторами.
if 0 < x:
if x < 10:
print(f"x - положительное однозначное число")
Несмотря на то что отступы инструкций позволяют разглядеть структуру, вложенные условные инструкции очень трудно прочитать с ходу. Поэтому рекомендуется их избегать.
Связанные условия
Иногда существует более двух возможностей и требуется более двух ветвей. Один из способов выразить подобное вычисление — использовать связанные условия:
if x < y:
print(f"x меньше, чем y")
elif x > y:
print(f"x больше, чем y")
else:
print(f"x и y равны")
elif
— это аббревиатура для "else if
". Выполняться будет только одна ветвь. Ограничений на количество инструкций elif
нет. Инструкция else
должна быть указана в конце.
if month == 1:
print(f"January")
elif month == 2:
print(f"February")
elif month == 3:
print(f"March")
Каждое условие проверяется по порядку. Если первое ложно, проверяется следующее, и так далее. Если одно из них истинно, выполняется соответствующая ветвь, и инструкция заканчивает свою работу. Даже если истинно более чем одно условие, выполняется только первая истинная ветвь.
Пример 1
Даны \(2\) отрицательных и \(1\) положительное число. Найдите положительное число.
a, b, c = map(int, input().split())
if a > 0:
print(f"{a}")
elif b > 0:
print(f"{b}")
else:
print(f"{c}")
4 -8 -5
4
>>>
-1 2 -3
2
>>>
-7 -7 7
7
Пример 2
Известны результаты каждого из двух таймов футбольного матча. Выведите номер выигравшей команды, в случае ничьей следует вывести «DRAW».
a1, b1 = map(int, input().split())
a2, b2 = map(int, input().split())
a = a1 + a2
b = b1 + b2
if a > b:
print(f"1")
elif a < b:
print(f"2")
else:
print(f"DRAW")
1 1
2 1
1
>>>
1 3
1 0
2
>>>
0 0
1 1
DRAW
Логические операторы
Существует три логических оператора: and
, or
и not
. Значение этих операторов аналогично значению этих слов в английском языке.
Например, n > 0 and x < 10
истинно, только если \(x\) больше \(0\) и меньше \(10\).
n % 2 == 0 or n % 3 == 0
истинно, если выполняется одно или оба условия, то есть если число делится на \(2\) или на \(3\) без остатка.
Наконец, оператор not
отрицает логическое выражение, поэтому not (x > y)
истинно, если \(x > y\) ложно, то есть если \(x\) меньше или равно \(y\).
Оператор | Назначение | Приоритет | Выражение | Результат |
---|---|---|---|---|
not |
Логическое НЕ | 1 |
not True not False |
False True |
and |
Логическое И | 2 |
False and False False and True True and False True and True |
False False False True |
or |
Логическое ИЛИ | 3 |
False or False False or True True or False True or True |
False True True True |
Примеры приоритета логических операторов:
>>> not True and False
False
>>> not (True and False)
True
>>> True or False and False
True
>>> (True or False) and False
False
Логические операторы часто предоставляют способ упростить набор вложенных условных инструкций. Например, мы можем написать код, используя всего одно условие и логический оператор \(\mathrm{and}\):
if 0 < x and x < 10:
print(f"x - положительное однозначное число")
Для такого рода условий Python
предоставляет более краткий вариант записи:
if 0 < x < 10:
print(f"x - положительное однозначное число")
Пример 1
Определите, является ли одно число произведением двух других чисел.
a, b, c = map(int, input().split())
if a * b == c or b * c == a or c * a == b:
print(f"Yes")
else:
print(f"No")
2 6 3
Yes
>>>
3 4 11
No
Пример 2
Определите название времени суток по часам.
h = int(input())
if 5 <= h < 12: # h >= 5 and h < 12
print(f"Утро")
elif 12 <= h < 17: # h >= 12 and h < 17
print(f"День")
elif 17 <= h < 22: # h >= 17 and h < 22
print(f"Вечер")
else: # h >= 22 and h <= 24 or h >= 0 and h < 5
print(f"Ночь")
7
Утро
>>>
12
День
>>>
20
Вечер
>>>
2
Ночь
Пример 3
Определите, является ли число \(n\) трёхзначным.
n = int(input())
if -999 <= n <= -100 or 100 <= n <= 999:
print(f"YES")
else:
print(f"NO")
-123
YES
>>>
78
NO
Пример 4
Найдите наибольшее число среди четырёх чисел.
a, b, c, d = map(int, input().split())
if a >= b and a >= c and a >= d:
print(f"{a}")
elif b >= a and b >= c and b >= d:
print(f"{b}")
elif c >= a and c >= b and c >= d:
print(f"{c}")
else:
print(f"{d}")
6 5 -7 1
6
>>>
1 2 3 3
3
Пример 5
Найдите наименьшее число среди трёх чисел и удвойте его.
a, b, c = map(int, input().split())
if a <= b and a <= c:
d = a
elif b <= a and b <= c:
d = b
else:
d = c
d *= 2
print(f"{d}")
4 1 3
2