2.2. Условный оператор

В этом параграфе мы научимся управлять поведением программы: выполнять одни действия в одних ситуациях и другие — в других. Вы узнаете, как Python принимает решения с помощью условных конструкций, как работают логические выражения, и как применять их на практике. Мы также разберём новые конструкции вроде match-case и полезные встроенные функции.

Ключевые вопросы параграфа

  • Что такое условный оператор в Python и как он работает?
  • Как записывать простые и сложные условия с помощью if, elif, else?
  • Какие логические операции используются для объединения условий?
  • Чем отличается сравнение строк от сравнения чисел?
  • Что такое match-case и как он помогает обрабатывать значения?
  • Какие встроенные функции могут быть полезны при проверке условий?

Условный оператор в Python

Иногда программа должна выполнять разные действия в зависимости от ситуации. Например, если пользователь ввёл положительное число — показать одно сообщение, если отрицательное — другое. Для таких случаев в Python используется условный оператор.

Допустим, пользователь вводит температуру на улице за два дня — вчера и сегодня. Программа должна определить, стало теплее, холоднее или температура не изменилась:

1yesterday_temp = int(input())
2today_temp = int(input())
3if today_temp > yesterday_temp:
4    print("Сегодня теплее, чем вчера.")
5elif today_temp < yesterday_temp:
6    print("Сегодня холоднее, чем вчера.")
7else:
8    print("Сегодня такая же температура, как вчера.")

Как это работает:

  • if — ключевое слово, с которого начинается условная конструкция.
  • После него указывается условие, которое должно быть истинным (True), чтобы код внутри блока выполнился.
  • Блок кода, который должен выполняться при соблюдении условия, обязательно записывается с отступом.
  • elif (сокращение от else if) проверяет другое условие, если первое не выполнилось.
  • else срабатывает, если ни одно из условий не оказалось истинным.

Структура конструкций с if, elif, else

Чтобы программа могла принимать решения, в Python используется конструкция if. Она проверяет условие и выполняет код, если оно истинно. При необходимости можно добавить дополнительные варианты с помощью elif и else.

Условие записывается после оператора if и всегда должно возвращать логическое значение — True (истина) или False (ложь).

1if условие: # код, который выполнится, если условие истинно
2elif другое_условие: # код, если первое условие не сработало, но это — истинно
3else: # код, если ни одно из условий не сработало

Важные правила:

  • if — начинается с условия, которое должно возвращать True или False.
  • После условия обязательно ставится двоеточие.
  • Код, связанный с этим условием, пишется с отступом в четыре пробела— это и есть тело условия.
  • elif (сокращение от else if) проверяет альтернативное условие, если if не сработал. Можно использовать несколько elif подряд.
  • else не содержит условия и выполняется, если ни одно из предыдущих условий не оказалось истинным. Он не обязателен.

Пример:

1if x > 0:
2    print("Число положительное.")
3elif x < 0:
4    print("Число отрицательное.")
5else:
6    print("Это ноль.")

Примечание

Условная конструкция может состоять только из if, либо включать любое количество elif, и, при необходимости, завершаться else. Использование elif и else — не обязательно, но они помогают обрабатывать разные варианты поведения.

Что может быть условием

Условием может быть результат операции сравнения. Python поддерживает привычные математические операторы:

  • > (больше);
  • >= (больше или равно);
  • < (меньше);
  • <= (меньше или равно);
  • == (равно);
  • != (не равно).

Операции для объединения условий

Иногда одного условия недостаточно. Например, нужно проверить сразу два условия — и чтобы оба были истинными. В таких случаях используются логические операторы.

Основные логические операторы в Python:

Оператор

Назначение

Пример

1`and`

Логическое И: возвращает True, если оба условия истинны

1`x > 0 and x < 10`
1`or`

Логическое ИЛИ: возвращает True, если хотя бы одно условие истинно

1`x < 0 or x > 100`
1`not`

Логическое НЕ: возвращает противоположное значение

