Различия между версиями 10 и 11
Версия 10 от 2022-12-13 11:26:30
Размер: 5388
Редактор: hbd
Комментарий: добавили константы
Версия 11 от 2022-12-24 16:07:36
Размер: 5388
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 1: Строка 1:
= 12.12 Оператор сопоставления и перекрёстное тестирование = = 12.13 Оператор сопоставления и перекрёстное тестирование =

12.13 Оператор сопоставления и перекрёстное тестирование

TODO

  • B) рассказ про match/case, с постепенным усложнением шаблона. Очередное усложнение шаблона сопровождается соответствующим упражнением.

  • Упражнения на match/case.
    • ВНИМАНИЕ - при реализации обязательно использование оператора match/case, а не цепочек if-ов.
    • в рамках упражнений необходимо ДОстраивать парсер некоторого командного языка, т.е. наращивать набор поддерживаемых команд.
    • командный язык построен по мотивам multi-user dungeon - текстовой бродилки с интерфейсом командной строки.

    • основной цикл программы-упражнения выглядит так:
      • ввод команды (как текстовой строки)
      • разбор команды через match/case и "выполнение" команды
  • {i} простейшие команды.

    • набор команд: about, credits [--year], quit

    • выполнение команд:
      • about: вывод "MUD version 0.01"

      • credits (без ключа): вывод "Copyright (c) developers"

      • credits --year: вывод "Copyright (c) developers THIS YEAR"

      • quit: выход из программы

      • прочие (неподдерживаемые) команды: вывод "Cannot parse"
  • {i} команда с параметром, разбор через связанную переменную.

    • команда: move <направление>, варианты направления: left, right

    • разбирать через вложенный match/case, на втором уровне анализируется связанная переменная с первого уровня
    • выполнение команды:
      • move left: вывод "<-moved"

      • move right: вывод "moved->"

      • move с другим параметром или без параметров: вывод "Unknown movement direction"

  • {i} команда с цепочкой аргументов, разбор через список параметров (*parameters)

    • команда: travel <направление> [<направление> ...], направления как в move

    • выполнение команды: проход по списку параметров; в зависимости от значения параметра:
      • DIR.LEFT: вывод "<-traveled"

      • DIR.RIGHT: вывод "traveled->"

      • другое значение: вывод "Unknown travel direction"
      • DIR.LEFT, DIR.RIGHT - константы со значениями, соответственно, "left" и "right"

    • если список параметров пуст: вывод "Nowhere to travel"
  • {i} matching экземпляров пользовательского класса

    • ОТДЕЛЬНАЯ программа, не расширение предыдущего match/case
    • добавим немного магии
    • напишите класс Spell с полями type и strength

    • напишите оператор match/case для объекта класса Spell, со следующими ветками:

      • type - любой, strength=0: вывод "Some spell of zero strength"

      • type="lightning" или type="fireball", strength - любой:

        • для type="lightning": вывод "Electric damage of <strength> hit points"

        • для type="fireball" : вывод "Fire damage of <strength> hit points"

      • в остальных случаях: вывод "Unknown spell of type <type>, use magic with care!"

  • {i} TODO:

    • + словарь (опц)
  • MUD!!!

Тестирование

  • Скачать pyjudge

  • Разбираемся на пары, выбираем готовое решение Д/З и проверяем
  • Оформляем файл URLS в репозитории

Д/З

  • Убедиться, что для всех Д/З, начиная с 09.13 имеются работающие тесты

  • Ко всем задачам (если это не оговорено отдельно) подобрать среди зарегистрированных репозиториев три каталога с тестами, которые

  • В каталог с решением каждой задачи положить файл URLS, в котором должно быть три таких URL, пол одному в строке

    • Пример для GitHub: https://github.com/Veniamin-Arefev/pythonprac-2021/tree/main/20211111/2/tests

    • Пример для GitLab: https://git.cs.msu.ru/s02190248/pythonprac/-/tree/main/20211111/2/tests

LecturesCMC/PythonIntro2022/Prac/14_MatchOutro (последним исправлял пользователь FrBrGeorge 2022-12-24 16:07:36)