下面我在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")