我在python中创建数学测验。我已经制作了代码,以便提出10个随机问题。在测验结束时,它应该告诉用户测验已经完成以及他们在测验中得分多少但是我遇到了一些困难。这是我的代码的一部分,我相信我错了:
def askquestion():
score = 0
opslist = {operator.add: "+", operator.sub: "-", operator.mul: "x"} #All operators that can be chosen
num1,num2 = random.randint(1,10), random.randint(1,10) #Two Random Numbers
ops = random.choice(list(opslist.keys())) # random operators from oplist keys
ActualAnswer = (ops(num1,num2)) #Answer for my quiz
score = 0
print(num1,opslist[ops],num2) # Question for my quiz
userAns = (int(input("Enter answer:")))
if userAns == ActualAnswer: #If the user's answer matches the Actual Answer
print("Correct")
score = score + 1
else:
print("Incorrect")
score = score - 0
for i in range (10):
askquestion()
print ("The quiz has finished")
print ("Today you achieved a score of" ,score,"out of 10")
假设我在最后一次打印下面移动for循环,这样它就不是def askquestion():
的一部分我得到这样的输出:
2 + 6
Enter answer:8
Correct
The quiz has finished
Today you achieved a score of 1 out of 10
6 x 3
Enter answer:18
Correct
The quiz has finished
Today you achieved a score of 1 out of 10
5 x 1
Enter answer:5
Correct
The quiz has finished
Today you achieved a score of 1 out of 10
如果我将它保持在与其余代码一起的位置,它就不会问我问题,程序会在程序要求提供名称后停止。如果您认为您需要其余代码,请提供电子邮件地址,但我很肯定我在提供的代码中出错了。
问。)我应该改变什么,以便当10个问题结束时,得分输出
答案 0 :(得分:0)
你需要把你的if / else块放在你的askquestion()函数中,或者在for循环中把它放在
之后答案 1 :(得分:0)
从广义上讲,你想要这样的东西
def ask_question():
#your question logic here
#increment score
def print_summary(score):
print "Today you got a score of..."
for i in range(10):
ask_question()
print_summary()
定义执行程序中每个任务的函数,然后指出程序应该通过这些函数的顺序。
你真正想要做的是将测验逻辑封装在一个带有提问,管理测验和打印汇总方法的类中。
答案 2 :(得分:0)
您的代码中存在一些问题。这就是我想出来解决它的问题。
import operator
import random
def askquestion():
score = 0
opslist = {operator.add: "+", operator.sub: "-", operator.mul: "x"} #All operators that can be chosen
num1,num2 = random.randint(1,10), random.randint(1,10) #Two Random Numbers
ops = random.choice(list(opslist.keys())) # random operators from oplist keys
ActualAnswer = (ops(num1,num2)) #Answer for my quiz
score = 0
print(num1,opslist[ops],num2) # Question for my quiz
userAns = (int(input("Enter answer:")))
if userAns == ActualAnswer: #If the user's answer matches the Actual Answer
print("Correct")
return 1
else:
print("Incorrect")
score = score - 0
return 0
totalScore = 0
for i in range (10):
totalScore += askquestion()
print ("The quiz has finished")
print ("Today you achieved a score of" ,totalScore,"out of 10")
所有askQuestion()
函数都很好,但函数中的变量不是全局变量,因此您需要将其返回以便稍后使用。您无需跟踪函数中创建的变量,而是可以使用全局变量totalScore
来跟踪分数。 askQuestion()
现在在答案正确时返回1,如果答案错误则返回0。
现在你需要移出askQuestion()
的for循环,这样才能正常工作。 for i in range(10):
有效,但您也可以使用while
这样的循环:
totalScore = 0
i = 0
while i < 10:
totalScore += askQuestion()
i += 1
在循环中,您使用全局变量totalScore
来跟踪askQuestion()
的1和0的回报。最后,您只是打印得分。