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


from abc import ABC, abstractmethod

# Базовый класс для всех персонажей
class Character(ABC):
    def __init__(self, name):
        self.name = name

    @abstractmethod
    def get_type(self):
        pass

    @abstractmethod
    def get_health(self):
        pass

    @abstractmethod
    def get_action(self):
        pass

    def display_info(self):
        print(f"Имя: {self.name}")
        print(f"Тип: {self.get_type()}")
        print(f"Здоровье: {self.get_health()}")
        print(f"Действие: {self.get_action()}")


# Конкретные классы персонажей
class Warrior(Character):
    def get_type(self): return "Воин"
    def get_health(self): return 100
    def get_action(self): return "Атакует мечом"

class Mage(Character):
    def get_type(self): return "Маг"
    def get_health(self): return 70
    def get_action(self): return "Использует заклинание"

class Archer(Character):
    def get_type(self): return "Лучник"
    def get_health(self): return 80
    def get_action(self): return "Стреляет из лука"


# Фабрика персонажей
class CharacterFactory:
    @staticmethod
    def create_character(choice, name):
        if choice == '1':
            return Warrior(name)
        elif choice == '2':
            return Mage(name)
        elif choice == '3':
            return Archer(name)
        else:
            return None

# Основная программа
def main():
    print("Меню выбора персонажа:")
    print("1 Воин")
    print("2 Маг")
    print("3 Лучник")

    choice = input("\nВыберите номер персонажа: ")

    # Проверка на правильность ввода (Пункт 5)
    if choice not in ['1', '2', '3']:
        print("Ошибка: такого персонажа нет")
        return

    name = input("Введите имя персонажа: ")

    # Создание персонажа через Фабрику (Пункт 3)
    factory = CharacterFactory()
    character = factory.create_character(choice, name)

    # Вывод информации о персонаже (Пункт 4)
    print("\nИнформация о созданном персонаже:")
    character.display_info()

if __name__ == "__main__":
    main()