我将如何在包含功能的数学测验中添加分数计数器



下面我在Python中创建了一个数学测验。它由求解的随机方程组成。这些问题是使用随机数和函数生成的,这些数字和功能确定问题是添加还是减去问题。我已经完成了测验,但是我尝试添加一个分数计数器,以便如果用户正确地提出问题,则添加了一个点。我不确定如何做到这一点,因为我尝试将分数实现到功能中,并且它不起作用。这是代码:

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

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

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

使用全局var并在每个正确的解决方案上添加 1。唯一的负数是,一旦计划关闭,分数就会丢失。像这样的东西

您错过了全球定义分数,然后在功能中访问它并更新它,以下是一个工作版本:

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)

使用大提琴证明的功能的返回值是我的第一个直觉。

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

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

要使用它(而不是仅在功能中可用的本地变量score(,您的功能必须通过使用globals

来引用它
def add(a,b):
    global score

然后,您可以在功能的其他陈述中递增它:

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

最新更新