作业3
| 成员 | 左栋立3123004294 / 蔡梓欣3123004209 |
|---|---|
| 仓库链接 | https://github.com/A-comb-C/RJGC |
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13326 |
| 这个作业的目标 | 实现一个自动生成小学四则运算题目的命令行程序 |
PSP表
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 40 |
| · Estimate | · 估计这个任务需要多少时间 | 3 | 1 |
| Development | 开发 | 120 | 140 |
| · Analysis | · 需求分析 (包括学习新技术) | 5 | 5 |
| · Design Spec | · 生成设计文档 | 10 | 5 |
| · Design Review | · 设计复审 | 5 | 3 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 3 | 1 |
| · Design | · 具体设计 | 60 | 50 |
| · Coding | · 具体编码 | 20 | 15 |
| · Code Review | · 代码复审 | 5 | 5 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 20 | 10 |
| Reporting | 报告 | 5 | 5 |
| · Test Repor | · 测试报告 | 5 | 5 |
| · Size Measurement | · 计算工作量 | 3 | 1 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 15 | 15 |
| · 合计 | 329 | 341 |
代码结构
├── myapp.py # 主程序文件
├── README.md # 项目说明文档
├── Exercises.txt # 生成的题目文件
├── Answers.txt # 生成的答案文件
├── Grade.txt # 评测结果
运行方法
1. 生成题目
运行以下命令生成题目和答案文件:
python myapp.py -n <题目数量> -r <数值范围>
示例:
python myapp.py -n 10 -r 10
上述命令将生成 10 道数值范围在 0 到 9 之间的题目。
2. 评测答案
运行以下命令对比 Exercises.txt 和 Answers.txt,生成评分结果:
python myapp.py -e Exercises.txt -a Answers.txt
代码核心逻辑
-
生成题目
- 随机生成自然数和真分数。
- 使用递归方式生成符合规则的算术表达式。
- 确保运算过程中不会出现负数。
- 题目去重处理,避免生成等价题目。
-
计算答案
- 解析算术表达式。
- 计算分数加减乘除,确保格式正确。
- 采用
fractions.Fraction处理真分数,避免浮点数误差。
-
评测答案
- 读取
Exercises.txt和Answers.txt。 - 逐行比对计算结果,记录正确与错误题目。
- 生成
Grade.txt,格式清晰,方便查看。
- 读取
测试运行



项目小结
(1)结对编程的优势
在本次结对编程中,我们深刻体会到了团队协作的优势:
思维碰撞:两个人可以提供不同的视角,发现单人开发时容易忽略的问题。
代码质量提升:在代码审查(Code Review)过程中,相互指出潜在的错误,提高代码规范性。
效率提升:任务分工后,开发速度加快,比如一个人专注 数据结构设计,另一个人专注 算法实现,提高开发效率。
(2)我们在结对中的角色分工
在实际开发过程中,我们采用了 Driver & Navigator 角色切换模式:
Driver(驾驶员) 负责编写代码,实现具体逻辑。
Navigator(领航员) 负责思考全局设计,检查代码质量,并及时提出优化建议。
我们的具体分工如下:
A 负责 Fraction、Expression、ExerciseGenerate 的核心设计,确保数据结构合理性。
B 负责 calculator 计算逻辑的实现与优化,并完成 main.cpp 入口逻辑。
这种分工让我们在开发过程中 高效合作,同时也增强了代码的一致性。
浙公网安备 33010602011771号