【发布时间】:2017-05-22 13:29:43
【问题描述】:
我正在开发一个需要为列表随机生成类的游戏。我使用自制函数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([], [])
您知道,goblin、dwarf、slimeball 等是在代码前面定义的。我不认为他们与这个问题有任何关系。我稍后像这样生成房间:
def main():
room.generate()
print("Enemies: " + str(room.entities))
main()
我希望它从room.generate() 打印出一个包含两个随机怪物的列表,但它总是打印Enemies: []。代码没有错误,在尝试排错 10 分钟后,我决定咨询他的网站,但没有任何结果。提前感谢您提供的任何帮助。
【问题讨论】:
-
为什么是
for i in range(num - 1)而不是for i in range(num)? -
另外你为什么将
entities和floor作为参数传递给roomParent的构造函数?看起来您只需要在构造函数中将它们初始化为空列表,因为它们无论如何都会在generate方法中被分配。 -
正如@Tagc 所说,您使用
range(num - 1)而不是range(num)。在您的示例代码中,您将1作为randList的第二个参数传递,因此您的for 循环将是for i in range(1 - 1),它不会做任何事情。
标签: python list python-3.x random python-3.5