Python随机数学竞赛题生成器故障:题目始终不变的问题排查求助
问题分析与修复方案
问题根源
你代码里的随机题目生成逻辑(包括num1、num2、operate、exp、answers的定义)都写在了for循环外面,程序启动时只会执行一次,所以10道题全是同一道题。另外原代码的答题判断逻辑也有问题:不管答对答错都会直接加1分并进入下一题,不符合“答对才展示下一题”的要求。
修复后的代码
import random import time min_num = 1 max_num = 12 operators = ["+", "-", "*"] # 先去掉除法,避免小数答案导致输入匹配问题,如需保留需处理精度 q_num = 10 score = 0 start = time.time() for i in range(q_num): # 每道题循环前重新生成随机题目和答案 num1 = random.randint(min_num, max_num) num2 = random.randint(min_num, max_num) # 减法避免负数结果,可根据需求调整 operate = random.choice(operators) if operate == "-" and num1 < num2: num1, num2 = num2, num1 exp = f"{num1} {operate} {num2}" answers = eval(exp) # 循环直到答对为止 while True: cont = input(f"q#{i + 1}: {exp} = ") # 整数输入与答案匹配,除法需改为浮点数精度判断 if cont.strip() == str(answers): print("correct!") score += 1 break else: print("wrong, try again!") end = time.time() total_time = end - start print(f"很棒(●'◡'●),你答对了{score}题,用时{round(total_time, 1)}秒")
关键修改说明
- 将随机题目生成逻辑移到
for循环内部,确保每一轮循环都生成新的题目和答案 - 修复答题判断逻辑:只有输入正确时才加分并进入下一题,答错则提示重新输入
- 增加减法的防负数处理,避免出现结果为负数的题目(可选,可根据需求移除)
- 暂时移除除法运算符,因为除法会产生小数,直接用字符串匹配容易出错;如果需要保留除法,可将判断逻辑改为浮点数精度对比(比如
abs(float(cont) - answers) < 0.001)
内容的提问来源于stack exchange,提问作者Layla Yahya
相关产品推荐
相关产品推荐

