结对项目:自动生成小学四则运算题目程序

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

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

核心功能实现

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.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划10080
· Estimate· 估计这个任务需要多少时间10080
Development开发16802110
· Analysis· 需求分析 (包括学习新技术)4030
· Design Spec· 生成设计文档10070
· Design Review· 需求分析 (包括学习新技术)80100
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)6090
· Design· 具体设计100120
· Coding· 具体编码8001050
· Code Review· 代码复审250300
· Test· 测试(自我测试,修改代码,提交修改)250350
Reporting报告10090
· Test Repor· 测试报告2020
· Size Measurement· 计算工作量2020
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划6050
· 合计18802280
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值