随机生成四则运算题并判断正确率

简介: 随机生成四则运算题并判断正确率

一、题目描述

  1. 随机生成四则运算题,两个算数[0,10]
  2. 除法时,确保除数不为0,结果保留小数点两位
  3. 如果回答输入非数字,提示“输入错误,是否继续(y/n)”。重新答题,可以重复任意次数,直到选择“n”
  4. 退出时,统计正确率。并列出每道题的答题结果。

二、完整代码

1. import random
2. target_list = ["+","-","*","/"]
3. True_list = []
4. answer_list = []
5. temp_list =[]
6. chr_dic = {}
7. while True:
8.     num_1 = random.randint(0,10)
9.     num_2 = random.randint(0,10)
10.     num_3 = random.randint(0,3)
11.     sign = target_list[num_3]
12.     answer = input("{0}{1}{2}=".format(num_1,sign,num_2))
13. if answer == "n":
14. break
15. else:
16.         count = 1
17. try:
18. float(answer)
19. except ValueError:
20.             y_n = input("输入错误,是否继续(y/n)?")
21. if y_n == "n":
22. break
23. else:
24. continue
25. else:
26.             answer_list.append(answer)
27.             True_list.append(round(eval(f"{num_1}{sign}{num_2}"),2))
28.             Calculations = "{0}{1}{2}={3}".format(num_1,sign,num_2,answer)
29.             temp_list.append(Calculations)
30. Accuracy_rate = 0
31. Accuracy = 0
32. for i in range(0,len(answer_list)):
33. if int(answer_list[i]) == True_list[i]:
34.         Accuracy += 1
35.         chr_dic[temp_list[i]] = "正确"
36. else:
37.         chr_dic[temp_list[i]] = "错误"
38. Accuracy_rate = round(Accuracy/len(answer_list),2)
39. print("正确率:",Accuracy_rate)
40. for i in range(0,len(list(chr_dic.keys()))):
41. print(list(chr_dic.keys())[i]," ",list(chr_dic.values())[i])

三、思路及代码讲解

  1. 首先看到一个关键词“随机”,在python里面提到随机就会想到random库,随机生成一个四则运算,这里要生成三个数,分别是第一个数第二个数,以及运算符号的索引,符号列表需要我们提前定义好。
  2. 在除法时,要保证除数不为0,也就是符号是“/”时,num_2不能为0,所以这里要加一个if语句判断,结果保留两位小数需要用round(number,2)。
  3. 可以重复任意次,那么就用到了while循环,直到输入的为“n”时退出循环。至于输入的为非数字的那里可以用捕获异常来判断,即float(answer),如果出现了ValueError:说明输入的是非数字,这时候就打印“输入错误,是否继续(y/n)”,然后continue回到循环。
  4. 统计正确率,需要把用户输入的答案和正确答案做一个对比。每随机生成一道题目时,用answer_list.append(answer)储存用户输入的答案,用True_list.append(round(eval(f"{num_1}{sign}{num_2}"),2))储存正确答案。最后用for循环一一对比,求出一样的个数,即答对的个数,除以列表长度,即总题数就可以统计出正确率。
  5. 题目最后要求我们打印出来每道题的答题结果,所以我们事先用列表将每道题的题目作为键,每道题的答案作为值,一一关联起来,然后再用for循环打印出来就可以了。


相关文章
|
6月前
2572. 无平方子集计数(状态压缩dp)
2572. 无平方子集计数(状态压缩dp)
|
6月前
|
测试技术 C++
判断晨曦酒庄的酒桶能否恰好装满给定的葡萄酒
晨曦酒庄有 n 个酒桶,容量分别是从 1 到 n(升),他可以从中任意挑选 k 个酒桶,并且每个酒桶必须恰好装满。 现在迪卢克准备了 x 升葡萄酒,判断能否用 k 个酒桶装满。
42 1
|
6月前
|
算法 测试技术 C++
【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数
【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数
|
Java
猜测1-100的随机整数
猜测1-100的随机整数
122 0
|
C++
C++ 计算斐波那契数列第100万项的精确整数值
C++ 计算斐波那契数列第100万项的精确整数值
112 0
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
每日一题---输出100个1~6的随机整数,并求出每个数出现的概率
|
算法 Go C++
leetcode-2321. 拼接数组的最大分数(差分+枚举)
但其实是在找两个数组之间[Left:Right]区间最大差值,差值我们自然而然的就可以想到差分,但是我们这里求的差分数组并不是两个数组前后元素的差值,而是两个数组同一下标的元素差值,这样我们只要找这段差分区间和的最大值就行了
79 0
leetcode-2321. 拼接数组的最大分数(差分+枚举)
L2-018 多项式A除以B (25 分)(数组模拟)
L2-018 多项式A除以B (25 分)(数组模拟)
180 0
L2-018 多项式A除以B (25 分)(数组模拟)
如何用牛顿法求一个数的平方根
(一)导数与导函数 导数 设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作①f'(x0) ;②y'│x=x0 ;③ │x=x0, 即 导函数 如果函数y=f(x)在开区间内每一点都可导,就称函数f(x)在区间内可导。
3957 1
01:判断数正负
01:判断数正负
117 0