2016-12-10 8 views
0

私はこの言語をテストするための小さなプログラム(quizz)を作っていますが、私は関数に詰まっています それでは説明しましょう 私のデータベースから値を受け取って、5すべての質問について、ユーザーの答えを入力し、最後の質問に達するまで次の質問に移動します。選択肢()2つの固定引数が、3は、この機能に関する任意のヘルプをrandom.choiceのPythonエラー

を与えられた取ります 私が持っているコードは、これまで

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を受けているのですか?

答えて

0

random.choiceは1つのパラメータのみをとります。あなたのコードで

random.choice(l,5) 

あなたは何をすべきですか? "空でないシーケンスseqからランダム要素を返します。seqが空の場合、IndexErrorを発生させます。"

このように、1つのパラメータのみを使用するように行を変更し、後で使用するために値を割り当てます(別のコードを調整します)。

1
それは同じように、あなたはあなたのリストから一つのランダムに選択された項目以上を返すことができますので、あなたが、代わりに random.sampleを使用することにしたいように見えます

random.choice()のドキュメントから

>>> import random 
>>> myList = range(100) 
>>> winners = random.sample(myList, 5) 
>>> print winners 
[79, 10, 32, 98, 82] 
>>> 
+0

これは彼が何をしようとしていたものに、より論理的です。そして、彼が尋ねた以上に答えたので、それに答える代わりにそれを修正するkudozだと思います。 – TigOldBitties

1

あなたが持っている:

random.choice(seq)

Return a random element from the non-empty sequence seq. If seq is empty, raises 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] 
関連する問題