2.2. Условный оператор
В этой статье мы научимся управлять поведением программы: выполнять одни действия в одних ситуациях и другие — в других. Вы узнаете, как Python принимает решения с помощью условных конструкций, как работают логические выражения, и как применять их на практике. Мы также разберём новые конструкции вроде match-case и полезные встроенные функции.
Ключевые вопросы статьи
- Что такое условный оператор в Python и как он работает?
- Как записывать простые и сложные условия с помощью if, elif, else?
- Какие логические операции используются для объединения условий?
- Чем отличается сравнение строк от сравнения чисел?
- Что такое match-case и как он помогает обрабатывать значения?
- Какие встроенные функции могут быть полезны при проверке условий?
Условный оператор в Python
Иногда программа должна выполнять разные действия в зависимости от ситуации. Например, если пользователь ввёл положительное число — показать одно сообщение, если отрицательное — другое. Для таких случаев в Python используется условный оператор.
Допустим, пользователь вводит температуру на улице за два дня — вчера и сегодня. Программа должна определить, стало теплее, холоднее или температура не изменилась:
yesterday_temp = int(input())
today_temp = int(input())
if today_temp > yesterday_temp:
print("Сегодня теплее, чем вчера.")
elif today_temp < yesterday_temp:
print("Сегодня холоднее, чем вчера.")
else:
print("Сегодня такая же температура, как вчера.")
Как это работает:
if— ключевое слово, с которого начинается условная конструкция.- После него указывается условие, которое должно быть истинным
(True), чтобы код внутри блока выполнился. - Блок кода, который должен выполняться при соблюдении условия, обязательно записывается с отступом.
elif(сокращение отelse if) проверяет другое условие, если первое не выполнилось.elseсрабатывает, если ни одно из условий не оказалось истинным.
Структура конструкций с if, elif, else
Чтобы программа могла принимать решения, в Python используется конструкция if. Она проверяет условие и выполняет код, если оно истинно. При необходимости можно добавить дополнительные варианты с помощью elif и else.
Условие записывается после оператора if и всегда должно возвращать логическое значение — True (истина) или False (ложь).
if условие: # код, который выполнится, если условие истинно
elif другое_условие: # код, если первое условие не сработало, но это — истинно
else: # код, если ни одно из условий не сработало
Важные правила:
if— начинается с условия, которое должно возвращатьTrueилиFalse.- После условия обязательно ставится двоеточие.
- Код, связанный с этим условием, пишется с отступом в четыре пробела— это и есть тело условия.
elif(сокращение отelse if) проверяет альтернативное условие, еслиifне сработал. Можно использовать несколькоelifподряд.elseне содержит условия и выполняется, если ни одно из предыдущих условий не оказалось истинным. Он не обязателен.
Пример:
if x > 0:
print("Число положительное.")
elif x < 0:
print("Число отрицательное.")
else:
print("Это ноль.")
Примечание
Условная конструкция может состоять только из if, либо включать любое количество elif, и, при необходимости, завершаться else. Использование elif и else — не обязательно, но они помогают обрабатывать разные варианты поведения.
Что может быть условием
Условием может быть результат операции сравнения. Python поддерживает привычные математические операторы:
>(больше);>=(больше или равно);<(меньше);<=(меньше или равно);==(равно);!=(не равно).
Операции для объединения условий
Иногда одного условия недостаточно. Например, нужно проверить сразу два условия — и чтобы оба были истинными. В таких случаях используются логические операторы.
Основные логические операторы в Python:
| Оператор | Назначение | Пример |
|---|---|---|
and |
Логическое И: возвращает True, если оба условия истинны | x > 0 and x < 10 |
or |
Логическое ИЛИ: возвращает True, если хотя бы одно условие истинно | x < 0 or x > 100 |
not |
Логическое НЕ: возвращает противоположное значение | not x == 0 (то же, что x != 0) |
Таблица истинности
Вот как работают логические операторы с булевыми значениями:
| 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("Неверно.")
Сокращённая запись условий
В Python можно использовать двойное неравенство, чтобы записывать сложные условия компактно. Запись
if x >= 0 and x < 100:
...
можно заменить на:
if 0 <= x < 100:
...
В Python можно сравнивать не только числа, но и строки. Однако строки сравниваются не по значению как число, а посимвольно, по коду каждого символа.
Сравнение строк
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
В таблице кодировки БОЛЬШИЕ и маленькие буквы — это различные символы с разными кодами (из разных диапазонов). Поэтому для корректного сравнения строки должны быть в одном регистре.
print("a" > "A") # True, потому что код “a” больше
Если вы хотите сравнивать строки без учёта регистра, сначала приведите их к одному регистру:
text_1 = "Привет"
text_2 = "привет"
print(text_1.lower() == text_2.lower()) # True
Проверка вхождения с in
Чтобы проверить, содержит ли строка нужное слово или часть слова, используется оператор in:
text = input()
if "добр" in text:
print("Встретилось 'доброе' слово.")
else:
print("Добрых слов не найдено.")
Оператор in можно использовать и с числами, списками, кортежами — но об этом позже.
Match-case
С версии Python 3.10 появился оператор match — это современный способ сравнивать значения с заранее заданными шаблонами. Он напоминает конструкцию switch из других языков программирования (например, C++ или JavaScript).
Пример: светофор
color = input()
match color:
case 'красный' | 'жёлтый':
print('Стоп.')
case 'зелёный':
print('Можно ехать.')
case _:
print('Некорректное значение.')
Обратите внимание, что для проверки выполнения условия ИЛИ в операторе case не используется логическая операция or. Её нельзя использовать, поскольку она применяется для переменных логического типа, а в примере перечисляются значения-строки. Вместо неё мы используем специальный оператор |.
Последний оператор case выполняется всегда и сработает в случае, если ни одно из предыдущих условий не сработало.
Проверка условий при помощи встроенных функций
Иногда при проверке условий нам нужно получить дополнительную информацию — например, длину строки или наибольшее из значений. В таких случаях полезны встроенные функции Python.
Рассмотрим применение встроенных функций в следующем примере. Обратите внимание на строки, начинающиеся со знака #. Так в 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 встроенные функции можно посмотреть на этой странице.
Что дальше
Теперь, когда вы научились использовать условные операторы, логические выражения и встроенные функции для принятия решений, пора перейти к следующей возможности языка — повторению действий.
В следующей статье вы узнаете:
- что такое циклы и зачем они нужны;
- как работает цикл
whileи как задать условие повтора; - как использовать цикл
forдля перебора значений; - как управлять выполнением цикла с помощью
break,continueиelse.
После этого вы сможете создавать программы, которые выполняют повторяющиеся действия — от простых счётчиков до анализа списков.
Ключевые выводы статьи
- Условные операторы
if,elif,elseпозволяют выполнять разные действия в зависимости от условий.- Логические операции
and,or,notпомогают объединять несколько условий.- Строки сравниваются по кодировке символов; для правильного сравнения регистр нужно приводить к одному виду.
- Оператор
inпроверяет вхождение элементов в строки и коллекции.- Конструкция match-case и встроенные функции, такие как
len(),max(),min(),abs(), расширяют возможности проверки условий.