Python与列表和循环的困难

时间:2014-12-15 02:59:04

标签: python list while-loop

我有这个代码给了我奇怪的错误。下面你应该看到该代码。 首先我有我的CombatEngine,基本上只是模拟玩家和敌人列表之间的射击。在TheBridge类中,我创建了一个combatengine的实例并在构造函数中给它一个敌人列表(我主要在c#中编码)但是当我在引擎上运行战斗方法时会返回错误

AttributeError:类型对象'GothonTrooper'没有属性'health'

我真的不明白为GothonTrooper类明确定义了健康状况是怎么可能的。我认为当从randint函数中找到单个敌人时,战斗方法本身会发生错误。

class TheBridge(Scene):
    def __init__(self):
        enemies = [GothonTrooper(), GothonTrooper(), GothonTrooper(), GothonTrooper, GothonTrooper()]
        self.the_bridge_combat = CombatEngine(enemies)

        ...


class CombatEngine(object):
    def __init__(self, enemies):
        self.enemies = enemies

    while len(self.enemies) != 0:       
        enemy = self.enemies[randint(0, len(self.enemies)-1)] 
        print "You shoot at the Gothon." 
        hit_or_miss = PLAYER.attack() 
        if hit_or_miss >= 5:
            print "The shot hits the Gothon!"
            enemy.health -= 10
            print "The Gothon is down to %s health" % enemy.health
        ...


class GothonTrooper(Humanoid):
    def __init__(self):
        self.health = 100

    def attack(self):
        return randint(1,10)

2 个答案:

答案 0 :(得分:1)

假设您在代码中提供的内容不是拼写错误,则()列表中某个GothonTrooper对象中缺少的enemies是罪魁祸首。没有它,该对象永远不会被实例化。因此,该项目还没有health属性。

为了更好地说明问题源自何处,下面的示例使用dir方法返回该对象上可用的属性,(注意第二个health上缺少print线)

>>> class Trooper():
    def __init__(self):
        self.health = "90%"


>>> enemies = [Trooper(), Trooper]
>>> for enemy in enemies:
       print(dir(enemy))


[..., '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'health']
[..., '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

答案 1 :(得分:1)

抱歉,我的英语很差。看看你的定义,第四个GothonTrooper没有(),以便 AttributeError:类型对象GothonTrooper没有属性health

enemies = [GothonTrooper(), GothonTrooper(), GothonTrooper(), GothonTrooper, GothonTrooper()]