我收到断言错误,我不知道为什么

时间:2016-09-15 01:31:57

标签: python-3.x

import random

class game:

    def __init__(self):
        self.hp = random.randint(1,20)
        self.dmg = random.randint(1,15)
        self.regn = random.randint(1,3)

        self.stab = 3-self.hp
    def player(self):
        print("Health")
        print(self.hp)
        print("Damage")
        print(self.dmg)
        print("Regen")
        print(self.regn)

    def Mob_1(self):
       hit = self.hp - 3

       if 1 == 1 :
           print("you were hit")
           hit

       self.mob1_hp=8
       self.mob1_dmg=4
       while self.mob1_hp <= 0:
            hit
            self.mob1_hp -= self.dmg
       print(self.mob1_hp)

    goblin = Mob_1('self')


    def day_1(self,goblin):
        print("\nIt day one")
        goblin

第一个函数工作正常player(self),但在尝试执行另一个函数时遇到断言错误。为了解释我为什么制造地精,我可以立刻调用整个功能(或者就是这样做)。特别是错误来自hit = self.hp - 3代码行。有关更多说明,请输入错误消息:

Traceback (most recent call last):
  line 3, in <module>
    class game:
  line 33, in game
    goblin = Mob_1('self')
line 20, in Mob_1
    hit = self.hp - 3
AttributeError: 'str' object has no attribute 'hp'

ps我对这个网站很陌生我过去曾在寻找帮助的问题,但我似乎无法找到解决问题的方法

1 个答案:

答案 0 :(得分:1)

goblin = Mob_1('self')没有任何意义。您正在直接在其正文中调用game对象的方法,但是传递字符串'self'而不是game类的实例。这将打破各种各样的事情。

我不确定如何修复它,因为你的代码没有多大意义,而且我真的不知道你想要做什么。如果你重命名了一些你正在创建的东西并重新组织它们,也许你能够更接近你想要的东西。目前你正试图在game类中做一些看起来不合适的事情。例如,您正在跟踪两组hp个统计数据,这些数据看起来更像是战斗角色的统计数据,而不是游戏本身的统计数据。

因此,我建议您创建一个game类来跟踪一个生物(玩家或敌人)的统计数据,而不是Creature类:

class Creature:
    def __init__(self, name, hp, damage, regen):
        self.name = name
        self.hp = hp
        self.damage = damage
        self.regen = regen

    def __str__(self):
        return "{} (Health: {}, Damage: {}, Regen: {})".format(self.name, self.hp,
                                                               self.dmg, self.regen)

玩家和怪物将是该类的实例(或者可能是子类的实例,如果您需要能够更多地定制它们)。你可以编写一个函数让它们中的两个相互对抗:

def fight(creature1, creature2):
    while creature1.hp > 0 and createure2.hp > 0:
        creature1.hp -= creature2.damage
        creature2.hp -= creature1.damage
        # do something with regen here?
        # report on damage?

    if creature1.hp < 0 and creature2.hp < 0:
        print("Both {} and {} have died".format(creature1.name, creature2.name))
    else:
        print("{} has died".format((creature1 if creature1.hp < 0
                                    else creature2).name.capitalize())

这样称呼:

player = Creature("the player",
                  random.randint(1,20),
                  random.randint(1,15),
                  random.randint(1,3))
goblin = Creature("the goblin", 8, 4, 0)

print("Battle between {} and {}:".format(player, goblin)) # uses __str__

fight(player, goblin)