如何在包含函数的数学测验中添加分数计数器?

时间:2017-04-27 08:50:11

标签: python math random counter

下面我在python中创建了一个Maths测验。它由随机方程组成。问题是使用随机数和函数生成的,这些函数和函数确定问题是加法还是减法。我已经完成了测验,但我尝试添加一个分数计数器,这样如果用户得到一个问题,就会添加一个点。我不确定如何做到这一点,因为我已经尝试将得分实现到功能中并且它不起作用。这是代码:

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
a = random.randint(1,12)
b = random.randint(1,12)


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

    else:
        print("Correct")





def multiply(a,b):
    score = 0
    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 questions in range(10):
    Qlist = [add, subtract, multiply]
    random.choice(Qlist)(random.randint(1,12), random.randint(1,12))
    questions += 1



if questions == 10:
    print ("End of quiz")

4 个答案:

答案 0 :(得分:1)

您可以为每项任务返回分数。添加功能的一个示例:

if addQ != result:
    print ("Incorrect! The answer is", result)
    return 0

else:
    print("Correct")
    return 1

当然,你可以为更困难的任务提供更高的分数(例如乘法2分)。

然后在下面:

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

答案 1 :(得分:0)

使用全局变量并在每个正确的解决方案上添加+1。唯一的负面影响是,一旦程序关闭,分数就会丢失。 something like this

答案 2 :(得分:0)

使用大提琴演示的函数的返回值将是我的第一个直觉。

但是,由于您已经在使用全局变量来跟踪您的问题,因此您可以为分数引入另一个变量。

questions = 0
score = 0
a = random.randint(1,12)
b = random.randint(1,12)

要使用它(而不是仅在函数中可用的局部变量score),您的函数必须使用globals来引用它:

def add(a,b):
    global score

然后您可以在函数的else语句中递增它:

else:
    print("Correct")
    score += 1

最后,您可以打印得分:

print("End of quiz")
print("Your score:", score)

请注意,您以奇怪的方式使用questions变量:

首先用0:

初始化它
questions = 0

然后在循环中覆盖它:

for questions in range(10):
    questions += 1

for会给出值0..9的问题,因此在循环内手动增加数字是完全不必要的。这个增加的值将立即被循环的下一个值覆盖。

循环退出后,您肯定会问10个问题。以下if条件是多余的(并且只能起作用,因为您还会在循环中增加问题)。只是失去它:

print("End of quiz")

答案 3 :(得分:0)

您错过了全局定义分数,然后在功能中访问并更新它,这是一个有效的版本:

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!")

score = 0
questions = 0
a = random.randint(1,12)
b = random.randint(1,12)


def add(a,b):
    global score
    addQ =  int(input(str(a) + "+" + str(b) + "="))
    result = int(int(a) + int(b))
    if addQ != result:
        print ("Incorrect! The answer is", result)

    else:
        score += 1
        print("Correct")

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

    else:
        score += 1
        print("Correct")

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

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

if questions == 10:
    print ("End of quiz")
    print('Score:', score)