随机列表生成无效

时间:2017-01-08 01:29:34

标签: python list python-3.x random python-3.5

我正在开发一款游戏,我需要为列表随机生成类。我使用自制函数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分钟的故障排除后,我决定咨询他的网络,结果没有结果。提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:3)

正如Oliver指出的那样,你得到一个空的entities数组的原因是因为self.entitiesrandList([goblin, dwarf, slime, naga, troll, beholder], 1)内设置为generate(我假设全局变量{您的测试中{1}}小于500。

enemiesBeat函数中,我在评论中提到了一个错误,这意味着生成的列表将包含的项目少于randList指定的项目。当您尝试为numself.entities = 1)生成单例列表时,您实际上会将其分配给空列表。

您可以通过将num功能中的for i in range(num - 1)更改为for i in range(num)来解决此问题。

顺便说一句,我认为您不需要将randListentities作为参数传递给floor构造函数,因为它似乎没有任何效果。相反,您可以修改类定义:

roomParent

并像这样实例化:

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

答案 1 :(得分:2)

使用the random.sample library function.

此外,您可能需要重新考虑大小写...对于函数名称,snake_case优先于inCaps。