1`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

Пример: проверка букв

Допустим, пользователь должен ввести первую и последнюю буквы русского алфавита. Проверим, что это действительно «а» и «я» — в любом регистре:

1print("Введите первую и последнюю буквы русского алфавита.")
2first_letter = input()
3last_letter = input()
4if (first_letter == "а" or first_letter == "А") and (
5        last_letter == "я" or last_letter == "Я"):
6    print("Верно.")
7else:
8    print("Неверно.")

Сокращённая запись условий

В Python можно использовать двойное неравенство, чтобы записывать сложные условия компактно. Запись

1if x >= 0 and x < 100:
2    ...

можно заменить на:

1if 0 <= x < 100:
2    ...

В Python можно сравнивать не только числа, но и строки. Однако строки сравниваются не по значению как число, а посимвольно, по коду каждого символа.

Сравнение строк

Python сравнивает строки в лексикографическом порядке — по таблице кодировки символов (обычно UTF-8). Это значит:

  • Сначала сравниваются первые символы строк;
  • Если они совпадают — сравниваются вторые, и так далее;
  • Сравнение останавливается, как только символы отличаются.

Компьютер изначально работает только с двоичными числами. Поэтому для работы с символами им назначаются коды — числа, а сами таблицы соответствия символов и кодов называются таблицами кодировки. Кодировок существует достаточно много, одной из самых популярных на данный момент является UTF-8.

Например, сравним две односимвольные строки:

1letter_1 = "t"
2letter_2 = "w"
3print(letter_1 > letter_2)

Программа выведет False, поскольку символ t стоит в таблице кодировки раньше, чем w (как и по алфавиту, то есть лексикографически).

Чтобы убедиться в этом, можно использовать встроенную функцию ord(), которая возвращает код символа из таблицы кодировки:

1print(ord("t"), ord("w"))

В консоли отобразится:

116 119

Поскольку 116 меньше 119, в предыдущем примере мы и получили False.

Чтобы получить символ по его коду, необходимо вызвать встроенную функцию chr() с соответствующим кодом:

1print(chr(116), chr(119))

В результате увидим:

t w

В таблице кодировки БОЛЬШИЕ и маленькие буквы — это различные символы с разными кодами (из разных диапазонов). Поэтому для корректного сравнения строки должны быть в одном регистре.

1print("a" > "A")  # True, потому что код “a” больше

Если вы хотите сравнивать строки без учёта регистра, сначала приведите их к одному регистру:

1text_1 = "Привет"
2text_2 = "привет"
3print(text_1.lower() == text_2.lower())  # True

Проверка вхождения с in

Чтобы проверить, содержит ли строка нужное слово или часть слова, используется оператор in:

1text = input()
2if "добр" in text:
3    print("Встретилось 'доброе' слово.")
4else:
5    print("Добрых слов не найдено.")

Оператор in можно использовать и с числами, списками, кортежами — но об этом позже.

Match-case

С версии Python 3.10 появился оператор match — это современный способ сравнивать значения с заранее заданными шаблонами. Он напоминает конструкцию switch из других языков программирования (например, C++ или JavaScript).

Пример: светофор

1color = input()
2match color:
3    case 'красный' | 'жёлтый':
4        print('Стоп.')
5    case 'зелёный':
6        print('Можно ехать.')
7    case _:
8        print('Некорректное значение.')

Обратите внимание, что для проверки выполнения условия ИЛИ в операторе case не используется логическая операция or. Её нельзя использовать, поскольку она применяется для переменных логического типа, а в примере перечисляются значения-строки. Вместо неё мы используем специальный оператор |.

Последний оператор case выполняется всегда и сработает в случае, если ни одно из предыдущих условий не сработало.

Проверка условий при помощи встроенных функций

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

Рассмотрим применение встроенных функций в следующем примере. Обратите внимание на строки, начинающиеся со знака #. Так в Python обозначаются комментарии — линии, которые не выполняются интерпретатором, а служат для пояснения кода.

1m = 12
2n = 19
3k = 25
4
5# максимальное число
6print(max(m, n, k))
7
8line_1 = "m"
9line_2 = "n"
10line_3 = "k"
11
12# минимальная лексикографически строка
13print(min(line_1, line_2, line_3))
14
15# количество цифр в числе 2 в степени 2022
16print(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(), расширяют возможности проверки условий.

Отмечайте параграфы как прочитанные, чтобы видеть свой прогресс обучения

Вступайте в сообщество хендбука

Здесь можно найти единомышленников, экспертов и просто интересных собеседников. А ещё — получить помощь или поделиться знаниями.
Вступить
Сообщить об ошибке
Предыдущий параграф2.1. Ввод и вывод данных. Операции с числами, строками. Форматирование

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

Следующий параграф2.3. Циклы

В этом параграфе мы научимся выполнять одни и те же действия многократно с помощью циклов while и for. Вы узнаете, как устроены циклы в Python, когда использовать каждый из них, и как сделать код компактнее с помощью новых возможностей языка.