Домашнее задание №2
Расширяем Student Tools, проверяем переносимость и сдаём ссылку на lesson_02.
Следующий шаг того же проекта
В первой теме работа сдавалась в lesson_01. Теперь в вашем личном репозитории дисциплины создайте lesson_02. Она станет корнем проекта. Предыдущую работу оставьте на месте.
Внутри lesson_02 располагаются app, tests и служебные файлы. Продолжите Student Tools: кроме средней оценки программа должна показывать минимальную и максимальную. Сохраните разделение ответственности и вывод через Rich.
Внутри lesson_02 располагаются main.go, internal и служебные файлы; там же лежит go.mod — это корень модуля. Продолжите Student Tools: кроме средней оценки программа должна показывать минимальную и максимальную. Сохраните разделение ответственности и цветной вывод.
Работу можно сдать на Python или на Go — требования и критерии одинаковы, различаются только имена файлов и команды. Переключатель слева показывает нужную вам ветку. Если делаете на Go, укажите это в README первой строкой.
Средний результат: 4.40
Минимальная оценка: 3
Максимальная оценка: 5
Сверху запуск из корня lesson_02: три строки отчёта. Снизу прогон тестов: collected 7 items и 7 passed — три исходных теста и четыре новых, по две проверки на минимум и максимум. Сверяйте свою работу с этим выводом перед отправкой ссылки.
Что реализовать
- Где
- Ваш репозиторий дисциплины → lesson_02/.
- Действие
- Перенесите исходники Student Tools без .venv. Создайте новое окружение внутри lesson_02 и добавьте две функции.
- Результат
- Из lesson_02 запускается расширенный отчёт: 4.40, 3 и 5.
- Проверка
- Сохраните три исходных теста и добавьте четыре новых: минимум и максимум на обычном и пустом списках. Итого не менее семи.
- В
app/services/calculator.pyдобавьте функцииcalculate_min(values)иcalculate_max(values). На пустой список обе должны отвечатьValueError. - В
app/utils/formatter.pyдобавьте оформление отчёта. Вычисления оставьте в services. - В
app/main.pyполучите результаты функций и выведите оформленный отчёт через Rich. Сохраните условиеif __name__ == "__main__". - В
testsдобавьте проверки новых функций: обычный список и пустой список для каждой. Сохраните три исходных теста. - Зафиксируйте зависимости. Допишите README: имя, группа, назначение, версия Python, обязанности файлов, команды для вашей ОС и ожидаемый вывод.
- Проверьте запуск из чистой копии с новой .venv. В README запишите команды и результат проверки, путь sys.executable и объясните, почему .venv не передаётся.
Что реализовать
- Где
- Ваш репозиторий дисциплины → lesson_02/.
- Действие
- Перенесите исходники Student Tools вместе с go.mod и go.sum. Добавьте две функции.
- Результат
- Из lesson_02 запускается расширенный отчёт: 4.40, 3 и 5.
- Проверка
- Сохраните исходные тесты и добавьте новые: минимум и максимум на обычном и пустом срезах. Итого не менее шести тестовых функций.
- В
internal/services/calculator.goдобавьте функцииCalculateMin(values []int) (int, error)иCalculateMax(values []int) (int, error). На пустой срез обе должны возвращать ошибку. - В
internal/utils/formatter.goдобавьте оформление отчёта — напримерFormatReport, собирающий три строки. Вычисления оставьте в services. - В
main.goполучите результаты функций, проверьте каждую ошибку черезif err != nilи выведите оформленный отчёт цветом. - Рядом с кодом добавьте тесты в файлах
*_test.go: обычный срез и пустой срез для каждой новой функции. Сохраните исходные тесты. - Выполните
go mod tidyиgo vet ./.... Допишите README: имя, группа, назначение, версия Go, обязанности файлов, команды и ожидаемый вывод. - Проверьте сборку из чистой копии репозитория. В README запишите команды и результат проверки, вывод
go versionи объясните, почему собранный бинарник не передаётся через Git.
Проверка перед отправкой
Перед коммитом выполните git status в репозитории курса и проверьте состав файлов. Если репозиторий закрытый, предоставьте преподавателю доступ привычным способом.
Как получить ссылку для сдачи
- В корне репозитория выполните
git status. Проверьте, что новые файлы относятся кlesson_02, а окружение исключено. - Добавьте работу:
git add lesson_02. Создайте коммит:git commit -m "Complete lesson 02". - Отправьте коммит:
git push. Если ветка ещё не настроена, выполните подсказку Git для upstream или попросите преподавателя помочь. - Откройте свой репозиторий на GitHub → папку
lesson_02. Убедитесь, что файлы появились, и скопируйте адрес из строки браузера.
Как оценивается работа
| Критерий | Баллы |
|---|---|
| Пакеты, имена и разделение ответственности | 2 |
| Установка и запуск из чистой копииСборка и запуск из чистой копии | 2 |
| Верные расчёты и обработка пустого спискасреза | 2 |
| Тесты обычного и граничного случая | 2 |
| Понятный README и чистый состав Git | 2 |
Что теперь должно быть понятно
Модуль хранит код. Пакет объединяет модули. Импорт связывает части. Окружение отделяет библиотеки проекта, а requirements и README помогают восстановить запуск на другом компьютере. Эти элементы нужны вместе: аккуратное дерево без работающей инструкции ещё не делает проект воспроизводимым.
Файл хранит код. Папка является пакетом. Импорт по пути от имени модуля связывает части. Файл go.mod задаёт границы модуля и версии зависимостей, go.sum подтверждает их содержимое, а README объясняет запуск другому человеку. Эти элементы нужны вместе: аккуратное дерево без работающей инструкции ещё не делает проект воспроизводимым.
В обеих ветках темы вопросы к структуре одинаковые: где лежат вычисления, кто от кого зависит, как зафиксированы версии зависимостей и что увидит человек, открывший проект впервые. Меняются только имена файлов и команды.
Документация к теме
Effective Go · Пакет testing · Go: обработка ошибок · Go: справочник по модулям
Python: venv · Python: модули и пакеты · VS Code: Python environments · pip freeze