这个作业属于课程 | 软件工程 |
---|---|
这个作业的要求在哪里 | 结对项目 |
这个作业的目标是 | 实现一个自动生成小学四则运算题目的命令行程序 |
成员 | 3118005408 方俊涛 、3118005409 冯宇航 |
文章目录
PSP
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 470 | 455 |
· Analysis | · 需求分析 (包括学习新技术) | 150 | 120 |
· Design Spec | · 生成设计文档 | 30 | 20 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 15 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
· Design | · 具体设计 | 30 | 20 |
· Coding | · 具体编码 | 150 | 130 |
· Code Review | · 代码复审 | 30 | 20 |
·Test | · 测试(自我测试,修改代码,提交修改) | 40 | 120 |
Reporting | 报告 | 75 | 80 |
· Test Report | · 测试报告 | 25 | 50 |
· Size Measurement | · 计算工作量 | 20 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 20 |
合计 | 575 | 555 |
效能分析
花费时间:30min
egg :python main.py -r 50 -n 1000
改进前:
通过pycharm自带的效能分析工具来看,我们的程序在creQuestion()上花费的时间是比较多的,原因是该函数在实现生成表达式时,调用了self.isRepeat(expressionList, expression) 进行查重检测,此步奏涉及到大量的遍历二叉树
def creQuestion(self):
"""
表达式生成主函数
"""
expNum = self.expressionNum
expressionList = []
i = 0
while i < expNum:
random_num_operation = random.randint(1,self.operCount) #运算符的数目
is_need_parenteses = random.randint(0, 1) #是否需要加括号
number_of_oprand = random_num_operation + 1 # 操作数比操作符的数目多1
exp = []
for j in range(random_num_operation + number_of_oprand):
if j % 2 == 0:
# 随机生成操作数(含分数)
exp.append(self.getOperNum()['operStr'])
if j > 1 and exp[j - 1] == '÷' and exp[j] == '0':
while True:
exp[j - 1] = self.generateOperation()
if exp[j - 1] == '÷':
continue
else:
break
else:
# 生成运算符
exp.append(self.generateOperation())
if j > 3:
if exp[j-2] == '÷' : #为了子表达式为真分数,÷左右又括号除外
if exp[j-1] > exp[j-3]:
t = exp[j-1]
exp[j - 1]