好题分享,这道题是随机生成四则运算,用户输入答案,判断用户正确率的小游戏。通过这道题可以对你的代码逻辑有较大的提升,快来一起学习吧!
目录
一、题目描述
- 随机生成四则运算题,两个算数[0,10]
- 除法时,确保除数不为0,结果保留小数点两位
- 如果回答输入非数字,提示“输入错误,是否继续(y/n)”。重新答题,可以重复任意次数,直到选择“n”
- 退出时,统计正确率。并列出每道题的答题结果。
二、完整代码
import random
target_list = ["+","-","*","/"]
True_list = []
answer_list = []
temp_list =[]
chr_dic = {}
while True:
num_1 = random.randint(0,10)
num_2 = random.randint(0,10)
num_3 = random.randint(0,3)
sign = target_list[num_3]
answer = input("{0}{1}{2}=".format(num_1,sign,num_2))
if answer == "n":
break
else:
count = 1
try:
float(answer)
except ValueError:
y_n = input("输入错误,是否继续(y/n)?")
if y_n == "n":
break
else:
continue
else:
answer_list.append(answer)
True_list.append(round(eval(f"{num_1}{sign}{num_2}"),2))
Calculations = "{0}{1}{2}={3}".format(num_1,sign,num_2,answer)
temp_list.append(Calculations)
Accuracy_rate = 0
Accuracy = 0
for i in range(0,len(answer_list)):
if int(answer_list[i]) == True_list[i]:
Accuracy += 1
chr_dic[temp_list[i]] = "正确"
else:
chr_dic[temp_list[i]] = "错误"
Accuracy_rate = round(Accuracy/len(answer_list),2)
print("正确率:",Accuracy_rate)
for i in range(0,len(list(chr_dic.keys()))):
print(list(chr_dic.keys())[i]," ",list(chr_dic.values())[i])
三、思路及代码讲解
- 首先看到一个关键词“随机”,在python里面提到随机就会想到random库,随机生成一个四则运算,这里要生成三个数,分别是第一个数第二个数,以及运算符号的索引,符号列表需要我们提前定义好。
- 在除法时,要保证除数不为0,也就是符号是“/”时,num_2不能为0,所以这里要加一个if语句判断,结果保留两位小数需要用round(number,2)。
- 可以重复任意次,那么就用到了while循环,直到输入的为“n”时退出循环。至于输入的为非数字的那里可以用捕获异常来判断,即float(answer),如果出现了ValueError:说明输入的是非数字,这时候就打印“输入错误,是否继续(y/n)”,然后continue回到循环。
- 统计正确率,需要把用户输入的答案和正确答案做一个对比。每随机生成一道题目时,用answer_list.append(answer)储存用户输入的答案,用True_list.append(round(eval(f"{num_1}{sign}{num_2}"),2))储存正确答案。最后用for循环一一对比,求出一样的个数,即答对的个数,除以列表长度,即总题数就可以统计出正确率。
- 题目最后要求我们打印出来每道题的答题结果,所以我们事先用列表将每道题的题目作为键,每道题的答案作为值,一一关联起来,然后再用for循环打印出来就可以了。