2017-04-05 13 views
0

ランダム方程式を使ってPythonで数学クイズを作成する同じことを二度尋ねるのを止める方法はわかりません。
プログラムは、それぞれが乱数を使用して、加算、減算、または掛け算のリストから10の質問を求めます。私は10の質問を無作為にすることに成功しましたが、同じ2つの数字を2回選ぶのを止める方法はわかりません。たとえば、1つの質問に対して1 + 3が選択されますが、同じ質問が複数回繰り返されます。コードは次のとおりです。同じことを二度尋ねるのを止めるプログラムですか?

import random 
#Asks for name 
name = input("What's your name?") 
#Stops user from entering invalid input when entering their class 
classchoices = ["A","B","C"] 
classname = input("What class are you in?") 
while classname not in classchoices: 
    classname = input("Not a valid class, try again:") 

print(name, ",", classname) 
print("Begin quiz!") 

questions = 0 


def add(a,b): 
    addQ = int(input(str(a) + "+" + str(b) + "=")) 
    result = int(int(a) + int(b)) 
    if addQ != result: 
     print ("Incorrect!", result) 
    else: 
     print("Correct") 

a = random.randint(1,12) 
b = random.randint(1,12) 



def multiply(a,b): 
    multQ = int(input(str(c) + "X" + str(d) + "=")) 
    results = int(int(c) * int(d)) 
    if multQ != results: 
     print ("Incorrect! The answer is", results) 
    else: 
     print("Correct") 

c = random.randint(1,12) 
d = random.randint(1,12) 

def subtract(a,b): 
    subQ = int(input(str(e) + "-" + str(f) + "=")) 
    resultss = int(int(e) - int(f)) 
    if subQ != resultss: 
     print ("Incorrect! The answer is", resultss) 
    else: 
     print("Correct") 

e = random.randint(1,12) 
f = random.randint(1,12) 


while questions in range(10): 
    Qlist = [add, subtract, multiply] 
    random.choice(Qlist)(a,b) 
    questions += 1 
if questions == 10: 
    print ("End of quiz") 

ご協力いただきありがとうございます。 、あなたのadd関数は常に常にcdを使用しますabmultiplyを使用します。ここで

答えて

1

問題は、プログラムの開始時に乱数を生成しますが、彼らに質問がされるたびに再生成されていないということですsubtractはそれぞれの計算に常にefを使用しますが、その値は決して変更されません。また

あなたがちょうどそれらを無視して、入力されたパラメータをメモすることなく、それぞれc, de, fを使用しているとして、あなたが入力されたパラメータはmultiplysubtractのための無価値です。

これらの問題をすべて解決するには、数字のランダム生成をwhileループ内に置き、関数が正しい入力パラメータを計算に使用させるようにします。

さらに、whileの反復は少し冗長です。単純なfor questions in range(10)は余分なビットなしでははるかに簡単です。したがって、questions変数は役に立たない。

これを念頭に置いて、書き直したコードをここに示します。

import random 
#Asks for name 
name = input("What's your name?") 
#Stops user from entering invalid input when entering their class 
classchoices = ["A","B","C"] 
classname = input("What class are you in?") 
while classname not in classchoices: 
    classname = input("Not a valid class, try again:") 

print(name, ",", classname) 
print("Begin quiz!") 

def add(a,b): 
    addQ = int(input(str(a) + "+" + str(b) + "=")) 
    result = int(int(a) + int(b)) 
    if addQ != result: 
     print ("Incorrect!", result) 
    else: 
     print("Correct") 

def multiply(a,b): 
    multQ = int(input(str(a) + "X" + str(b) + "=")) 
    results = int(int(a) * int(b)) 
    if multQ != results: 
     print ("Incorrect! The answer is", results) 
    else: 
     print("Correct") 

def subtract(a,b): 
    subQ = int(input(str(a) + "-" + str(b) + "=")) 
    resultss = int(int(a) - int(b)) 
    if subQ != resultss: 
     print ("Incorrect! The answer is", resultss) 
    else: 
     print("Correct") 


for i in range(10): 
    Qlist = [add, subtract, multiply] 
    random.choice(Qlist)(random.randint(1, 12),random.randint(1, 12)) 

print ("End of quiz") 

プログラムが実行するべき操作指示第三のパラメータに依存して、結果の印刷および検査を管理する機能を作成することによってさらに精製することができます。

0

"ask_questions"のセットに追加して、 "in"メソッドを使用して既に質問されているかどうかをテストし、はいの場合は新しい質問を生成できます。

最も効率的な方法であるかどうかはわかりませんが、間違いなく動作します。

関連する問題