You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:40:08