Только начал изучать программирование. Не смог найти ответ(
В общем задача следующая:
Есть класс Воин и Класс Рыцарь. У обоих жизней по hel=50, атака у воина dam=5, у рыцаря 7. Есть свойство класса is_alive, которое показывает, жив ли воин или рыцарь, или нет.
Функция fight имеет 2 параметра и определяет, кто победит. Если 1-ый, то True, если 2-ой, то False. Бьют друг друга по очереди, начинает 1-ый, с каждым ударом здоровье уменьшается на dam. дерутся до тех пор, пока здоровье кого либо не станет <=0.
Так вот, проблема в том, что после создания класса chuck и bruce, функция fight показывает всё правильно, также показывает правильно, если вывести оставшееся здоровье у того или иного (chuck.hel или bruce.hel). Но после вывода chuck.is_alive или bruce.is_alive всегда возвращает True, хотя после fight(chuck,bruce) должно быть bruce.is_alive False. Как быть? Сорян за тупой вопрос) Я новичок)
class Warrior:
dam=5
hel=50
def __init__(self):
if (Warrior.hel)>0:
self.is_alive=True
print(Warrior.hel)
else:
self.is_alive=False
pass
class Knight(Warrior):
dam=7
pass
def fight(unit_1, unit_2):
max=50
heal=50
while max>0:
unit_2.hel=unit_2.hel-unit_1.dam
if unit_2.hel<=0:
return True
unit_1.hel=unit_1.hel-unit_2.dam
if unit_1.hel<=0:
return False
if unit_2.hel<unit_1.hel:
max=unit_2.hel
else:
max=unit_1.hel
return 0
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()
print(carl.dam)
print(fight(chuck, bruce))
print(bruce.hel)
print(bruce.is_alive)
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!”)