停止程序两次询问相同的事情?

时间:2017-04-05 18:59:39

标签: python python-3.x function random user-input

使用随机方程在python中进行数学测验。我不知道如何阻止程序两次问同样的事情? 程序从加,减或乘的列表中提出十个问题,每个问题都使用随机数。我已经设法让这十个问题随机,但我不知道如何阻止它两次选择相同的两个数字?例如,它会为一个问题选择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")

任何帮助都将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

这里的问题是您在程序开始时生成随机数,但每次询问时都不会重新生成它们:add函数将始终使用a和{{1 }},b将始终使用multiplyc,而d将始终使用subtracte进行所有相应的计算,其价值永远不会改变。

此外,您输入的参数对fmultiply没有任何价值,因为您只是忽略它们并分别使用subtractc, d而没有注明输入的参数。

为了解决这两个问题,我会在e, f循环中随机生成数字,并使函数使用正确的输入参数进行计算。

此外,while迭代有点冗余,简单while没有额外的位更直接。因此for questions in range(10)变量无用。

考虑到所有这些,这里是重写的代码。

questions

可以通过创建一个管理打印和检查结果的函数来进一步改进程序,该函数取决于第三个参数,该参数指示它应该执行什么操作。

答案 1 :(得分:0)

对于您提出的每个问题,您可以将其添加到一组" ask_questions"并使用"在"测试是否已被询问的方法,如果是,则生成新问题。

不确定它是否是最有效的方法,但它绝对有效,并且足以满足您的小应用。