结对项目—小学四则运算题目生成器

news/2025/10/20 16:43:25/文章来源:https://www.cnblogs.com/0517wwww/p/19152876
项目成员 汪雨嫣3223003305、沙吉旦·乃吉米丁3223004775
GitHub地址 https://github.com/wyy517/WYY517/tree/main/math
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13479
这个作业的目标 <实现小学四则运算题目生成器>

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 45
·Estimate ·估计这个任务需要多少时间 30 45
Development 开发 515 600
·Analysis ·需求分析 (包括学习新技术) 60 75
·Design Spec ·生成设计文档 45 60
·Design Review ·设计复审 30 25
·Coding Standard ·代码规范 (为目前的开发制定合适的规范) 20 15
·Design ·具体设计 60 80
·Coding ·具体编码 240 300
·Code Review ·代码复审 60 45
·Test ·测试(自我测试,修改代码,提交修改) 120 150
Reporting 报告 150 165
·Test Repor ·测试报告 90 120
·Size Measurement ·计算工作量 20 15
·Postmortem & Process Improvement Plan ·事后总结, 并提出过程改进计划 40 30
·合计 695 810

二、效能分析

性能改进过程

在开发过程中,我们主要在以下方面进行了性能优化:

1.表达式生成算法优化

  • 初始版本使用深度递归,容易栈溢出
  • 改进为迭代生成,限制递归深度
  • 添加重复表达式检测,避免无限循环

2.分数计算优化

  • 最初使用Python的eval函数,存在安全风险
  • 改为自定义表达式解析器,提高安全性
  • 实现分数约分缓存,避免重复计算

性能分析结果

通过cProfile进行分析,发现最耗时的函数:
image

image

性能优化思路

# 优化前:深度递归
def generate_expression(depth):if depth == 0: return numberreturn f"{generate_expression(depth-1)} op {generate_expression(depth-1)}"# 优化后:迭代生成
def generate_expression_iterative():numbers = generate_numbers()while len(numbers) > 1:# 随机组合数字和运算符# 检查约束条件# 构建表达式

三、设计实现过程

类设计图

├──小学四则运算题目生成器
├── main.py (主程序入口)
│   ├── 命令行参数解析
│   ├── 模式选择(生成/批改)
│   └── 模块协调
│
├── fraction.py (分数核心类)
│   ├── Fraction
│   │   ├── __init__(numerator, denominator) - 初始化并自动约分
│   │   ├── simplify() - 分数约分
│   │   ├── to_mixed_number() - 转换为带分数
│   │   ├── to_improper_fraction() - 转换为假分数
│   │   ├── __add__, __sub__, __mul__, __truediv__ - 运算符重载
│   │   ├── __lt__, __eq__, __le__ - 比较运算符
│   │   ├── random_fraction(max_value) - 生成随机分数
│   │   └── from_string(s) - 从字符串解析
│
├── expression.py (表达式生成类)
│   ├── Expression
│   │   ├── __init__(max_ops, number_range)
│   │   ├── generate() - 生成表达式
│   │   ├── _generate_expression_tree() - 递归生成表达式树
│   │   ├── _choose_operator() - 智能选择运算符
│   │   ├── _apply_operator() - 应用运算符计算
│   │   ├── _calculate_expression() - 计算表达式值
│   │   ├── _check_constraints() - 检查约束条件
│   │   └── get_value() - 获取表达式值
│
├── generator.py (题目生成器)
│   ├── ProblemGenerator
│   │   ├── __init__()
│   │   ├── generate_problems(count, number_range) - 生成题目
│   │   ├── _is_valid_answer() - 验证答案有效性
│   │   ├── _normalize_expression() - 表达式规范化去重
│   │   └── save_to_files() - 保存题目和答案
│
└── checker.py (答案批改器)├── AnswerChecker│   ├── __init__()│   ├── check_answers(exercise_file, answer_file) - 批改答案│   ├── _calculate_problem() - 计算题目答案│   ├── _evaluate_expression() - 表达式求值│   ├── _compare_answers() - 答案比较│   ├── _normalize_answer() - 答案规范化│   └── save_grade() - 保存批改结果

