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

Python随机数学题生成代码的正确答案计算算法求助

问题解答

你现有代码结构完全可以支撑需求,不需要调整整体框架,只需要替换标注(NOT FINISHED!)位置的计算逻辑即可。实现时不需要依赖额外第三方库,手动按照数学运算优先级分两轮计算就能得到正确结果。

核心实现逻辑

  • 第一轮优先处理乘除运算:复制原数字列表和运算符列表作为临时计算变量,从左到右遍历运算符,遇到*或/时,立刻计算当前位置左右两个数字的结果,用计算结果替换原两个数字的位置,同时删除当前已处理的运算符,遍历完成后列表中将仅剩余加减运算
  • 第二轮处理加减运算:此时运算符列表只剩+和-,从左到右依次累计计算即可,最终剩下的单个数值就是题目的正确结果
  • 浮点精度兼容:由于除法会产生浮点数,答案判断时需要增加微小的精度容错,避免因二进制浮点数计算误差导致答对的题目被误判为错误

快速实现提示:如果是个人本地练习使用,也可以直接写problem_solved = eval(problem_str)一行完成计算,但eval会执行传入字符串中的任意代码,存在安全风险,绝对不能用于接收外部不可信输入的生产环境,新手入门阶段更推荐手动实现优先级计算逻辑,夯实基础。

需替换/调整的代码段

  1. 替换原代码中#calculating solution to the problem (NOT FINISHED!)下方的problem_solved = 0为如下代码:
# 复制临时列表做计算,不改动原生成的题目数据
temp_nums = num.copy()
temp_opps = opp.copy()

# 第一轮:从左到右处理所有乘除运算
i = 0
while i < len(temp_opps):
    current_op = temp_opps[i]
    if current_op in ("*", "/"):
        left_val = temp_nums[i]
        right_val = temp_nums[i+1]
        # 计算当前乘除结果
        if current_op == "*":
            calc_res = left_val * right_val
        else:
            calc_res = left_val / right_val
        # 用计算结果替换原两个数,删除已处理的运算符
        temp_nums[i:i+2] = [calc_res]
        temp_opps.pop(i)
    else:
        # 非乘除符号,移动到下一个运算符
        i += 1

# 第二轮:从左到右处理剩余加减运算
problem_solved = temp_nums[0]
for idx in range(len(temp_opps)):
    if temp_opps[idx] == "+":
        problem_solved += temp_nums[idx+1]
    else:
        problem_solved -= temp_nums[idx+1]
  1. 调整原有的答案判断逻辑,替换为带精度容错的判断,避免浮点误差:
# 增加1e-6的精度容错,兼容浮点数计算误差
if abs(user_solution - problem_solved) < 1e-6:
    print("Correct!")
else:
    # 结果保留4位小数展示,避免长串无意义浮点尾
    print(f"Wrong! The answer is {round(problem_solved, 4)}")

内容的提问来源于stack exchange,提问作者Mante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:27:15