Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 

Repository files navigation

Учёт Московского зоопарка

Язык: Python 3.8+ (рекомендую 3.10+)
Автор: <Сатторов Амирджон>


Краткое описание

Консольное приложение для учёта животных и вещей зоопарка. Реализовано с вниманием к принципам SOLID и с простым DI-контейнером. Приложение позволяет:

  • принимать животных (с проверкой здоровья ветеринарной клиникой),
  • регистрировать вещи (Table, Computer, Thing),
  • получать отчёты: количество животных, суммарный расход корма в сутки,
  • формировать список животных, пригодных для контактного зоопарка (травоядные с kindness > 5),
  • показывать инвентари (вещи + животные) и подробные списки.

  1. Клонировать репозиторий и перейти в папку проекта

  2. Запускаем src/main.py

  3. Приложение откроет интерактивное консольное меню. Примеры команд, которые появляются в меню:

  • 1 — Добавить животное
  • 2 — Добавить вещь (Table / Computer / другое)
  • 3 — Показать количество животных и общий расход корма
  • 4 — Список животных, пригодных для контактного зоопарка
  • 5 — Показать инвентарь (вещи + животные)
  • 6 — Показать подробный список животных
  • 0 — Выход

Примеры запуска и ввода:
Выберите пункт: 1
Выберите вид животного:

  1. Monkey
  2. Rabbit
  3. Tiger
  4. Wolf
    Введите номер вида: 1
    Имя животного: Momo
    Сколько кг еды в сутки (целое): 3
    Уровень доброты (0-10): 7
    Ветеринарная проверка: животное Monkey 'Momo'. Здорово? (да/нет): y
    Животное принято и зарегистрировано с номером 1.

Соответствие требованиям задания — что и как реализовано

  1. Добавление новых животных

    • Метод: Zoo.add_animal(animal, simulated_health=None).
    • Перед добавлением вызывается VeterinaryClinic.inspect(animal, simulated_health). В интерактивном режиме клиника спрашивает да/нет у пользователя; в тестах можно передать simulated_health для автоматизации.
  2. Проверка здоровья (ветеринарная клиника)

    • Файл: clinic.py, класс VeterinaryClinic.
    • Метод inspect возвращает True (принимаем) или False (отказываем). Для тестов и автоматизации есть параметр simulated_health.
  3. Учет количества килограммов еды

    • Каждое животное хранит поле food (целое — кг в сутки).
    • Zoo.total_food_per_day() суммирует поле food для всех животных и возвращает число кг/сутки.
  4. Список животных для контактного зоопарка

    • Правило: травоядные (Herbo) с kindness > 5.
    • Реализация: Zoo.contact_zoo_candidates() возвращает список таких животных (тип Herbo и kindness > 5).
  5. Инвентаризация вещей и животных

    • Интерфейс: IInventory (number, name) — в проекте через структурную типизацию (Protocol) или свойства.
    • Zoo хранит коллекции _animals и _things.
    • Zoo.inventory_list() возвращает единый список пар (наименование, инв. номер) для вещей и животных.
    • Инвентарный номер присваивается автоматически через внутренний счётчик Zoo._next_inventory_number, либо может быть указан вручную (при ручном указании счётчик корректируется, чтобы избежать конфликтов номера).
  6. DI-контейнер

    • Файл: container.py.
    • Функции: register_singleton, register_factory, resolve.
    • main.py собирает контейнер: регистрирует VeterinaryClinic как singleton и Zoo как фабрику (lambda: Zoo(clinic)), затем получает zoo = container.resolve("zoo").
    • Это даёт гибкость и упрощает подмену реализаций при тестировании.
  7. Принципы SOLID

    • S (Single Responsibility): разделение по файлам: models.py (данные), clinic.py (ветклиника), zoo.py (логику хранения и отчётов), main.py (UI), container.py (DI).
    • O (Open/Closed): добавление нового вида животного — создать новый подкласс Animal/Herbo/Predator; Zoo не требует изменений.
    • L (Liskov Substitution): подклассы животных (Monkey, Rabbit, Tiger, Wolf) можно подставлять вместо Animal везде в коде.
    • I (Interface Segregation): мелкие контракты/протоколы IAlive (поле food) и IInventory (поля number, name).
    • D (Dependency Inversion & Injection): Zoo получает VeterinaryClinic извне через DI; тесты могут подставлять FakeClinic.
  8. Unit-тесты

    • Файл: tests/test.py (pytest).
    • Тесты покрывают критичные кейсы: прием животного, отказ, добавление вещей и проверка инвентаря.
    • Для запуска тестов надо использовать: pytest.
  9. Понятный ввод/вывод

    • В main.py реализовано текстовое меню, проверка корректности ввода (целые числа), повтор запроса на неверный ввод.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages