结对项目——小学四则运算题目自动生成器
这个作业属于哪个课程 | <计科22级34班> |
---|---|
这个作业要求在哪里 | <结对项目> |
这个作业的目标 | <实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)> |
团队成员 | <杨富国(3122004587)、李思柔(3222004638)> |
Github项目地址 | https://github.com/wWchao-111/Myapp |
一、PSP表
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 90 | 90 |
· Estimate | · 估计这个任务需要多少时间 | 45 | 60 |
Development | 开发 | 120 | 150 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 60 |
· Design Spec | · 生成设计文档 | 60 | 60 |
· Design Review | · 设计复审 | 60 | 60 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 60 |
· Design | · 具体设计 | 60 | 60 |
· Coding | · 具体编码 | 30 | 30 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 180 | 150 |
Reporting | 报告 | 60 | 60 |
· Test Repor | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmorte· 合计m & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
· 合计 | 955 | 970 |
二、设计实现过程
共7个模块:
main():用于命令行输入输出的对接,包含整体运行逻辑、表达式的写入写出和答案比对。
random_fraction():随机生成一个数,可能是分数也可能是整数。
random_expression():生成全部表达式。
is_valid():判断生成的表达式是否合理。
genetate_expressions():生成最终的总表达式。
evaluate():计算表达式的值。
grade():比对题目和答案是否正确。
流程图:
三、代码说明:
1.核心代码:
2.分析:
生成随机数random_fraction():
定义一个函数random_fraction(max_denominator),用于生成一个随机数。
此函数接收一个最大分母值 max_denominator,生成一个随机分数。分子的范围从 0 到 max_denominator - 1,而分母则从 1 到 max_denominator(避免分母为零)。
函数内部使用random.randint()生成两个随机整数作为分子和分母,然后使用fractions.Fraction()创建一个分数对象并返回。
生成表达式random_expression():
定义一个函数random_expression(max_denominator, max_operators),用于生成一个随机的数学表达式。
此函数接收两个参数:max_denominator表示分母的最大值,max_operators表示操作符的最大数量。
函数首先生成一个随机分数作为表达式的第一个元素,然后在循环中随机选择操作符(加、减或乘)并生成另一个随机分数,将它们添加到表达式中,最后返回生成的表达式字符串。(操作符的数量在 1 到 max_operators之间随机决定)
检查表达式合法性is_valid():
定义一个函数is_valid(expression),用于检查表达式是否合法。
这个函数接受一个表达式字符串作为参数,将其分割成各个部分,然后检查每个操作符前后的分数是否符合四则运算的规则。例如,如果操作符是-,那么应确保被减数不小于减数;如果操作符是/,那么应确保除数不为零。如果所有操作符都符合规则,则返回True,否则返回False。
四、测试运行
测试模块代码:
五、运行结果
Exercises.txt(题目数量:10,范围:10)是题目。
Answers.txt是答案。
Grade.txt是结果。
用生成的题目文件和答案文件做比对测试:
交换第3题和第4题的答案后,grade输出第3、4题错误,其余正确:
六、效能分析
由此可以看出:生成随机数random_fraction是最耗时的。
七、项目小结
杨富国:
经过这次项目,我深刻了解到一个设计文档的重要性,当对项目进行分析设计模块的大体框架后,代码实现的进度就快了许多,剩下的更多是模块功能的微调与测试。
第一次的结对项目更让我感受到了团队合作中分工与沟通的重要性,明确的分工让我们可以节省很多时间,也让我们感受到了团队合作中交流的重要性
李思柔:
这是我第一次与人合作完成一个项目,刚开始又有点不适应,但在一次次磨合中我们还是完成了这次结对项目,我意识到在团队工作中共同协作和沟通的重要性,也发现两个人想问题和做决策比一个人的效率要快得多。感谢我的搭档!是他帮助了我很多才完成这次结对项目,本人在此郑重鸣谢!