python - 随机列表生成不起作用

标签 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()打印出一个包含两个随机怪物的列表,但它总是打印敌人:[]。代码中没有错误,在尝试排除故障 10 分钟后,我决定查阅他的网站,但没有任何结果。预先感谢您提供的任何帮助。

最佳答案

正如 Oliver 指出的,您总是得到空 entities 数组的原因是因为 self.entities 设置为 randList([goblin, dwarf, slime, naga, troll, beholder], 1) generate 中(我假设全局变量 enemiesBeat 在您的测试中小于 500)。

在您的 randList 函数中,您有一个离一错误,我在注释中提到了这一点,这意味着生成的列表将包含比 num 指定的项目少一个的项目>。当您尝试为 self.entities 生成单例列表 (num = 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()

关于python - 随机列表生成不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528505/

相关文章:

c# - 如何使用来自单列的数据行值填充 List<string>

python - 如何打开函数参数提供的文件(函数内部)

python - 对于unittest.TestCase子类,run方法执行测试用例时无法获取class属性

r - 如何获取多维列表的最小值?

python - 在 Python 3 中返回整数中最低有效位集的位置的最快方法是什么?

Python 项目组织(特别是外部库)

python - 使用 pandas.to_datetime 时只保留日期部分

python - 按列对csv进行排序

python - Pandas 旋转数据框,重复行

list - 你如何在 Racket 中创建一个空的可变列表?