作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13326
这个作业的目标 通过结对项目,进一步理解软件开发的过程,同时将人引入团队作业
姓名 学号
郑深生 3123004768

没有队友

作业链接 witch250/studentexercise

PSP表格

Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
计划 5 5
· 估计这个任务需要多少时间 5 5
开发 555 1171
· 需求分析 (包括学习新技术) 90 80
· 生成设计文档 20 20
· 设计复审 5 10
· 代码规范 (为目前的开发制定合适的规范) 1 1
· 具体设计 20 10
· 具体编码 240 790
· 代码复审 10 20
· 测试(自我测试,修改代码,提交修改) 240 240
报告 120 145
· 测试报告 60 120
· 计算工作量 10 5
· 事后总结, 并提出过程改进计划 20 20
· 合计 721 1321

实现流程

数据存储:将生成的任意表达式储存为字符串,一个字符串就是一个完整的算式,存放进列表
函数流程:生成算式-->转换成逆波兰式-->计算

文件结构
main.py
calculator.py
check.py
fractioncalculation.py
write.py
othermath.py
diyhash.py
classerror.py

test.py

性能展示

对象:10000式子

测试结果也上传到了仓库

时间消耗

采用python的time库做测试,对n=10000,r=10得到约2.4s的结果

采用line_proliner进行测试,运行时间非常离谱,所以附加了time

采用line_profiler测试

在35s的测试时间中,可以看见上面(对列表的循环)和下面(对重复的检测)占用的时间最多,在35s的测试时间中分别占用14s,40.2%和13s,38.3%
其次分别是计算结果的函数,占10.1%;生成问题5.8%;逆波兰式3.2%。

不重要的改进

对于自己设计的函数,一开始对单个字符到数字的转换采用eval(),后来改用int(),在计算结果的函数中占用时间下降66%
那时还没有哈希函数,占用时间从30%降到了10%

代码覆盖率

内存

关键代码

逆波兰式代码

def ReversePolish(i):
S=[] #存放+-/(
L=[] #存放数字+-
/,并且是结果
for elem in i:
if(elem' '):
pass
if(elem
'0' or elem'1' or elem'2' or elem'3' or elem'4' or elem'5' or elem'6' or elem'7' or elem'8' or elem'9'):
L.append(elem)
elif(elem
'('):
S.append('(')
elif(elem')'): #弹出所有,直到左括号为止,包括'('
t=0
while(t!='('):
t=S.pop()
if(t
'('):
break
L.append(t)
else: #处理+-/
if S[]:
S.append(elem)
elif S[-1]
'(':
S.append(elem)
elif(elem'+'or elem'-'):
while S and S[-1]!='(' : #此 + or - 必须在下面
t=S.pop()
L.append(t)
S.append(elem)
elif(elem=='
'or elem'/'): # * or / 可以在 + or - 上面
while S and S[-1]!='(' and S[-1]!='+' and S[-1]!='-':
t=S.pop()
L.append(t)
S.append(elem)
while S!=[]: #弹出剩余
elem=S.pop()
if(elem
'('):
pass
else:
L.append(elem)
string='' #转成字符串
for i in L:
string+=i+' '
return string

分数当成算式处理

测试运行

给出算式和答案


对于10000条式子,你还可以看见如此有趣的结果




查结果

小结

没有勇气主动寻找队友,以及对此事的拖拉是最大的败笔,或许你还能在下次作业看见我
依旧是上次作业的毛病,没能做详细的分析和设计,导致边写边想,所以具体编码790min(合计13h多一点)
哈希函数是一拍脑子想出来的,我觉得对于能不能排除重复的式子有很大问题,因为不知道怎么验算
测试工具仍然是上次使用的,我认为不太好
测的有些草率,就像那张图,精力慢慢燃尽了
我不认为自己生成了小学生能做出来的四则运算题目,尽管它满足作业提出的要求
由于单干,个人认为没能达到作业的目标,但是确实锻炼了自己的能力

posted @ 2025-03-22 00:24  witch250  阅读(88)  评论(0)    收藏  举报