Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2018 14:53:40

DrunkenM
Зарегистрирован: 2018-11-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться

Только начал изучать программирование. Не смог найти ответ(

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

Есть класс Воин и Класс Рыцарь. У обоих жизней по 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!”)

Офлайн

#2 Ноя. 2, 2018 15:10:33

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите разобраться

__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. Обрамляй код в теги возле (смайла выбирается)

Офлайн

#3 Ноя. 2, 2018 15:17:43

DrunkenM
Зарегистрирован: 2018-11-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться

Romissevd
__init__ это конструктор который вызывается при создании экземпляра, т.к. hel у тебя изначально больше 0, то is_alive присваивается True. Дальше ты отнимаешь hel. Теперь тебе нужно создать property (свойство), при обращении к которому ты будешь проверять сколько жизни у твоего воина и возвращать необходимы результат.Приблизительно вот так:

Спасибо огромное!) всё работает) 2 дня был в поисках решения) В гугле все ответы слишком замудрённые(

Офлайн

#4 Ноя. 2, 2018 15:20:46

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите разобраться

Внимательно нужно задание читать, там уже сказано про свойство
Есть свойство класса is_alive, которое показывает, жив ли воин или рыцарь, или нет.


Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version