Программа курса:
Оператор 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 значительно упрощает структуру программ, делая код более выразительным и удобочитаемым, что особенно полезно в задачах с множеством условий.