Найти - Пользователи
Полная версия: Помогите разобраться
Начало » Python для новичков » Помогите разобраться
1
DrunkenM
Только начал изучать программирование. Не смог найти ответ(

В общем задача следующая:

Есть класс Воин и Класс Рыцарь. У обоих жизней по 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!”)
Romissevd
__init__ это конструктор который вызывается при создании экземпляра, т.к. hel у тебя изначально больше 0, то is_alive присваивается True. Дальше ты отнимаешь hel. Теперь тебе нужно создать property (свойство), при обращении к которому ты будешь проверять сколько жизни у твоего воина и возвращать необходимы результат.
Приблизительно вот так:
 class Warrior():
    def __init__(self):
        self.health = 50
        self.attack = 5
    @property
    def is_alive(self):
        if self.health > 0:
            return True
        else:
            return False
P.S. Обрамляй код в теги возле (смайла выбирается)
DrunkenM
Romissevd
__init__ это конструктор который вызывается при создании экземпляра, т.к. hel у тебя изначально больше 0, то is_alive присваивается True. Дальше ты отнимаешь hel. Теперь тебе нужно создать property (свойство), при обращении к которому ты будешь проверять сколько жизни у твоего воина и возвращать необходимы результат.Приблизительно вот так:

Спасибо огромное!) всё работает) 2 дня был в поисках решения) В гугле все ответы слишком замудрённые(
Romissevd
Внимательно нужно задание читать, там уже сказано про свойство
Есть свойство класса is_alive, которое показывает, жив ли воин или рыцарь, или нет.


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB