В первом параграфе мы научились писать программы, в которых выполнялись все строки. Однако очень часто нам нужно, чтобы код выполнялся при определённых условиях. В таком случае используется условный оператор.
Рассмотрим его синтаксис на примере. Пусть от пользователя требуется ввести два целых числа: температуру на улице вчера и сегодня. А программа ответит — сегодня теплее, холоднее или же температура не изменилась:
yesterday_temp = int(input())
today_temp = int(input())
if today_temp > yesterday_temp:
print("Сегодня теплее, чем вчера.")
elif today_temp < yesterday_temp:
print("Сегодня холоднее, чем вчера.")
else:
print("Сегодня такая же температура, как вчера.")
Оператор if
является началом условной конструкции. Далее идёт условие, которое возвращает логическое значение True
(истина) или False
(ложь). Завершается условие символом «двоеточие». Затем — обязательный отступ в четыре пробела, он показывает, что строки объединяются в один блок. Отступ аналогичен использованию фигурных скобок или ключевых слов begin
и end
в других языках программирования.
Тело условной конструкции может содержать одно или несколько выражений (строк). По завершении тела может идти следующее условие, которое начинается с оператора elif
(сокращение от else if — «иначе если»). Оно проверяется только в случае, если предыдущее условие не было истинным.
Синтаксис в elif
аналогичен if
. Операторов elif
для одного блока условного оператора может быть несколько, а может не быть совсем. Последним идёт оператор else
, который не содержит условия, а выполняется, только если ни одно из предыдущих условий в if
и elif
не выполнилось. Оператор else
не является обязательным.
В качестве условия может выступать результат операции сравнения:
>
(больше);>=
(больше или равно);<
(меньше);<=
(меньше или равно);==
(равно);!=
(не равно).
Для записи сложных условий можно применять логические операции:
and
— логическое «И» для двух условий. ВозвращаетTrue
, если оба условия истинны, иначе возвращаетFalse
;or
— логическое «ИЛИ» для двух условий. ВозвращаетFalse
, если оба условия ложны, иначе возвращаетTrue
;not
— логическое «НЕ» для одного условия. ВозвращаетFalse
для истинного условия, и наоборот.
Ниже приведена таблица истинности для логических операций.
x |
y |
not x |
x or y |
x and y |
False |
False |
True |
False |
False |
False |
True |
True |
True |
False |
True |
False |
False |
True |
False |
True |
True |
False |
True |
True |
Рассмотрим следующий пример. Пользователь должен ввести первую и последнюю буквы русского алфавита. Ввод производится в двух отдельных строках и в любом регистре.
print("Введите первую и последнюю буквы русского алфавита.")
first_letter = input()
last_letter = input()
if (first_letter == "а" or first_letter == "А") and (
last_letter == "я" or last_letter == "Я"):
print("Верно.")
else:
print("Неверно.")
В логическом операторе можно использовать двойное неравенство. Например, неравенство
if x >= 0 and x < 100:
...
лучше записать так:
if 0 <= x < 100:
...
Строки также можно сравнивать между собой с помощью операций >
, <
и т. д. В отличие от чисел, строки сравниваются посимвольно в соответствии с кодами символов в таблице кодировки (в Python рекомендуется использовать кодировку UTF-8
).
Компьютер изначально работает только с двоичными числами. Поэтому для работы с символами им назначаются коды — числа, а сами таблицы соответствия символов и кодов называются таблицами кодировки. Кодировок существует достаточно много, одной из самых популярных на данный момент является UTF-8
. Например, сравним две односимвольные строки:
letter_1 = "t"
letter_2 = "w"
print(letter_1 > letter_2)
Программа выведет False
, поскольку символ t
стоит в таблице кодировки раньше, чем w
(как и по алфавиту, то есть лексикографически). Чтобы убедиться в этом, можно использовать встроенную функцию ord()
, которая возвращает код символа из таблицы кодировки:
print(ord("t"), ord("w"))
В консоли отобразится:
116 119
Поскольку 116 меньше 119, в предыдущем примере мы и получили False
.
Чтобы получить символ по его коду, необходимо вызвать встроенную функцию chr()
с соответствующим кодом:
print(chr(116), chr(119))
В результате увидим:
t w
В таблице кодировки большие и маленькие буквы являются различными символами с разными кодами (из разных диапазонов). Поэтому для корректного сравнения строки должны быть в одном регистре.
Для проверки условия наличия подстроки в строке (и для некоторых других вещей, о которых будет рассказано позже) используется оператор in
. Например, проверим, что во введённой строке встречается корень «добр» (для слов «добрый», «доброе» и подобных):
text = input()
if "добр" in text:
print("Встретилось 'доброе' слово.")
else:
print("Добрых слов не найдено.")
В Python версии 3.10 появился оператор match
. В простейшем случае он последовательно сравнивает значение выражения с заранее заданными в операторах case
. А затем выполняет код в операторе case
, значение в котором соответствует проверяемому. Напишем программу, которая сравнивает значение текущего сигнала светофора с одним из трёх вариантов (красный, жёлтый или зелёный):
color = input()
match color:
case 'красный' | 'жёлтый':
print('Стоп.')
case 'зелёный':
print('Можно ехать.')
case _:
print('Некорректное значение.')
Обратите внимание, что для проверки выполнения условия «ИЛИ» в операторе case
не используется логическая операция or
. Её нельзя использовать, поскольку она применяется для переменных логического типа, а в примере перечисляются значения-строки. Вместо неё мы используем специальный оператор |
.
Последний оператор case
выполняется всегда и сработает в случае, если ни одно из предыдущих условий не сработало. Оператор match
похож на оператор switch
других языков программирования — C++, JavaScript и т. д.
Рассмотрим некоторые полезные встроенные функции.
- Для определения длины строки (а также других коллекций, о которых будет рассказано позже) используется функция
len()
. - Для определения максимального и минимального из нескольких значений (не только числовых) используются функции
max()
иmin()
соответственно. - Функция
abs()
используется для определения модуля числа.
Рассмотрим применение встроенных функций в следующем примере. Обратите внимание на строки, начинающиеся со знака #
. Так в Python обозначаются комментарии — линии, которые не выполняются интерпретатором, а служат для пояснения кода.
m = 12
n = 19
k = 25
# максимальное число
print(max(m, n, k))
line_1 = "m"
line_2 = "n"
line_3 = "k"
# минимальная лексикографически строка
print(min(line_1, line_2, line_3))
# количество цифр в числе 2 в степени 2022
print(len(str(2 ** 2022)))
В следующей теме вы узнаете о циклах — конструкциях, которые позволяют выполнять один и тот же код несколько раз. Для этого параграфа мы также подготовили задачи. Не пропускайте их, если хотите закрепить материал.
Ещё по теме
- Оператор
match
также используется для так называемой проверки шаблона (pattern matching), почитать о которой можно в этом материале. - Все доступные в Python встроенные функции можно посмотреть на этой странице.