Skip to content

amirjons/zoo

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

No releases published

Packages

 
 
 

Contributors

Languages