Структура PythonGo-проектаГлава 2.8
02 / 08 Один проект · следующий шаг

Домашнее задание №2

Расширяем Student Tools, проверяем переносимость и сдаём ссылку на lesson_02.

Результат главыВаш репозиторий дисциплины / 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 первой строкой.

ОЖИДАЕМЫЙ ОТЧЁТ ДЛЯ [5, 4, 5, 3, 5]
Средний результат: 4.40
Минимальная оценка: 3
Максимальная оценка: 5
Терминал: программа печатает средний результат 4.40, минимальную 3 и максимальную 5; тесты дают 7 passed.
Так выглядит принятая работа · macOS / Python 3.12

Сверху запуск из корня lesson_02: три строки отчёта. Снизу прогон тестов: collected 7 items и 7 passed — три исходных теста и четыре новых, по две проверки на минимум и максимум. Сверяйте свою работу с этим выводом перед отправкой ссылки.

Нажмите на изображение, чтобы увеличить.
↓Скачать домашнее заданиеMarkdown · требования, проверка и критерии

Что реализовать

Выполните в своём проекте
Где
Ваш репозиторий дисциплины → lesson_02/.
Действие
Перенесите исходники Student Tools без .venv. Создайте новое окружение внутри lesson_02 и добавьте две функции.
Результат
Из lesson_02 запускается расширенный отчёт: 4.40, 3 и 5.
Проверка
Сохраните три исходных теста и добавьте четыре новых: минимум и максимум на обычном и пустом списках. Итого не менее семи.
  1. В app/services/calculator.py добавьте функции calculate_min(values) и calculate_max(values). На пустой список обе должны отвечать ValueError.
  2. В app/utils/formatter.py добавьте оформление отчёта. Вычисления оставьте в services.
  3. В app/main.py получите результаты функций и выведите оформленный отчёт через Rich. Сохраните условие if __name__ == "__main__".
  4. В tests добавьте проверки новых функций: обычный список и пустой список для каждой. Сохраните три исходных теста.
  5. Зафиксируйте зависимости. Допишите README: имя, группа, назначение, версия Python, обязанности файлов, команды для вашей ОС и ожидаемый вывод.
  6. Проверьте запуск из чистой копии с новой .venv. В README запишите команды и результат проверки, путь sys.executable и объясните, почему .venv не передаётся.

Что реализовать

Выполните в своём проекте
Где
Ваш репозиторий дисциплины → lesson_02/.
Действие
Перенесите исходники Student Tools вместе с go.mod и go.sum. Добавьте две функции.
Результат
Из lesson_02 запускается расширенный отчёт: 4.40, 3 и 5.
Проверка
Сохраните исходные тесты и добавьте новые: минимум и максимум на обычном и пустом срезах. Итого не менее шести тестовых функций.
  1. В internal/services/calculator.go добавьте функции CalculateMin(values []int) (int, error) и CalculateMax(values []int) (int, error). На пустой срез обе должны возвращать ошибку.
  2. В internal/utils/formatter.go добавьте оформление отчёта — например FormatReport, собирающий три строки. Вычисления оставьте в services.
  3. В main.go получите результаты функций, проверьте каждую ошибку через if err != nil и выведите оформленный отчёт цветом.
  4. Рядом с кодом добавьте тесты в файлах *_test.go: обычный срез и пустой срез для каждой новой функции. Сохраните исходные тесты.
  5. Выполните go mod tidy и go vet ./.... Допишите README: имя, группа, назначение, версия Go, обязанности файлов, команды и ожидаемый вывод.
  6. Проверьте сборку из чистой копии репозитория. В README запишите команды и результат проверки, вывод go version и объясните, почему собранный бинарник не передаётся через Git.

Проверка перед отправкой

Перед коммитом выполните git status в репозитории курса и проверьте состав файлов. Если репозиторий закрытый, предоставьте преподавателю доступ привычным способом.

Как получить ссылку для сдачи

  1. В корне репозитория выполните git status. Проверьте, что новые файлы относятся к lesson_02, а окружение исключено.
  2. Добавьте работу: git add lesson_02. Создайте коммит: git commit -m "Complete lesson 02".
  3. Отправьте коммит: git push. Если ветка ещё не настроена, выполните подсказку Git для upstream или попросите преподавателя помочь.
  4. Откройте свой репозиторий на GitHub → папку lesson_02. Убедитесь, что файлы появились, и скопируйте адрес из строки браузера.

Как оценивается работа

КритерийБаллы
Пакеты, имена и разделение ответственности2
Установка и запуск из чистой копииСборка и запуск из чистой копии2
Верные расчёты и обработка пустого спискасреза2
Тесты обычного и граничного случая2
Понятный README и чистый состав Git2

Что теперь должно быть понятно

Модуль хранит код. Пакет объединяет модули. Импорт связывает части. Окружение отделяет библиотеки проекта, а requirements и README помогают восстановить запуск на другом компьютере. Эти элементы нужны вместе: аккуратное дерево без работающей инструкции ещё не делает проект воспроизводимым.

Файл хранит код. Папка является пакетом. Импорт по пути от имени модуля связывает части. Файл go.mod задаёт границы модуля и версии зависимостей, go.sum подтверждает их содержимое, а README объясняет запуск другому человеку. Эти элементы нужны вместе: аккуратное дерево без работающей инструкции ещё не делает проект воспроизводимым.

В обеих ветках темы вопросы к структуре одинаковые: где лежат вычисления, кто от кого зависит, как зафиксированы версии зависимостей и что увидит человек, открывший проект впервые. Меняются только имена файлов и команды.

Документация к теме

Effective Go · Пакет testing · Go: обработка ошибок · Go: справочник по модулям

Python: venv · Python: модули и пакеты · VS Code: Python environments · pip freeze