无法在列表中选择对象并将其删除

问题描述 投票:0回答:1

我现在花了一两个小时来共同解决这个问题,但没有得到任何结果。在我的程序中,当一只保卫动物被“杀死”时,应该将其从注册表中删除,但是无论我做什么,我似乎都无法做到这一点。在这种情况下,如果我要启动一个猎人和一个水牛城,然后用猎人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]]

另外,请注意,我有双括号的原因是因为单括号括起来的语法不正确,但双精度语法没问题。

如果需要更多代码,请在下面的评论中提问(我没有提供所有代码,但应该足够了。)>

我现在花了一两个小时来共同解决这个问题,但没有得到任何结果。在我的程序中,当保卫动物被“杀死”时,应将其从注册表中删除,...

python del
1个回答
0
投票

您要解决的问题是由于尝试将列表用作要从列表中删除的索引而引起的

[n for n in Wolf._registry if n == target]
© www.soinside.com 2019 - 2024. All rights reserved.