一、代码部分:
import random
def fun(i):
score = 0
list = []
tup = ()
for i in range(i,51):
num1 = random.randint(0,100)#用来临时保存第一个数
num2 = random.randint(0, 100)
num3=random.randint(0,1)#随机生成0和1并代表+与-临时保存加法
tup=(num1,num2,num3) #元组,用来记录当前的两个数与运算符
if list.count(tup)==0:#当列表中不存在这个元组时,我们进行运算,主要是为了解决重提问题
list.append(tup)#把当前元组添加到列表当中
# print(tup)#代码测试输出点
if num3 == 0:#0为加法1为减法
print("第", i, "题:", num1, "+", num2, "=")
a = input()#键盘输入
if int(a) == num1 + num2:#将键盘输入的类型转换为int型
score += 2#总共50道题一小题两分
print("答对了,加一分。当前分数为:", score)
else:
print("答错了,正确答案为:", num1 + num2, "当前分数为:", score)
print("-----------------题线-----------------")
else:
print("第", i, "题:", num1, "-", num2, "=")
b = input()#键盘输入
if int(b) == num1 - num2:#将键盘输入的类型转换为int型
score += 2#总共50道题一小题两分
print("答对了,加一分。当前分数为:", score)
else:
print("答错了,正确答案为:", num1 + num2, "当前分数为:", score)
print("-----------------题线-----------------")
else:
#print("遇见了重复的计算")#代码测试点
fun(i)#遇见了相同的题将当前题号递归给fun函数
print("恭喜你完成了最后答题,最后得分为:",score)
#print(list)#代码测试输出点
fun(1)
二、输出结果截图、以缩小范围(题目达到50实现不变,此为便于观察)得到输出
三、实验结论(思想)
先对题目进行分析,需要实现两个随机数的加减法,想到用生成随机数函数,可采用random.randint(0,1)#随机生成0和1并代表+与-临时保存加法 ,另外两个则是0到100,通过判断生成的是0和1来判断该道题为加法还是减法,并在输出框提示,用input获取用户输入的数,并且判断该数是否计算正确,正确score变量加两分,并提示给用户答案正确与否。在想到去除重复的问题时,首先第一想法是把该算式直接存储到列表中,但在实现的时候发现,其中既有字符串又有数字整型,突然想到了列表中的元素可以是各种的数据类型,既可用元组数据类型来进行存储,然后在添加到列表中,用到元组时只用考虑随机生成的三个数字既可代表了一个表达式,这样问题就得到解决。那在程序核心部分开始就要就行判断列表中是否有该元组(list.count()判断),列表创建时肯定为空,则可以进行第一次循环,则将该元组存储在列表中,当下一次循环时,如果出现了已有的表达式,那我们则不进行此次运行,将此次循环的题号即i,通过递归的方式继续传入到下一次循环当中,再进行随机生成。