问题最终不会重复10次

时间:2015-03-22 23:21:35

标签: python for-loop output

我在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个问题结束时,得分输出

3 个答案:

答案 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的回报。最后,您只是打印得分。