class Warrior: def __init__(self): self.health = 50 self.attack = 5 self.is_alive = True def hit(self, other_unit) -> bool: other_unit.health -= self.attack other_unit.is_alive = other_unit.health > 0 return other_unit.is_alive class Knight(Warrior): def __init__(self): super().__init__() self.attack = 7 def fight(unit_1, unit_2): while unit_1.is_alive and unit_2.is_alive: if not unit_1.hit(unit_2): return True if not unit_2.hit(unit_1): return False if __name__ == '__main__': # These "asserts" using only for self-checking and not necessary for auto-testing chuck = Warrior() bruce = Warrior() carl = Knight() dave = Warrior() mark = Warrior() assert fight(chuck, bruce) == True assert fight(dave, carl) == False assert chuck.is_alive == True assert bruce.is_alive == False assert carl.is_alive == True assert dave.is_alive == False assert fight(carl, mark) == False assert carl.is_alive == False print("Coding complete? Let's try tests!")