2017-10-10 164 views
0

我想創建一個數學遊戲,它隨機從我的列表中選擇一個問題並給出相應的答案。目前,我可以將問題隨機發現,但它從列表中依次給出答案,而不是與問題相對應的答案。 我如何得到答案是正確的隨機問題。 這是我的代碼。隨機選擇一個公式,並從列表中回答 - PYTHON

import random 

counter = 0 
score = 0 
incorrect = 0 

name=input("What is your name?") 
print("Hi",name,",welcome to your math quiz!") 

questions = ["10*2","4-2","6+12","6*4","12-5","6+54","1*0","3-6","4+0","65-9"] 
answers=["20","2","18","24",'7','60','0','-3','4','56'] 

idx_questions = list(enumerate(questions)) 
idx_answers = list(enumerate(answers)) 

random.shuffle(idx_questions) 

for idxq, question in idx_questions: 
    print(question) 
    ans = input("What is the answer? ") 
    for idxa, answer in idx_answers: 
     if idxq == idxa and ans == answer: 
      print("Correct") 
      score=score+1 
      print("Correct Answers=",score) 
      print("Incorrect Answers=",incorrect) 

     elif idxq == idxa and ans != answer: 
      print("Incorrect", answers) 
      incorrect=incorrect+1 
      print("Correct Answers=",score) 
      print("Incorrect Answers=",incorrect) 

print("End of quiz") 
print(name,"your score is",score,"out of 10") 
print(score*10,"%") 
+2

請編輯您的文章並添加實際的代碼,而不是鏈接屏幕截圖。這有助於用戶閱讀和理解你的代碼,並允許複製它進行測試。 – Hexaholic

回答

0
import random 

counter = 0 
score = 0 
incorrect = 0 

questions = ["10*2","4-2","6+12","6*4"] 
answers=["20","2","18","24"] 

idx_questions = list(enumerate(questions)) 
idx_answers = list(enumerate(answers)) 

random.shuffle(idx_questions) 

for idxq, question in idx_questions: 
    print(question) 
    ans = input("What is the answer? ") 
    for idxa, answer in idx_answers: 
     if idxq == idxa and ans == answer: 
      print("Correct") 
     elif idxq == idxa and ans != answer: 
      print("Incorrect") 
+0

你可以請進一步解釋如何做到這一點?我是python新手 – Jane

+0

@Jane我用一些代碼編輯了我的答案。覈實。 – nachmr

+0

謝謝!這實際上是完美的。我現在的問題是,當答案不正確時,我想顯示正確的答案。但是目前,它顯示了整個答案列表。你有什麼建議嗎?我在當前代碼中添加了我的問題 – Jane

-1

與您的代碼使用random.shuffle()功能的問題。

它以隨機方式將您的問題清單隨機混合(基本上是在列表中的元素之間進行交換),因此特定索引的相應答案與問題列表不匹配。

這個答案應該可以很清楚的:https://stackoverflow.com/a/976918/8750461

相反,你可能想使用q = random.choice(questions)得到一個隨機抽題,然後用answers[questions.index(q)]讓你對應的答案。

可能比這更優雅的解決方案,這只是一個快速的答案。

+0

當我這樣做時,它會從列表中生成一個隨機答案,並說每個答案應該是針對3 – Jane

0

問題是你洗牌問題列表,而答案列表保持不變。所以,現在的答案和問題,有不同的立場,他們不匹配。相反,您應該在該索引處生成隨機索引並打印問題。

random_int = random.randint(0, len(questions)-1) 
print(question[random_int]) 

當然,你應該建立一些機制,以防止相同的答案彈出兩次。一種方法是刪除使用過的問題。

del questions[random_int] 
del answers[random_int] 
+0

這很好用!謝謝。我遇到的唯一問題是,在9個問題後,列表索引超出範圍,即使我的計數器爲10,而random.randint爲(0,10) – Jane

+0

如果列表爲len == 10,則沒有索引10 。它是從0到9.所以你的random.randint也應該是(0,9),如果你刪除使用的答案,它會減小。 –