Найти - Пользователи
Полная версия: Не работает функция
Начало » Python для новичков » Не работает функция
1
AKubax
В комментариях к коду все написано(читать по нумерации), но все же:
не создается новый объект или создается неправильно
class Player:
        maxHP = 800.0
        HP = maxHP
        exp = 0.0
        nextlvl = 100.0
        attack = 75.0
        def eattack(self):   
                enemy.HP -= self.attack
class SDragon:
        maxHP = 375.0
        HP = 375.0
        attack = 50.0
        dieexp = 450.0
        def die(self):
                player.exp += self.dieexp
                isEnemy = False       #2.)Сама функция, которая также должна менять значение переменной isEnemy на False
                player.HP = player.HP + (self.maxHP * 0.35)
        def pattack(self):   
                player.HP = player.HP - self.attack
player = Player()
isEnemy = False  
while True:
    if isEnemy == False:        #3.)Условие, при котором должен создаваться новый объект, но он не создается или создается неправильно(Результат программы в приложеном файле)
        enemy = SDragon()
        isEnemy = True
    enemy.pattack()    
    player.eattack()   
    print("You've attacked enemy!")
    print("Enemy has attacked you!")
    print("Your HP is", player.HP, "                                     Enemy's HP is", enemy.HP)
    if enemy.HP <= 0:
            enemy.die()     #1.)Вызывает функцию die
            print("You won this enemy! Let`s see next one!")
    x = input("Press ENTER button to continue")
    
JOHN_16
Если вы думаете что применили ООП, то вы ошибаетесь. Я даже не знаю с чего начать, что бы описать, где вы ошибаетесь. Везде.
Для начала понять что есть объект класса, а что есть экземпляр класса. Это самая базовая ошибка.
НУ а так, читать книги, раздел ООП
Kon52
JOHN_16
Я даже не знаю с чего начать, что бы описать, где вы ошибаетесь.
Думаю, многие будут признательны, если всё- таки решитесь.
J.R.
.
AKubax
J.R.
AKubaxПосмотрите на свой класс Player внимательно. А именно на метод eattack этого класса. В этом методе вы манипулируете некой переменной enemy.HP, но при этом вы не передаёте эту переменную данному методу в качестве параметра. То есть enemy.HP внутри класса Player - глобальная переменная. Не есть гуд, с таким подходом будете иметь бажный код.То же самое касается класса SDragon, в нем переменные isEnemy и player.HP тоже глобальные. А соответствующие методы ничего не возвращают. Это тупик.Вам стоит научиться передавать свои желаемые переменные методам класса в качестве параметров, а методы, соответственно, должны возвращать искомые значения. И в теле своего модуля вы должны манипулировать возвращенными вашими методами значениями. Тогда может всё получиться…
А как передать в качестве параметра переменную? Что - то не могу понять…
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