Драка

Что нужно сделать

Вы работаете в команде разработчиков мобильной игры, и вам досталась такая часть от ТЗ заказчика:

Есть два юнита, каждый из них называется «Воин». Каждому устанавливается здоровье в 100 очков. Они бьют друг друга в случайном порядке. Тот, кто бьёт, здоровье не теряет. У того, кого бьют, оно уменьшается на 20 очков от одного удара. После каждого удара надо выводить сообщение, какой юнит атаковал и сколько у противника осталось здоровья. Как только у кого-то заканчивается ресурс здоровья, программа завершается сообщением о том, кто одержал победу.

Реализуйте такую программу.

Что оценивается

  • Результат вычислений корректен.
  • Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
  • Сообщения о процессе получения результата осмысленны и понятны для пользователя.
  • Переменные, функции и собственные методы классов имеют значащие имена, не abcd.
import random

class Warrior:
    def __init__(self, name, health=100, power=20):
        self.name = name
        self.health = health
        self.power = power

def duel(warrior_1, warrior_2):
    print('Дуэль началась:\n')
    while warrior_1.health > 0 and warrior_2.health > 0:
        hit = random.randint(1, 2)
        if hit == 1:
            hit = warrior_1
            warrior_2.health -= warrior_1.power
            print(f'{warrior_1.name}({warrior_1.health}) '
                  f'атаковал {warrior_2.name}({warrior_2.health}).')
        else:
            hit = warrior_2
            warrior_1.health -= warrior_2.power
            print(f'{warrior_2.name}({warrior_2.health}) '
                  f'атаковал {warrior_1.name}({warrior_1.health}).')
    print(f'\nПобеду одержал {hit.name}')

viking = Warrior('Викинг')
knight = Warrior('Рыцарь')

duel(viking, knight)