Конструкция `match-case`, появившаяся в Python 3.10, — это долгожданная альтернатива громоздким цепочкам `if-elif-else`. На первый взгляд она похожа на оператор `switch` из других языков, но на самом деле гораздо мощнее. `Match-case` вводит в Python так называемое структурное сопоставление с образцом, что позволяет элегантно обрабатывать данные сложной структуры.
В этом тренажере вы пройдете путь от основ синтаксиса `match-case` до продвинутых техник. Вы научитесь сопоставлять переменные с простыми значениями, использовать шаблоны-заменители, объединять несколько вариантов в одном `case` и даже разбирать на части списки и словари прямо внутри конструкции. Эти задания помогут вам писать более чистый, читаемый и эффективный код.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Конструкция if.
- Конструкция if-else.
- Конструкция elif.
- Вложенные условия.
- Сложные логические условия.
- Match-case (Python 3.10+).
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Основы синтаксиса: обработка статуса
Заполните пропуски, чтобы создать базовую конструкцию `match-case`. Код должен обрабатывать HTTP-статус и выводить соответствующее сообщение. Для всех неизвестных статусов должно выводиться "Unknown status".
status = 404
message = ""
input1S status:
input2S 200:
message = "OK"
case 404:
message = "Not Found"
input3S:
message = "Unknown status"
print(message)Что выведет код?
Проанализируйте приведенный код с конструкцией `match-case`. Какое именно сообщение будет выведено на экран в результате выполнения этого скрипта?
command = "send"
match command:
case "receive":
print("Receiving data...")
case "send":
print("Sending data...")
case "wait":
print("Waiting...")
case _:
print("Unknown command.")Исправление синтаксической ошибки
В этом коде допущена распространенная синтаксическая ошибка, из-за которой он не сможет выполниться. Найдите строку с ошибкой и исправьте её.
error_code = "E_ACCESS" match error_code: case "E_CONN" print("Connection error") case "E_ACCESS": print("Access denied")Соберите обработчик команды
Соберите из фрагментов работающий скрипт, который обрабатывает команду, представленную в виде кортежа. Команда может быть "move" с координатами или "attack" с именем цели. Одна из строк является лишней и не относится к задаче.
match command: case ("attack", target):command = ("move", 10, 20) print(f"Moving to ({x}, {y})") case ("move", x, y): print(f"Attacking {target}!")if command[0] == "move":Объединение случаев с помощью `|`
Дополните код, используя токены из банка. Задача — сгруппировать выходные и рабочие дни недели. Для этого нужно объединить несколько строковых литералов в одном `case`.
day = "Sunday"
day_type = ""
match day:
case "Saturday" input1S "Sunday":
day_type = "Weekend"
case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday":
day_type = input2S
print(day_type)Работа шаблона по умолчанию
В коде есть обработка только кодов 200 и 404. Что выведет программа, если в нее попадет код 503, который не обрабатывается явным образом? Введите результат в поле ответа.
http_code = 503
match http_code:
case 200:
print("Success")
case 404:
print("Not Found")
case _:
print("Another error")Шаблоны со "стражем" (guard)
Дополните код, чтобы он правильно находил точки на главной диагонали (где x равен y). Для этого нужно добавить к шаблону `case` дополнительное условие, которое называется "стражем".
point = (5, 5)
description = ""
match point:
case (0, 0):
description = "Origin"
case (x, y) input1S input2S:
description = "On main diagonal"
case (x, y):
description = "Regular point"
print(description)Ошибка в шаблоне словаря
Этот код пытается извлечь данные из словаря с помощью `match-case`, но в синтаксисе шаблона допущена ошибка. Найдите и исправьте ее, чтобы код заработал.
request = {"method": "GET", "url": "/api/users"} match request: case {"method": "GET", "url" = path}: print(f"GET request to {path}") case _: print("Not a GET request")