作业三(结对编程)-小学四则运算题目生成与判卷(Python + 可视化)

news/2025/10/22 11:48:41/文章来源:https://www.cnblogs.com/gucvii/p/19157601

结对作业:小学四则运算题目生成与判卷(Python + 可视化)

  • 姓名/学号:翁广驰(3123004409)、关健佳(3121004072)
  • Github项目地址:https://github.com/Gucvii/homework

PSP2.1 表格(实现前的预估)(1分)

PSP 阶段 预估耗时(分钟)
计划(评估任务规模与交付物) 30
需求分析(理解题目与约束) 40
设计规格(模块划分与数据结构) 45
设计复审(结对评审) 20
代码规范(类型标注、命名、格式) 15
详细设计(表达式树/生成/解析/判卷) 60
编码实现(核心逻辑与CLI) 120
代码复审(互相走查) 30
测试(单元与端到端) 60
测试报告与总结 20
工作量度量与过程改进计划 20
合计 460

效能分析(3分)

  • 改进思路:
    • 去重采用“交换 + 与 × 的左右操作数”的规范化签名(不做结合律扁平化),匹配题目对“有限次交换”的定义,显著减少重复冲突。
    • 生成阶段对不合法的 - 与 ÷ 做就地校验与重试,避免回溯解析,提高成功率。
    • I/O 批量写入 Exercises.txtAnswers.txt,避免频繁磁盘操作。
  • 耗时记录:约 40 分钟(包含基准与优化迭代)。
  • 性能图:这是优化后的性能图

截屏2025-10-22 11.16

pipeline

performance


设计与实现(5分)

  • 代码组织:
    • arithmetic.py
      • 表达式模型:Number(Fraction)BinOp(op, left, right)Expr = Union[Number, BinOp]
      • 评估:evaluate(e) -> Fraction,使用 fractions.Fraction 保证精确与类型安全。
      • 格式化:format_fraction(Fraction) -> str,支持整数、真分数、带分数(a’b/c)。
      • 序列化:expr_to_string(e),输出括号与空格,满足题干格式。
      • 去重签名:canonical_sig(e),对 +/× 交换左右操作数并排序,其它运算保持序。
      • 生成:generate_unique_expressions(n, r, max_ops=3),满足约束与不重复。
      • 解析:parse_expression_line(line) 与分数解析,支持 a’b/cb/c、整数。
      • 文件:write_exercises_and_answers(...)grade(...) 输出 Grade.txt
    • main.py:CLI 接口,支持 -r-n 生成与 -e -a 判卷。
    • app.py:Streamlit 图形界面,含“生成题目 / 判卷统计”两页。
  • 关键约束实现:
    • 减法子表达式满足 e1 ≥ e2;除法子表达式结果为真分数 0 < e1 ÷ e2 < 1
    • 每题运算符个数 ≤ 3;输出与解析采用题干格式与空格规则。
    • 不重复判定遵循“仅允许交换 +/× 的左右”规则(与题目示例一致)。

代码说明(4分)

  • 表达式与求值:
@dataclass(frozen=True)
class Number:value: Fraction@dataclass(frozen=True)
class BinOp:op: strleft: Exprright: Expr# 求值
if e.op == '+': return l + r
if e.op == '-': return l - r
if e.op == '×': return l * r
if e.op == '÷': return l / r
  • 真分数与带分数格式化:
if fr.denominator == 1: return str(fr.numerator)
sign = '-' if fr < 0 else ''
integer = fr.numerator // fr.denominator
remainder = Fraction(fr.numerator % fr.denominator, fr.denominator)
return f"{sign}{integer}’{remainder.numerator}/{remainder.denominator}" if integer else f"{sign}{remainder.numerator}/{remainder.denominator}"
  • 去重签名(仅交换 +/× 左右):
if e.op in ['+', '×']:s1, s2 = sorted([canonical_sig(e.left), canonical_sig(e.right)])return f"({s1}{e.op}{s2})"

测试运行(3分)

  • 正确性说明:
    • 使用 Fraction 保证四则运算精确无误差;解析与格式化相互可逆,答案与判卷一致。
    • 生成阶段保证减法与除法的约束,避免负数与除零;题目不重复由签名集判定。
  • 测试用例(节选 10 个):
    1. 1/6 + 1/8 =7/24
    2. 2 + 3/4 =2’3/4
    3. (3 × 1/2) + 1/3 =5/6
    4. (5 ÷ 8) =5/8
    5. (3 ÷ 2) 不生成(结果>1),生成器约束生效。
    6. (3 - 5) 不生成(中间负数),生成器约束生效。
    7. 1 + 2 + 33 + (2 + 1) 判为重复;与 3 + 2 + 1 不重复。
    8. 0 ÷ 3 =0(不会生成,因需真分数,生成器约束生效)。
    9. 混合数解析:2’3/819/8
    10. 大规模生成:-r 10 -n 10000 正常完成,且去重与约束保持。

实际耗时记录(1分)

PSP 阶段 实际耗时(分钟)
计划 25
需求分析 45
设计规格 40
设计复审 20
代码规范 10
详细设计 60
编码实现 130
代码复审 30
测试 70
报告与总结 30
改进计划 20
合计 480

项目小结(2分)

  • 结对感受:两人分工明确(一人核心逻辑与CLI,另一人GUI与文档)。在签名判重策略上充分讨论并依据题目示例确定“不做结合律扁平化,仅交换 +/× 左右”。
  • 闪光点与建议:
    • 闪光点:类型标注完整、解析鲁棒、约束严格、界面简洁。
    • 建议:后续可增加“自定义操作符权重”“更多括号形态”与更细致的性能图。

