Match-case (Python 3.10+)

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

Тренажер по Python

Конструкция `match-case`, появившаяся в Python 3.10, — это долгожданная альтернатива громоздким цепочкам `if-elif-else`. На первый взгляд она похожа на оператор `switch` из других языков, но на самом деле гораздо мощнее. `Match-case` вводит в Python так называемое структурное сопоставление с образцом, что позволяет элегантно обрабатывать данные сложной структуры.

В этом тренажере вы пройдете путь от основ синтаксиса `match-case` до продвинутых техник. Вы научитесь сопоставлять переменные с простыми значениями, использовать шаблоны-заменители, объединять несколько вариантов в одном `case` и даже разбирать на части списки и словари прямо внутри конструкции. Эти задания помогут вам писать более чистый, читаемый и эффективный код.

Список тем

Основы синтаксиса: обработка статуса

id: 39981_task_match_1

Заполните пропуски, чтобы создать базовую конструкцию `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)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выведет код?

id: 39981_task_match_2

Проанализируйте приведенный код с конструкцией `match-case`. Какое именно сообщение будет выведено на экран в результате выполнения этого скрипта?

Выберите правильный вариант ответа
command = "send"

match command:
    case "receive":
        print("Receiving data...")
    case "send":
        print("Sending data...")
    case "wait":
        print("Waiting...")
    case _:
        print("Unknown command.")
Сообщения
Проверить
Показать подсказку

Исправление синтаксической ошибки

id: 39981_task_match_3

В этом коде допущена распространенная синтаксическая ошибка, из-за которой он не сможет выполниться. Найдите строку с ошибкой и исправьте её.

Найдите ошибку и исправьте
error_code = "E_ACCESS"
 
match error_code:
    case "E_CONN"
        print("Connection error")
    case "E_ACCESS":
        print("Access denied")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите обработчик команды

id: 39981_task_match_4

Соберите из фрагментов работающий скрипт, который обрабатывает команду, представленную в виде кортежа. Команда может быть "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":
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Объединение случаев с помощью `|`

id: 39981_task_match_5

Дополните код, используя токены из банка. Задача — сгруппировать выходные и рабочие дни недели. Для этого нужно объединить несколько строковых литералов в одном `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)
|
"Weekday"
&
"Workday"
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Работа шаблона по умолчанию

id: 39981_task_match_6

В коде есть обработка только кодов 200 и 404. Что выведет программа, если в нее попадет код 503, который не обрабатывается явным образом? Введите результат в поле ответа.

Что должно получиться?
http_code = 503

match http_code:
    case 200:
        print("Success")
    case 404:
        print("Not Found")
    case _:
        print("Another error")
Сообщения
Проверить
Показать подсказку

Шаблоны со "стражем" (guard)

id: 39981_task_match_7

Дополните код, чтобы он правильно находил точки на главной диагонали (где 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)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Ошибка в шаблоне словаря

id: 39981_task_match_8

Этот код пытается извлечь данные из словаря с помощью `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")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру