Структура git-репозитория для практикума 2024 г. по Python

Регистрация

Репозиторий

  • Репозиторий должен быть публичный

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

  • Все решения и тесты должны быть опубликованы в репозитории до окончания дедлайна по заданию

Правила именования

  • Для каждого семинара создается каталог с именем вида <ГГГГММДД> (выдача команды date "+%Y%m%d"), дата - того семинара, на котором выдано задание.

  • Все программы, {i} написанные во время занятия, записываются в каталог <ГГГГММДД>/0

  • Для каждого задания создаются подкаталоги <ГГГГММДД>/1, <ГГГГММДД>/2 и т. д.

В подкаталоге содержатся:

  • ровно один .py-файл с текстом решения, имя файла должно быть prog.py

    • исключение: задания, в которых явно требуется наличие нескольких .py-файлов. В таком случае задание оформляется в виде набора модулей, каждый из которых располагается в каталоге src/имя_модуля и запускается из каталога src командой python3 -m имя_модуля.

  • подкаталог check/, в котором хранятся примеры входных данных и эталонного вывода (если нужны по заданию).

Подсистема проверки домашних заданий

  • hworker-0.9.6-py3-none-any.whl

    • скачиваем, делаем pip install /путь/куда/скачали/hworker-0.9.6-py3-none-any.whl (Python 3.12+)

      • (вариант: pip3 install)

  • Если дистрибутив артачится и не хочет ставить, использовать изолированное окружение:

    • python3 -m venv отдельный_каталог; cd отдельный_каталог; source bin/activate

    • вот оттуда уже заработает; оттуда и запускать
  • Персональный запуск (не для кросс-тестирования):
    • hworker -p из каталога с решением или hworker -p каталог-с решением

    • например, hworker -p pythonprac/20231017/1

Пример:

20210903/1

  • prog.py

  • check/

    • 1.in

    • 1.out

    • 2.in

    • 2.out

Как написать тест на класс/функцию?

  1. К файлу с классом/функцией необходимо приписать тестирующий код
       1 import sys
       2 exec(sys.stdin.read())
    
  2. В файл с тестом (1.in) кладётся программа на питоне, в которой используется тестируемый класс или функция

  3. В файл с эталонным выводом попадает результат этого print()

Пример:

  • prog.py

       1 class C:
       2         A = 100500
       3         def fun(self, other):
       4                 return self.A+other
       5 
       6 import sys
       7 exec(sys.stdin.read())
    
  • check/1.in

    print(C().A+42-C().fun(33))
  • check/1.out

    9

Кросс-тестирование

  1. Подготавливаем окружение (необязательно, но практика показала, что так меньше ошибок)
    python3 -m venv crosstest
    cd crosstest
    source bin/activate          # Вариант для Linux / MacOS
    Scripts\activate        # Вариант для windows
    pip install путь_до_hworker.whl
    • Для того, чтобы возобновить работу в окружении после выхода из него, надо вновь войти в каталог окружения и запустить activate

  2. <!> В некоторых случаях стартовый сценарий в командной строке не виден, тогда вместо hworker надо писать python -m hworker

  3. Быстрая проверка, что HWorker запускается:
    • hworker -s -c update

      • Это тестовый пример, он заводится в подкаталоге sample

      • Он выдаст журнал проверок
    • можно даже запустить hworker -s -c update -c publish, но не обязательно ☹

  4. Выберите себе напарника из числа участвующих в вашем практикуме (публикатор на grep.cs.msu.ru)

  5. Подготовка HWorker к кросс-тестированию
    • Скачиваем конфигурационный файл и кладём в тот же каталог

    • Вписываем в этот файл себя и напарника
      • Имя — строго как в публикаторе на grep.cs.msu.ru

      • Репозиторий — строго в формате https://… (не git@git:…). Проверьте, что этот репозиторий доступен публично и его можно склонировать.

  6. Проверяем, что HWorker работает в режиме полной проверки:
    • hworker путь-до/personal.toml -c update

    • Ошибок быть не должно
  7. Заходим в свой репозиторий. Подкладываем в подкаталог check (рядом с файлами-тестами) всех задач (кроме №0 — классных работ, и задач, относительно которых отмечено, что кросс-тестов по ним не надо) файл remote с описанием тестов, которые написали не вы. Формат файла:

    [remote]
    "Напарник:20241008/2/01" = []
    "Напарник:20241008/2/02" = []
    "Напарник:20241008/2/03" = []
    
    • Напарник — ID напарника, 20241008/2 — ID задачи, 01 — имя файла без расширения .in/.out

    • <!> Пушим файлы */*/remote в репозиторий

  8. Выполняем кросс-тестирование этой задачи той же командой (update).

    • Посмотреть результаты можно командой hworker путь-до/personal.toml -c "show result"

      • Ключевое слово для поиска — "rating = …". В идеале должно быть 1.0

LecturesCMC/PythonIntro2024/Prac/RepoStruct (последним исправлял пользователь FrBrGeorge 2024-12-23 15:39:33)