请记住,在这种情况下,数组中的函数,即Question1(), Question2(), Question3(), Question4(), Question5()
将首先被调用。这些评估的结果将被指定为questionList
的元素。
如果你想拥有的功能本身作为一个数组的元素,你需要删除括号:
random.shuffle(questionList)
print(questionList.pop()())
:
questionList = [Question1, Question2, Question3, Question4, Question5]
然后你原来的代码将与一个小的修改工作
请注意额外的一对括号,并且newList
变量已经消失。
这里发生了以下情况。当Python在标识符后面看到()
时,它会立即尝试调用该标识符。所以基本Question1()
将得到评估,其结果被分配为questionList
的第一个元素。第二个为Question2()
,依此类推。但是,如果省略()
,则函数本身将被分配为questionList
的元素。然后你只需要调用“弹出”功能,这就是pop()
之后额外的()
。
正如John Gordon在他的评论中提到的,random.shuffle(questionList)
修改了questionList
,并返回None
。当你喜欢写东西
newList = random.shuffle(questionList)
返回的值(即None
)实际上是分配给newList
。因此,在这种情况下newList
的值将只是None
。相反,你应该在洗牌后使用questionList
。这就是为什么你需要删除newList
。
然而,你仍可以通过使用random.choice()
而不是使用random.shuffle()
然后pop()
,正如我在原来的答复建议简化代码:
while 1:
questionList = [Question1, Question2, Question3, Question4, Question5]
print(random.choice(questionList)())
print("Checking question list\n")
祝你好运!
'random.shuffle()'不返回一个新的列表;它随机化现有的列表。 –
当在代码中提出有关错误的问题时,请描述预期的行为以及实际发生的情况。 – user2357112