使用说明(加分)

  • 生成题目:
    • python main.py -r 10 -n 10
    • 当前目录输出:Exercises.txtAnswers.txt
  • 判卷统计:
    • python main.py -e Exercises.txt -a Answers.txt
    • 当前目录输出:Grade.txt
  • 图形界面:
    • streamlit run app.py
    • 页面含“生成题目 / 判卷统计”,支持预览与统计输出。
    • 图形化界面预览:

截屏2025-10-22 11.36

截屏2025-10-22 11.36

截屏2025-10-22 11.36

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月景区钢丝绳护栏厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

随着旅游业的蓬勃发展和景区安全标准的持续提升,景区钢丝绳护栏作为关键的安全防护设施,其市场需求呈现稳定增长态势。行业统计数据显示,2024年中国景区防护设施市场规模已突破75亿元,其中钢丝绳护栏凭借其优良的安…

技术 | 在单台电脑上管理多个 GitHub 账户并解决推送问题(测试中)

### 在单台电脑上管理多个 GitHub 账户并解决推送问题>在日常开发中,我们经常需要在同一台电脑上使用多个 GitHub 账户(例如个人账号和工作账号),但默认配置下容易出现推送权限错误或提交记录关联到错误账户的问…

CF2159E

CF2159E 求的是一个: \([x^k]\frac{(ax^2+bx+c)^n}{1-x}\) 可以分块: 对于所有 \(i\leq B\) 的 \((ax^2+bx+c)^i\) 预处理出。 再处理出所有的 \(i=kB\) 的 \(\frac{(ax^2+bx+c)^{i}}{1-x}\), 也就是 \((ax^2+bx+c)…

WebGL/Canvas 内存泄露分析

WebGL/Canvas 内存泄露分析在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编辑器、数据可视化平台)时,内存管理是一个至关重要且极具挑战性的课题。在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编…

2025年10月半封闭滑轨丝杆模组厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在工业自动化领域,半封闭滑轨丝杆模组作为精密传动系统的核心部件,其定位精度与运行稳定性直接影响设备整体性能。随着智能制造的深入推进,市场对高精度、高刚性模组产品的需求持续增长。本文基于行业技术参数、产品…

Stable Diffusion启动提示端口错误处理

Windows启动Stable Diffusion报错错误原因,本机IP地址设置错误 修改配置文件为本机地址 文件为 sd-webui-aki-v4.1\.launcher\preference.json修改以下地址为本机地址再次启动即可

k8s部署的milvus提升性能需要扩容的角色节点

increase the number of proxy nodes to accept more requests from the client-side increase the number of query nodes to hold more data in memory to compute increase the number of data nodes to process in…

小程序-定义头部导航

默认定义头部导航,打开小程序自适应移动设备。<page-meta page-style="height:100%"><navigation-bar title="主页" /><view>123</view></page-meta>如需转载原创…

2025年10月简易丝杆模组定制厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在工业自动化快速发展的背景下,简易丝杆模组作为精密传动领域的核心部件,其定制化能力与产品质量直接影响设备性能。当前市场需求呈现出对高精度、模块化、快速交付的显著特征,专业定制厂家凭借其技术积累与服务优势…

Golang的 cron 库

目录🔍 Cron 表达式💡 核心特性与用法预定义模式与间隔基本使用步骤时区设置高级选项简单示例⚠️ 版本注意与总结Golang 的 cron 库用于处理定时任务,其中 github.com/robfig/cron/v3 是一个广泛使用的、功能丰富…

poll 函数原理与 TCP 服务器构建详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android 应用多模块开发时,子模块只有 release buildType 时编译报错怎么办?

非常好的问题 👏,而且你这个需求其实是 最常见、最合理 的做法。 你完全正确 —— 如果你的模块(library modules)只需要 release(正式版)构建,而 app 有多个 buildType(比如 dev, prod 等),你 不需要 在每…

ipad协议对个人微信机器人进行二次开发

ipad协议对个人微信机器人进行二次开发、个微协议,微信号二次开发/ipad协议 优势 我们是一家专业服务企业数字化微信管理服务的技术团队,服务于需求SCRM、机器人、营销系统、社群小助手等具有研发能力的企业,同时我们…

西安交通大学国家级医学公关交叉平台实验室建设实拍图

在西安交通大学创新港,医学板块科研平台建设正以“加速度” 推进。 实验室现场,通风管道改造已完工,崭新的地面和实验台通风柜等实验室家具布局井然有序。

2025年10月智能门窗代理厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

随着智能家居市场的快速发展,智能门窗行业迎来了快速增长期。据行业统计数据显示,2024年中国智能门窗市场规模预计突破800亿元,年复合增长率保持在18%以上。消费者对智能门窗的需求已从基础功能向智能化、安全性、节…

深入解析:【ROS2学习笔记】话题通信篇:话题通信再探

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android插件化框架

https://chat.deepseek.com/share/w6duumv7aglpslahak Android插件化框架Shadow深度解析 1. 什么是Android插件化? 1.1 基本概念 Android插件化是一种技术,允许一个已安装的APP(称为宿主)动态加载并运行另一个完整…

完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)

完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

【IEEE出版、中国科学院宁波材料所主办】第五届机械自动化与电子信息工程国际学术会议(MAEIE 2025)

IEEE出版、会议规模大,EI检索 第五届机械自动化与电子信息工程国际学术会议(MAEIE 2025) 2025 5th International Conference on Mechanical Automation and Electronic Information Engineering 在这里看会议官网详…