Загрузка данных
# ===== ТАМАГОЧИ: итоговая сборка =====
from typing import List, Tuple, Callable
# Вставляй присланные методы на место строк raise NotImplementedError(...)
# ===== Ошибки — Епифанцев =====
class PetError(Exception):
"""Базовая ошибка питомца."""
class PetIsSleepingError(PetError):
"""Действие невозможно: питомец спит."""
class PetTooTiredError(PetError):
"""Питомец слишком устал (energy < 2)."""
class PetNotHungryError(PetError):
"""Питомец не голоден (hunger == 0)."""
# ===== Питомец =====
class Pet:
MIN_VALUE = 0
MAX_VALUE = 10
# --- Демченков: состояние ---
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__() ещё подключается")
# --- Демченков: действия (возвращают строку, НЕ печатают) ---
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() ещё подключается")
# --- Стельмах: время ---
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() ещё подключается")
# ===== Меню и основной цикл — Шевелько =====
def choice_menu(menu: List[Tuple[str, Callable[[], str]]]) -> str:
for id, item in enumerate(menu):
print(f"{id + 1}. {item[0]}") # item[0] - имя действия
while True:
choice = input("Выберите действие: ")
if not choice.isdecimal(): # неправильный ввод, спрашиваем заново
print("Неверный ввод")
continue
choice = int(choice) - 1
if choice < 0 or choice >= len(menu): # нет такого пункта
print("Неверный ввод")
continue
chosen = menu[choice]
return chosen[1]() # вызываем действие и выходим
def main():
print("Добро пожаловать в Тамагочи!")
name = input("Введите имя питомца: ")
pet = Pet(name)
def skip_time():
hours = int(input("Сколько часов пропустить: "))
return pet.pass_time(hours)
menu = [
("Покормить", pet.feed),
("Поиграть", pet.play),
("Уложить спать", pet.sleep),
("Разбудить", pet.wake_up),
("Пропустить время", skip_time),
("Показать состояние", lambda: str(pet)),
("Выйти", exit),
]
while True:
print()
try:
print(choice_menu(menu))
except PetError as e:
print("Нельзя:", e)
except ValueError:
print("Ошибка: нужно ввести целое положительное число")
except NotImplementedError as e:
print("Пока не готово:", e)
main()