关键函数流程图

1.主程序执行流程图

image

2.题目生成流程图

image

3.表达式流程图

image

4.答案批改流程图

image

5.分数运算流程图

image

四、代码说明

关键代码1:Fraction类(分数运算核心)

class Fraction:def __init__(self, numerator, denominator=1):if denominator == 0:raise ValueError("分母不能为零")self.numerator = numeratorself.denominator = denominatorself.simplify()  # 自动约分def simplify(self):"""约分方法,确保分数最简形式"""if self.numerator == 0:self.denominator = 1returngcd_val = math.gcd(abs(self.numerator), abs(self.denominator))self.numerator //= gcd_valself.denominator //= gcd_val# 确保分母为正if self.denominator < 0:self.numerator = -self.numeratorself.denominator = -self.denominator

关键代码2:表达式生成算法

def _generate_expression_tree(self, depth, operators, number_range):"""递归生成表达式树,确保题目多样性"""if depth == 0:num = Fraction.random_fraction(number_range)return str(num), num# 随机分配左右子树深度left_depth = random.randint(0, depth - 1)right_depth = depth - 1 - left_depthleft_expr, left_val = self._generate_expression_tree(left_depth, operators, number_range)right_expr, right_val = self._generate_expression_tree(right_depth, operators, number_range)# 智能选择运算符,满足约束条件op = self._choose_operator(left_val, right_val, operators)# 构建表达式并计算值current_value = self._apply_operator(left_val, right_val, op)return f"({left_expr} {op} {right_expr})", current_value

关键代码3:约束检查

def _check_constraints(self):"""检查题目约束条件"""if self.value is None:return False# 1. 无负数结果if self.value < Fraction(0):return False# 2. 除法结果为真分数if hasattr(self.value, 'denominator') and self.value.denominator != 1:if abs(self.value.numerator) >= abs(self.value.denominator):return False# 3. 数值范围检查return self._check_numbers_in_range()

五、测试运行

测试用例设计

基础功能测试:

python main.py -n 5 -r 10 # 生成5道10以内题目
python main.py -n 10000 -r 20 # 压力测试1万题目
python main.py -n 1 -r 1 # 边界值测试

分数运算测试:

1/2 + 1/3 = 5/6 # 基础分数加法
3/4 - 1/4 = 1/2 # 分数减法
1/2 × 2/3 = 1/3 # 分数乘法
1/2 ÷ 1/4 = 2 # 分数除法

复杂表达式测试:

(1/2 + 1/3) × 3/5 = 1/2 # 带括号表达式
2 × 3 + 4 ÷ 2 = 8 # 混合运算
1'1/2 + 2'1/3 = 3'5/6 # 带分数运算

批改功能测试

python main.py -e Exercises.txt -a Answers.txt # 正常批改
python main.py -e Exercises.txt -a WrongAnswers.txt # 错误答案检测

测试结果

Exercises.txt

1. 2 × 2/9 = 
2. (7 + 1/2 × 1/3) = 
3. 5/7 × 2 = 
4. 5 × 5/6 = 
5. 9/10 × 4/9 = 
6. (1/2 × 1/2 ÷ 4 ÷ 8) = 
7. 3/4 + 3 = 
8. 2 - 8/9 + 2/9 = 
9. 6 - 1/2 × 7 = 
10. 3 ÷ 5 ÷ 1 = 

Answers.txt

1. 4/9
2. 2'1/2
3. 1'3/7
4. 4'1/6
5. 2/5
6. 1/2
7. 3'3/4
8. 1'1/3
9. 2'1/2
10. 3/5

Grade.txt

Correct: 8 (1, 3, 4, 5, 7, 8, 9, 10)
Wrong: 2 (2, 6)

六、项目小结

项目成果

本项目成功实现了小学四则运算题目生成器的所有核心功能:

