=================

这个作业属于哪个课程 软件工程
作业要求 作业要求
Github Github链接
小队成员 3118005433 张家维、 3118005431 严为炜
这个作业的目标 熟悉结对编程,实现自动生成小学四则运算题目程序,对给定的题目文件和答案文件,判定答案中的对错并进行数量统计

核心功能实现

1. 生成题目

实现思路:
  • 随机生成参数列表和运算符列表

  • 判断算式是否存在括号

    ​ if 存在不括号:

    ​ 返回获取到的无括号算式

    ​ else:

    ​ 返回获取到的括号算式

  • 算式存在括号

    • 括号数为1时

      利用 random.randint(0, len(op_list) – 1)来决定左括号的位置
      利用 random.randint(left_bracket_index + 1, len(parameter_list) – 1)来决定右括号的位置

    • 括号数为2时

      随机获取括号类型

      if 括号类型为并列:

      ​   循环获取参数列表和运算符列表获取到算式时,在相应的的位置插入括号,即:( A +B ) + ( C + D )

      else 括号类型为嵌套:

      ​   先确定外层括号的位置,再利用递归,传递外层括号里的子字符串,从而确定内从括号,最终得到嵌套括号的算式

流程图

代码截图

2. 计算

实现思路
 先处理算式,得到参数和操作符组成的列表,例如:' 1 + 2' 处理成 ['1', '2', '3']
 
 创建数字栈和操作符栈
 
 进行循环获取算式列表
 
 	如果是数字则压入数字栈
 
 	如果是操作符
 		while True 的循环
 
 			如果操作符栈为空,或者运算符为 '(' 时
 				入栈,break
 
 			如果当前操作符的优先级比栈顶操作符的优先级高
 				入栈,break
 
 			如果当前操作符为 ')',且栈顶操作符为 '('
 				'(' 出栈,丢掉 ')',break
 
 			如果当前操作符的优先级比栈顶操作符的优先级低
             
 				获得数字栈最后两个元素、操作符栈最后一个元素,进行计算
                 
 				如果除数为零、被除数大于除数、结果为负数
                 	return Error
 
                 得到结果入栈
                 
 if 循环之后如果数字栈和操作符栈还有内容
 	while 直到操作符栈不为空:
 		计算
 		如果除数为零、被除数大于除数、结果为负数,return Error
         得到的结果入栈
 
 数字栈的元素就是计算得出的结果
流程图

代码截图

3. 多线程查询是否存在生成重复问题

部分代码截图


功能运行

命令行参数

python Myapp.py [args|args]
[args]
├─ -h –help # 输出帮助信息
├─ -n # 指定生成表达式数量,默认10
├─ -r # 指定生成表达式各个数字的取值范围,默认10
├─ -e # 需和-a参数共同使用进行批改,指定练习文件
├─ -a # 需和-e参数共同使用进行批改,指定答案文件
└─ -g # 开启GUI

命令行界面

1. -h

2. -r -n (也可以只输入一个参数)

3. -e -a (需要同时输入两个参数)

GUI 界面(-g)

采用了多线程的界面,任何操作不会阻塞其他操作,例如:可以在生成答案的同时批改作业

1. 生成题目以及在线做题(有验证答案和查看答案两个功能)

2. 设置题目数量以及范围(默认两个值都为10)

3. 检查题目答案(输入两个文件路径即可开始检查)

异常处理

命令行输入参数错误


GUI输入错误



性能分析

GUI界面性能


生成题目


检查答案对错


PSP表格

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

项目小结

严为炜:

结对感受:

  • 这是我第一次接触结对编程,通过结对编程,我们能及时地对功能需求进行讨论,同时将每个功能模块化,各自实现相应的功能,提高了编程效率。

对彼此的闪光点或建议

  • 效率高,对 IDE 的熟练使用大大提高了我们编程的效率。
     
  • 对问题有独特的见解,善于发现问题

张家维:

结对感受:

  • 第一次接触,受益良多。在结对编程时,我们将需求列出,根据难度不同从而安排开发流程,每个人根据自己能力特出点
    不同而去做不同的需求,再通过交流约定我们每个人的接口,做到最大化的取长补短。最大的收获是提高了沟通能力,简化开发流程,提高效率

对彼此的闪光点或建议

  • 思路清晰,对解决问题有多种思路
     
  • 代码规范,注释清晰

版权声明:本文为zjw527原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zjw527/p/13794592.html