Головоломка Python 3.10

📚 Свяжитесь с нами. Хотите узнать, что нового на книжной полке Pragmatic? "Подпишитесь на нашу рассылку". Вы будете первыми, кто узнает о выступлениях авторов, о книгах в бета-версии, новых книгах в печати и промокодах, дающих вам скидки до 40 процентов.

Пробуем сопоставить

Python 3.10 представил новый классный оператор match. Вы решаете использовать его в настольной игре, которую пишете:

Тогда попробуй (полюбил REPL):

Хм… 5 меньше 100 (MAX_X), почему такой результат?

Затем вы помните, что match - это сопоставление структурного шаблона, а не выражение switch - оно сопоставляется по структуре, а не по значению. Таким образом, первый случай будет соответствовать любым 2 элементам tuple. В вашем случае он установит MAX_X на 5 и MAX_Y на 100 и не продвинется ни на какую точку. К счастью для вас, внутри advance MAX_X и MAX_Y находятся локальные переменные, которые не будут перезаписывать глобальные.

Есть два способа решить эту проблему. Первый - использовать охранники:

Второй вариант - преобразовать MAX_X и MAX_Y в перечисления:

Сопоставление структурных шаблонов - это захватывающая новая функция - время покажет, как они будут использоваться и какие передовые практики появятся. А пока вы можете узнать больше о структурном сопоставлении с образцом на сайте Бена Хойта.

Если вам нравится решать проблемы программирования, ознакомьтесь с серией книг Brain Teaser Мики Тебека с книжной полки Pragmatic. Вы можете сэкономить 35% на версиях электронных книг с промокодом brain_teasers_35 до 31 октября 2021 года: