Загрузка данных


# ===== ТАМАГОЧИ: итоговая сборка =====
# Вставляй присланные методы на место строк raise NotImplementedError(...)

# ===== Ошибки (роль D) =====
class PetError(Exception):
    """Базовая ошибка питомца."""


class PetIsSleepingError(PetError):
    """Действие невозможно: питомец спит."""


class PetTooTiredError(PetError):
    """Питомец слишком устал (energy < 2)."""


class PetNotHungryError(PetError):
    """Питомец не голоден (hunger == 0)."""


# ===== Питомец =====
class Pet:
    MIN_VALUE = 0
    MAX_VALUE = 10

    # --- роль A: состояние ---
    def __init__(self, name):
        # name: str, hunger/mood/energy: int 0..10
        # hunger: 0 = сыт, 10 = очень голоден
        # hour: int 0..23, старт 8; is_sleeping: bool
        raise NotImplementedError("__init__() ещё подключается")

    def _clamp(self, value):
        # вернуть value, зажатое в 0..10
        raise NotImplementedError("_clamp() ещё подключается")

    def __str__(self):
        # вернуть строку, например:
        # "Барсик | 08:00 | голод 3/10 | настроение 7/10 | энергия 7/10 | бодрствует"
        raise NotImplementedError("__str__() ещё подключается")

    # --- роль B: действия (возвращают строку-сообщение, НЕ печатают) ---
    def feed(self):
        # спит -> PetIsSleepingError; hunger == 0 -> PetNotHungryError
        # hunger -3, mood +1; вернуть "Барсик поел"
        raise NotImplementedError("feed() ещё подключается")

    def play(self):
        # спит -> PetIsSleepingError; energy < 2 -> PetTooTiredError
        # mood +2, energy -2, hunger +1; вернуть сообщение
        raise NotImplementedError("play() ещё подключается")

    def sleep(self):
        # уже спит -> PetIsSleepingError; is_sleeping = True; вернуть сообщение
        raise NotImplementedError("sleep() ещё подключается")

    def wake_up(self):
        # не спит -> PetError("уже не спит"); is_sleeping = False; сообщение
        raise NotImplementedError("wake_up() ещё подключается")

    # --- роль C: время ---
    def pass_time(self, hours=1):
        # hours не целое или <= 0 -> ValueError
        # каждый час: hour = (hour + 1) % 24, hunger +1,
        #   спит: energy +2, не спит: energy -1,
        #   hunger >= 8: mood -1
        # вернуть сообщение "Прошло N ч., сейчас HH:00"
        raise NotImplementedError("pass_time() ещё подключается")

    def wants_to_sleep(self, hour):
        # вернуть True, если hour >= 22 или hour < 7 или energy <= 2
        raise NotImplementedError("wants_to_sleep() ещё подключается")


# ===== Меню и основной цикл (роль E) =====
def print_menu():
    print()
    print("1. Покормить")
    print("2. Поиграть")
    print("3. Уложить спать")
    print("4. Разбудить")
    print("5. Пропустить время")
    print("6. Показать состояние")
    print("0. Выход")


def main():
    print("Добро пожаловать в Тамагочи!")
    name = input("Введите имя питомца: ")
    pet = Pet(name)

    while True:
        print_menu()
        choice = input("Выберите действие: ")
        try:
            if choice == "1":
                print(pet.feed())
            elif choice == "2":
                print(pet.play())
            elif choice == "3":
                print(pet.sleep())
            elif choice == "4":
                print(pet.wake_up())
            elif choice == "5":
                hours = int(input("Сколько часов пропустить: "))
                print(pet.pass_time(hours))
            elif choice == "6":
                print(pet)
            elif choice == "0":
                print("Пока!")
                break
            else:
                print("Неизвестная команда")
        except PetError as e:
            print("Нельзя:", e)
        except ValueError:
            print("Ошибка: нужно ввести целое положительное число")
        except NotImplementedError as e:
            print("Пока не готово:", e)


main()