我现在花了一两个小时来共同解决这个问题,但没有得到任何结果。在我的程序中,当一只保卫动物被“杀死”时,应该将其从注册表中删除,但是无论我做什么,我似乎都无法做到这一点。在这种情况下,如果我要启动一个猎人和一个水牛城,然后用猎人Attack()水牛城,那该水牛城应该被杀死并从它的类注册表中删除,但是我无法获得python从注册表中选择该特定的水牛城。] >
感谢您的任何帮助。
class IterRegistry(type): def __iter__(cls): return iter(cls._registry) class Buffalo(object): __metaclass__ = IterRegistry _registry = [] hp = 1 price = 150 attacks = 0 regeneration = 2 def __init__(self, name): self._registry.append(self) self.name = name def createBuffalo(): for i in range(len(Buffalo._registry),len(Buffalo._registry)+1): varname = ("b" + str(i)) globals()[varname] = Buffalo("b" + str(i)) class Wolf: __metaclass__ = IterRegistry _registry = [] hp = 1 price = 0 attacks = 2 regeneration = 1.5 def __init__(self, name): self._registry.append(self) self.name = name def createWolf(): for i in range(len(Wolf._registry),len(Wolf._registry)+1): varname = ("w" + str(i)) globals()[varname] = Wolf("w" + str(i)) class Hunter: __metaclass__ = IterRegistry _registry = [] hp = 2 price = 0 attacks = 1 regeneration = 0 balance = 0 def __init__(self, name): self._registry.append(self) self.name = name def createHunter(): for i in range(len(Hunter._registry),len(Hunter._registry)+1): varname = ("h" + str(i)) globals()[varname] = Hunter("h" + str(i)) def attack(attacker, target): if attacker.attacks >= 1: target.hp -= 1 if target.hp == 0: if type(attacker) == Hunter: attacker.balance += 150 print(target) if type(target) == Wolf: del Wolf._registry[[n for n in Wolf._registry if n == target]] if type(target) == Hunter: del Hunter._registry[[n for n in Hunter._registry if n == target]] if type(target) == Buffalo: del Buffalo._registry[[n for n in Hunter._registry if n == target]]
另外,请注意,我有双括号的原因是因为单括号括起来的语法不正确,但双精度语法没问题。
如果需要更多代码,请在下面的评论中提问(我没有提供所有代码,但应该足够了。)>
我现在花了一两个小时来共同解决这个问题,但没有得到任何结果。在我的程序中,当保卫动物被“杀死”时,应将其从注册表中删除,...
您要解决的问题是由于尝试将列表用作要从列表中删除的索引而引起的
[n for n in Wolf._registry if n == target]