如何在满足条件后删除列表中对象的实例?

2024-10-01 07:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个基于文本的游戏作为练习。我有GenerateEnemies函数,它可以创建一些随机的地精并将它们放在当前的敌人列表中。你知道吗

使用攻击功能,我可以使英雄攻击当前敌人列表中的一个地精,降低它的生命值。你知道吗

我想要的是当敌人的生命值低于0时,它就会死亡。我加入了例外“如果自身.HP<;0:del(self)”但这不起作用。你知道吗

实现预期行为的正确语法是什么?另外,如果删除了对象,那么对象中的内容会发生什么变化?是所有的东西都在移动,还是对象所在的索引中什么都没有?你知道吗

import random
CurrentEnemy = []

class Monster(object):

    def __init__(self, Name, HP, Damage):
        self.Name = Name
        self.HP = HP
        self.Damage = Damage

    **if self.HP < 0:
        del(self)**

class Hero(object):
    def __init__(self, Name, HP, Damage):
        self.Name = Name
        self.HP = HP
        self.Damage = Damage

def GenerateEnemies():
    NumberEnemies = random.randint(0,5)
    del CurrentEnemy[:]

    i=0
    while i < (NumberEnemies+1):
        TempMonster = Monster("Goblin", random.randint(15,20), random.randint(1,3))
        CurrentEnemy.append(TempMonster)
        i = i + 1

    i=0
    while i in range(0, len(CurrentEnemy)):
        print("Goblin " + str(i) + " HP: " + str(CurrentEnemy[i].HP))
        print("Goblin " + str(i) + " Damage: " + str(CurrentEnemy[i].Damage))
        i = i + 1


def GenerateHero(HeroName, HeroHP, HeroDamage):
    return Hero(HeroName, HeroHP, HeroDamage)

MyHero = GenerateHero("Bob", 100, 10)

def Attack(Attacker, Defender):
    Defender.HP = Defender.HP - Attacker.Damage

Tags: 对象nameselfdefrandomhpdefenderrandint
1条回答
网友
1楼 · 发布于 2024-10-01 07:45:31

从列表中删除要花费很大,请改用set()。它有各种实用函数来删除对象,如s.add()和s.discard()。你知道吗

关于你的问题:

del(self)只删除类中对局部变量self的引用,而不是整个对象。你知道吗

如果你想删除这个对象,你必须从你存储它的列表容器中删除它。你知道吗

相关问题 更多 >