随机列表生成不起作用

2024-10-01 05:01:19 发布

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

我正在做一个游戏,我需要随机生成一个列表类。我使用一个自制的函数randList来实现这一点。该函数的代码如下所示:

def randList(options, num): #RANDOMLY SELECTS NUM ITEMS FROM LIST OPTIONS
returnVal = [] #CREATE A LIST THAT IT RETURNS
for i in range(num - 1): #FOR DESIRED NUMBER OF RETURN ITEMS
    val = r.choice(options) #RANDOMLY SELECT ITEM FROM OPTIONS
    returnVal.append(val) #ADD THAT TO RETURNVAL
    options.remove(val) #REMOVE IT FROM OPTIONS.
return returnVal #RETURN GENERATED LIST

我用它在一个房间里随机生成怪物和物品,比如:

class roomParent: #ROOM CHARACTER FINDS
    def __init__(self, entities, floor): #INIT WITH ENEMIES IN ROOM, ITEMS ON FLOOR
        self.entities = entities #ENEMIES THERE ARE
        self.floor = floor #ON FLOOR THERE IS
    def generate(self):
        global enemiesBeat
        if enemiesBeat >= 500:
            self.entities = [dragon]
        else:
            self.entities = randList([goblin, dwarf, slime, naga, troll, beholder], 1)
        self.floor = randList([scrap, scrap, scrap, fireJar, ambrosia, sword, spearhead, armor, potion, slimeball], r.randint(0, 3))

room = roomParent([], [])

正如您所知,goblindwarfslimeball等都是在代码前面定义的。我认为他们与这个问题无关。我稍后生成房间,如下所示:

def main():
    room.generate()
    print("Enemies: " + str(room.entities))
main()

我希望它打印出一个列表,其中有两个随机的怪物来自room.generate(),但它总是打印Enemies: []。代码中没有任何错误,在尝试了10分钟的故障排除之后,我决定向web咨询,结果没有任何结果。提前感谢您的帮助。你知道吗


Tags: 代码fromselfdefitemsvalgeneratelist
2条回答

正如Oliver指出的,之所以总是得到一个空的entities数组是因为self.entitiesgenerate内被设置为randList([goblin, dwarf, slime, naga, troll, beholder], 1)(我假设在测试中全局变量enemiesBeat小于500)。你知道吗

randList函数中有一个off by one错误,我在注释中提到了这个错误,这意味着生成的列表包含的项将比num指定的项少一个。当您试图为self.entitiesnum=1)生成一个单例列表时,实际上会将它分配给一个空列表。你知道吗

您可以通过在randList函数中将for i in range(num - 1)更改为for i in range(num)来更正此问题。你知道吗


另外,我认为不需要将entitiesfloor作为参数传递给roomParent构造函数,因为它似乎没有任何效果。相反,您可以修改类定义:

class roomParent(object):
    def __init__(self):
        self.entities = []
        self.floor = []
    ...

将其实例化如下:

room = roomParent()

使用the random.sample library function.

另外,你可能需要重新考虑你的大小写…对于函数名,snake\u大小写比inCaps更合适。你知道吗

相关问题 更多 >