✅ 支持自然数、真分数、带分数
✅ 控制题目数量和数值范围
✅ 避免负数和假分数结果
✅ 题目去重功能
✅ 文件输入输出
✅ 答案批改统计

经验教训

1.成功经验:

· 模块化设计:将分数、表达式、生成器分离,便于测试和维护
· 约束驱动开发:先定义清楚所有约束条件,再实现功能
· 渐进式开发:从简单功能开始,逐步增加复杂度

2.遇到的问题:

· 表达式计算复杂性:递归生成容易栈溢出,改为迭代方法
· 分数运算精度:需要处理约分和规范化表示
· 去重算法设计:表达式规范化比较具有挑战性

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

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

相关文章

阅读笔记一:程序员的自我定位与成长基石

《程序员修炼之道:从小工到专家》开篇便打破了“程序员只是代码编写者”的刻板认知,将职业素养置于核心位置,为技术从业者指明了从“小工”到“专家”的底层逻辑。在数字化浪潮席卷全球的今天,软件已深度融入社会运…

SQL 子查询与多表 JOIN 用法大全(速查版) - 实践

SQL 子查询与多表 JOIN 用法大全(速查版) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

Excel学习指南

感觉太简单,就边练习边笔记了,根据微信读书的《Excel函数与公式速查手册》来练习,不区分大小写 名称的定义与使用 “名称”就是给一个单元格、单元格区域、公式或常量值起一个易于理解和记忆的别名。 如果引用的数据…

2025 年宁波北仑仓库服务商推荐新世洋集团,港口物流仓储的专业之选宁波北仑仓库推荐

在经济全球化的浪潮下,港口物流仓储行业已成为连接国内外贸易的关键纽带,其重要性不言而喻。随着我国进出口贸易规模的持续扩大,以及电商行业的迅猛发展,对高效、可靠的仓储与物流服务的需求呈井喷式增长。宁波北仑…

2025年聚氨酯厂家权威推荐榜:浇注型聚氨酯/聚氨酯预聚体/聚氨酯胶黏剂/聚氨酯组合料/密封胶/胶辊/制品原料,源头厂家技术实力与产品应用深度解析

2025年聚氨酯厂家权威推荐榜:浇注型聚氨酯/聚氨酯预聚体/聚氨酯胶黏剂/聚氨酯组合料/密封胶/胶辊/制品原料,源头厂家技术实力与产品应用深度解析 行业背景与发展趋势 聚氨酯材料作为高分子材料领域的重要组成部分,近…

02-02串口-单片机发送数据,电脑串口调试助手接收数据

一、硬件准备1块STM32F103C8T6最小系统板 1个ST-LINK烧录器 1个USB-to-TTL 若干杜邦线 二、程序点击查看代码 #include "stm32f10x.h" // Device headervoid My_USART_SendBytes(USART_Typ…

2025年CNC高压清洗机厂家推荐排行榜:CNC全自动/数控高压清洗机、双工位/卧式清洗机、去毛刺/螺纹孔清洗机、工业/欧洲清洗机精选

2025年CNC高压清洗机厂家推荐排行榜:CNC全自动/数控高压清洗机、双工位/卧式清洗机、去毛刺/螺纹孔清洗机、工业/欧洲清洗机精选 一、行业技术发展趋势 随着工业4.0时代的深入发展,CNC高压清洗技术正经历着革命性的变…

2025 矿物铸件源头厂家推荐榜:南通盟鼎新材料 5 星领跑,适配机床 / 电子 / 自动化设备基座需求

随着机床、电子设备、自动化生产线对 “基座稳定性、振动衰减、精度保持” 需求升级,矿物铸件凭借 “高阻尼系数、低热变形、定制化强” 的特性,成为核心结构件优选。结合材料性能、精度控制、场景适配度与用户反馈,…

2025年家纺摄影公司推荐排行榜,南通摄影公司,家纺产品摄影,电商家纺拍摄,品牌家纺视觉策划专业团队

