我正在制作一个小程序(quizz)来测试这种语言而且我陷入了一个功能 所以让我解释一下 我想从我的数据库中接收值,然后只使用其中的5个,因此对于每个问题,用户都会回答,然后转到下一个问题,直到到达最后一个问题。 我到目前为止的代码是
def escolhaFinal(id_tema, id_tipo):
cur = conn.cursor()
cur.execute("SELECT question,op1,op2,op3,op4,correto FROM questions where id_tema = %s and id_grau = %s", (id_tema,id_tipo))
data = cur.fetchall()
l = list(data)
random.choice(l,5)
for row in l:
print(l)
cur.close()
conn.close()
但是我收到了这个错误 TypeError:choice()需要2个位置参数但是3个被赋予
有关此功能的任何帮助吗?
答案 0 :(得分:1)
您似乎希望使用random.sample
,因为这样您就可以从列表中返回多个随机选择的项目,例如:
>>> import random
>>> myList = range(100)
>>> winners = random.sample(myList, 5)
>>> print winners
[79, 10, 32, 98, 82]
>>>
答案 1 :(得分:1)
来自random.choice()
的文档:
random.choice(SEQ)
从非空序列中返回一个随机元素 起。如果seq为空,则引发IndexError。
要选择多个元素,您可以使用list comprehension,如下所示:
[random.choice(l) for i in range(5)]
或random.sample()
选择唯一元素:
random.sample(l, 5)
<强>输出:强>
>>> import random
>>>
>>> l = [1, 2, 3, 4, 5]
>>> random.sample(l, 3) # unique elements
[4, 2, 5]
>>>
>>> [random.choice(l) for i in range(3)] # Note that we have 3 twice!
[3, 5, 3]
答案 2 :(得分:0)
random.choice只需要1个参数。在你的代码中
random.choice(l,5)
5应该做什么?文档说明了选择:“从非空序列seq返回一个随机元素。如果seq为空,则引发IndexError。”
所以更改该行只使用1个参数并指定值以便以后使用它(也就是调整代码的其余部分)。