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(), расширяют возможности проверки условий.