2025年家纺摄影公司推荐排行榜:专业视角下的南通摄影公司深度解析 家纺摄影行业发展趋势与市场格局 随着电商经济的蓬勃发展,家纺行业的视觉营销需求呈现爆发式增长。家纺产品摄影作为连接产品与消费者的重要桥梁,已…

2025 年国内锅炉厂家最新推荐排行榜:聚焦智能控制与稳定可靠的品牌深度解析电/蒸汽/燃气/燃油/电蒸汽锅炉公司推荐

引言 随着工业升级、商业发展及民生供暖需求的持续攀升,锅炉作为核心热能设备,其性能优劣直接关系到企业生产效率、运营成本控制及环保合规性。当前市场中,锅炉制造商数量繁杂,产品质量差异显著,部分品牌存在技术…

遗传算法入门

遗传算法入门目录物种进化的目的案例——背包问题第一步 —— 初始化第二步 — 适应度评估第三步 — 遗传操作(进化核心:选择、交叉、变异)∞ 循环总结遗传算法是什么? 遗传算法是一种受生物进化论(特别是自然选择…

2025年冲压件厂家权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头实力解析

2025年冲压件厂家权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头实力解析 行业背景与发展趋势 冲压件作为现代制造业的基础零部件,其技术水平和产品质量直接影响着终端设备的性能和可靠性。随…

3 大 Python 库助力高效 PDF 文件压缩 - E

在日常工作中,压缩 PDF 文件是一项非常常见的任务。无论是为了节省存储空间,还是为了更快地上传、共享文件,控制 PDF 的体积都至关重要。 例如,美国部分电子诉讼系统要求上传的 PDF 文件必须小于 35 MB,而在医疗行…

三麦克风阵列近场定位MATLAB实现(TDOA+GCC方法)

一、系统架构设计 1. 硬件配置参数 % 麦克风阵列参数 c = 343; % 声速(m/s) fs = 48000; % 采样率(Hz) mic_pos = [0,0; 0.1,0; 0.1,0.05](@ref); % 三麦克风坐标(x,y)2. 信号流图 声源 → 麦克风1 → 预处…

Servlet的几种用法? - 教程

Servlet的几种用法? - 教程2025-10-20 16:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

2025年UV固化设备厂家推荐排行榜,UV面光源,UV LED点光源,UV LED面光源,UV LED固化机专业选购指南

2025年UV固化设备厂家推荐排行榜,UV面光源,UV LED点光源,UV LED面光源,UV LED固化机专业选购指南 随着工业4.0时代的深入发展,UV固化技术作为现代制造业的关键环节,正经历着从传统汞灯向LED技术的革命性转变。UV…

stm32和Zynq的中断抢占机制 - 实践

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

2025 年食品级润滑油脂厂家最新推荐榜单:聚焦纳米材料技术突破,甄选核心竞争力突出的企业

引言 在食品、制药、饮料等与民生健康紧密相关的行业中,食品级润滑油脂作为生产设备的 “血液”,其安全性、稳定性与适配性直接决定产品质量安全与生产效率。当前市场存在诸多痛点:部分产品难以平衡极端工况适应性与…

2025 年食品级润滑油源头厂家最新推荐排行榜:聚焦国产标杆企业,54 项专利加持,助力企业精准选品食品级润滑油液压油/食品级润滑油齿轮油/食品级润滑油烘焙设备润滑油厂家推荐

引言 当前食品、制药、饮料等行业高速发展,食品级润滑油作为保障设备稳定运转、守护食品安全的关键产品,其品质与供应稳定性直接影响企业生产效率与产品安全。然而,市场上存在国外品牌垄断推高采购成本、部分小型厂…

2025年精密弹簧厂家权威推荐榜:压缩弹簧、拉伸弹簧、异形弹簧专业制造商实力解析与选购指南

2025年精密弹簧厂家权威推荐榜:压缩弹簧、拉伸弹簧、异形弹簧专业制造商实力解析与选购指南 在现代工业制造体系中,精密弹簧作为基础却关键的机械元件,其性能质量直接影响着整个设备系统的可靠性与精度。随着高端装…