Загрузка данных
# ===== ТАМАГОЧИ: итоговая сборка =====
# Вставляй присланные методы на место строк 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()