Программа курса:
Оператор match-case
Что такое конструкция match case в python?
Оператор match-case
был введен в Python 3.10 как аналог switch-case
из других языков программирования. Он предоставляет более выразительный способ управления логикой, позволяя создавать шаблонные проверки для значений, а также применять условия, которые делают код более читаемым. В этой лекции мы рассмотрим базовый синтаксис match-case
, сравнение нескольких значений в одной строке, использование методов и проверку типов.

Основы match-case
в Python
Оператор match-case
позволяет выполнять проверки значений на основе их структуры или типов. Простейший синтаксис выглядит следующим образом:
color = "green"
match color:
case "red":
print("Цвет красный")
case "blue":
print("Цвет синий")
case "green":
print("Цвет зелёный")
case _:
print("Цвет неизвестен")
Здесь переменная color
проверяется на значения "red"
, "blue"
и "green"
. Если ни одно из условий не выполняется, используется _
, чтобы поймать все остальные значения (аналог default
в других языках).
Использование case _
как else
в match-case
Когда ни одно из условий не совпадает, case _
выполняется автоматически. Например, если значение переменной не соответствует ни одному из явно указанных case
, то управление передаётся блоку case _
. Это помогает избежать ошибок и предусмотреть обработку непредвиденных значений.
operation = "multiply"
match operation:
case "add":
print("Сложение")
case "subtract":
print("Вычитание")
case "divide":
print("Деление")
case _:
print("Операция неизвестна")
Здесь, если значение operation
не совпадает с "add"
, "subtract"
или "divide"
, сработает блок case _
, который выполняет роль else
и выведет "Операция неизвестна"
.
Сравнение на несколько значений в match-case
В match-case
можно объединять несколько значений в одном case
, используя оператор "или" (|
). Это позволяет сделать код более лаконичным и удобочитаемым.
day = "суббота"
match day:
case "суббота" | "воскресенье":
print("Это выходной день!")
case "понедельник" | "вторник" | "среда" | "четверг" | "пятница":
print("Это рабочий день.")
case _:
print("Неизвестный день.")
В этом примере case
проверяет сразу несколько значений: если день "суббота"
или "воскресенье"
, это выходной день. Такой подход сокращает количество проверок и делает код легче для понимания.
Использование методов в match-case
Оператор match-case
позволяет применять условия или методы внутри case
. Например, можно использовать методы для проверки строковых значений, например, проверку префиксов с помощью startswith()
.
command = "print_text"
match command:
case cmd if cmd.startswith("print"):
print("Команда для вывода текста")
case cmd if cmd.startswith("save"):
print("Команда для сохранения данных")
case _:
print("Неизвестная команда")
Здесь match-case
проверяет, начинается ли строка command
с "print"
или "save"
. В зависимости от префикса выводится соответствующее сообщение.
Ещё один пример с использованием числовых условий:
number = -10
match number:
case n if n < 0:
print("Отрицательное число")
case n if n == 0:
print("Число равно нулю")
case n if n > 0:
print("Положительное число")
Здесь проверяются разные условия для переменной number
: если число отрицательное, равно нулю или положительное, выводится соответствующее сообщение.
Использование match case types
В match-case
можно проверять тип данных переменной, что особенно полезно, если тип значения неизвестен заранее. Это можно сделать, используя шаблоны типа int()
, float()
, str()
и т.д.
# меняйте значение переменной value
value = [1, 2, 3]
match value:
case int() | float():
print("Имеем дело с числом")
case str():
print("Имеем дело со строкой")
case list():
print("Имеем дело со списком")
case _:
print("Лучше с этим дел не иметь")
Здесь match-case
проверяет тип переменной value
. Если она — целое или вещественное число (int
или float
), строка (str
), или список (list
), то выводится соответствующее сообщение. В противном случае выполняется case _
, который выводит общее сообщение, если тип данных не совпал с перечисленными.
Примеры использования match-case
в python
Калькулятор с использованием match-case
Реализуем простейший калькулятор, который выполняет арифметические операции в зависимости от введённой команды.
operation = ("add", 10, 5) # Вы можете менять операцию на "subtract", "multiply", "divide"
match operation:
case ("add", x, y):
print(f"Сложение: {x} + {y} = {x + y}")
case ("subtract", x, y):
print(f"Вычитание: {x} - {y} = {x - y}")
case ("multiply", x, y):
print(f"Умножение: {x} * {y} = {x * y}")
case ("divide", x, y) if y != 0:
print(f"Деление: {x} / {y} = {x / y}")
case ("divide", _, 0):
print("Ошибка: Деление на ноль!")
case _:
print("Неизвестная операция")
В этом примере:
- Каждый
case
обрабатывает определённый вид операции. case ("divide", _, 0)
обрабатывает случай деления на ноль, чтобы избежать ошибки.case _
используется какelse
, чтобы обработать неизвестные операции.
Определение дня недели по номеру
В следующем примере match-case
помогает получить название дня недели по его номеру.
day_number = 5
match day_number:
case 1:
print("Понедельник")
case 2:
print("Вторник")
case 3:
print("Среда")
case 4:
print("Четверг")
case 5:
print("Пятница")
case 6:
print("Суббота")
case 7:
print("Воскресенье")
case _:
print("Некорректный номер дня")
Здесь каждый case
соответствует одному из дней недели. Если введено число вне диапазона 1-7, то срабатывает case _
, выводя сообщение об ошибке.
Простая система управления доступом
Допустим, мы разрабатываем систему доступа, в которой разные уровни пользователей имеют разные права.
user_role = "editor" # Возможные роли: "admin", "editor", "viewer"
match user_role:
case "admin":
print("Полный доступ: чтение, редактирование, удаление")
case "editor":
print("Доступ на чтение и редактирование")
case "viewer":
print("Доступ только на чтение")
case _:
print("Роль неизвестна, доступ ограничен")
В данном случае match-case
используется для обработки разных уровней доступа. В зависимости от значения user_role
, выводится соответствующий уровень прав.
Оператор match-case
в Python позволяет легко и эффективно обрабатывать различные условия и структуры данных. Благодаря гибкости синтаксиса match-case
можно:
- Проверять несколько значений в одном
case
; - Использовать методы и сложные проверки внутри условий;
- Проверять тип данных переменной для обработки разных ситуаций.
match-case
значительно упрощает структуру программ, делая код более выразительным и удобочитаемым, что особенно полезно в задачах с множеством условий.