2016-12-07 24 views
1

私は教師のためにクイズを出しています。クイズは最後に50以上の質問があります。私はrandom.sampleについて見つけて、それを私のコードに実装しましたが、それは効果がないようです。私がrandom.sampleを使っていても、たまに呼び出された後に質問が繰り返されることがあります。私はPythonにはかなり新しく、私はこれによって唖然としています。辞書にrandom.sampleを使用して問題が発生しました

import random 
# Stores Question, choices and answers 
questions = { 
     'What should you do when links appear to be broken when using the Check Links Site wide command?': # Q 1 
     [' A) Test the link in a browser \n B) Test the link in live view \n C) Check the File path \n D) View Source Code', 'A'], 

     'Which 3 combinations of factors encompass usability?': # Q 2 
     [' A) Amount of ads,Load time,Window Size \n B) Load Time,Ease of navigation,Efficiency of use \n C) Server download time, \n D) proper Navigation', 'B'], 

     'Which line of html code describes a link to an absolute url using the <A> tag and href attribute?': # Q 3 
     [' A) <A herd = "http://www.acmetoon.org">Acme Toons!</a>, \n B) Herf = "http://www.acmetoon.org">Acme Toons!</a>,' 
      '\n C) <A herf = "http://www.acmetoon.org">Acme Toons!</a> \n D) <A herf > = "http://www.acmetoon.org">Acme Toons!</a>', 'A'] 


     } 


print('Dreamweaver Practice test V 1.0') 


def pick_question(): 
     wrong_answers = 0 
     while True: 
      print() 
      # Uses sample to get an item off the dict 
      sample_question = random.sample(list(questions.keys()), 3) 
      # Converts the list to a single word ['hello'] -> hello 
      # So no errors complaining about it being it list popup 
      new = sample_question[0] 
      # Print question and choices 
      print(new) 
      print(questions[new][0]) 
      print() 
      user_answer = input('Enter Answer: ') 
      print() 
      # If the user choice matches the answer 
      if user_answer == questions[new][1]: 
       print('Correct') 
       print() 
       print('----Next Question----') 
       print() 
      elif wrong_answers == 10: 
       print('Game Over') 
       break 
      else: 
       print('Wrong') 
       print('Correct letter was ' + questions[new][1]) 
       wrong_answers += 1 
       print('Amount wrong ' + str(wrong_answers) + '/10') 
       print() 
       print('----Next Question----') 
       print() 


pick_question() 
+0

random.choice –

+1

を毎回使用してみてくださいあなたは 'while True:'ループを回り、ランダムなサンプルを使って3つのランダムな質問を選んでいます。あなたは次にそれらの最初の質問をします。3.次に質問をするときは、3の新しいサンプルをとり、最初のサンプルを使います。 3つの質問をして停止するつもりですか? –

+0

@SimeonAleksov既にrandom.choiceを使ってみました。それが私の最初の考えでした。だから私はrandom.sampleに切り替えました。 – PrQ

答えて

1

はとの質問のリストをランダムrandom.shuffleその後、同じように、通常の反復最初:

... 
def quick_questions(): 
    wrong_answers = 0 
    question_keys = list(questions.keys()) 
    random.shuffle(question_keys) # questions is now in a random order 
    for question_key in question_keys: 
     new = questions[question_key] 
     print() 
     # Print question and choices 
     print(new) 
     ... 
+0

nobieの質問には申し訳ありませんが、これをテストするために私のコードに実装するのはどこですか? – PrQ

+0

私はシャッフルに疲れて、私はエラーが発生しました。シャッフルx [i]、x [j] = x [j]、x [i] KeyError:2 – PrQ

+0

@ nk001おっと、すみません。 「疑問」が「辞言」であることを認識していなかった。私は私の答えを更新しました。 – Jack

0

あなたのコードは本当になぜ期待通りに動作しないより、やっていることを理解するのに役立つことがあり、次の:

import random 
# Stores Question, choices and answers 
questions = {'key1': ['text1','ans1'], 'key2': ['text2','ans2'], 'key3':['text3','ans3']} 

for i in range (0,10): 
    sample_question = random.sample(list(questions.keys()), 3) 
    print(sample_question) 

サンプル出力は、収率できる:

['key2', 'key3', 'key1'] 
['key3', 'key1', 'key2'] 
['key3', 'key1', 'key2'] 
['key3', 'key1', 'key2'] 
['key1', 'key2', 'key3'] 
['key3', 'key2', 'key1'] 
['key1', 'key3', 'key2'] 
['key3', 'key2', 'key1'] 
['key1', 'key3', 'key2'] 
['key1', 'key2', 'key3'] 
['key3', 'key1', 'key2'] 

つまり、効果的に質問をランダムに選択しますが、質問リストから質問を削除することはできません。そういうわけであなたは繰り返します。それは、カードのデッキをシャッフルして、それらの1つを指してから、もう一度シャッフルして、もう1つを指し示すようなものです。デッキから何も取り除かずに。

(私はこれが本当に「答え」を提供していませんが、知っているあなたはあなたのコードはbehaving.Jackの答えはかなり良いではありませんでした理由を理解したいように見えた)

関連する問題