小学四则运算(2.0版本)
一、项目要求
对第一版的四则运算进行升级,必须有PSP2.1标准步骤
升级方式(可多选)
1.功能升级 2.性能升级 3.界面升级 4.使用不同语言升级
二、项目代码
地址【GitHub】
三、升级成果
与1.0版本相比:
1.增加了题目的类型选择项 2.增加了有括号的题型 3.改进了真分数的生成方式 4.增加多个真分数运算的题型 5.使用了中缀转后缀的运算方式 |
四、PSP2.1表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 20 | 10 |
Estimate | 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 260 | 300 |
Analysis | 需求分析 (包括学习新技术) | 20 | 20 |
Design Spec | 生成设计文档 | 10 | 15 |
Design Review | 设计复审 (和同事审核设计文档) | 15 | 15 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 15 | 20 |
Design | 具体设计 | 15 | 10 |
Coding | 具体编码 | 100 | 150 |
Code Review | 代码复审 | 50 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 30 | 25 |
Test Report | 测试报告 | 25 | 25 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 15 | 15 |
合计 | 370 | 395 |
五、主要改进方法
5.1 respeace()函数
1 def respeace(): #转化为真分数 2 f1 = integer_score() 3 print(f1,'=',end = '') 4 n = eval(f1) 5 n = Fraction('{}'.format(n)).limit_denominator() #小数转化为分数 6 return n
5.2 calcRevPolishNotation(numList = [])函数
1 def calcRevPolishNotation(numList = []):#中缀表达式转后缀表达式步骤 2 ''' 3 1.遇到操作数:添加到后缀表达式中或直接输出 4 2.栈空时:遇到运算符,直接入栈 5 3.遇到左括号:将其入栈 6 4.遇到右括号:执行出栈操作,输出到后缀表达式,直到弹出的是左括号(注意:左括号不输出到后缀表达式) 7 5.遇到其他运算符:弹出所有优先级大于或等于该运算符的栈顶元素,然后将该运算符入栈 8 6.将栈中剩余内容依次弹出后缀表达式 9 ''' 10 11 zhan = [] 12 i = 0 13 while i < len(numList): 14 re = 0 15 if(numList[i].isdigit()): 16 zhan.append(numList[i]) # 执行第1步 17 else: 18 a = float(zhan.pop()) # 执行第2步 19 b = float(zhan.pop()) 20 if(numList[i] == '+'): 21 re = b + a 22 elif(numList[i] == '-'): 23 re = b - a 24 elif (numList[i] == '*'): 25 re = b * a 26 elif (numList[i] == '/'): 27 re = b / a 28 zhan.append(str(re)) 29 i += 1 30 return zhan.pop() # 执行第3步
5.3 zhongToList(str = '')函数
1 def zhongToList(str = ''): #中缀表达式字符串转换为列表 2 i = 0 3 numStr = '' 4 flag = False 5 numList = [] 6 while i < len(str): 7 if(str[i].isdigit()): 8 numStr += str[i] 9 flag = True 10 else: 11 if(flag): 12 numList.append(numStr) 13 numStr = '' 14 flag = False 15 numList.append(str[i]) 16 i += 1 17 if(flag): 18 numList.append(numStr) 19 return numList
六、运行结果
七、性能测试
测试四则运算结果的时间(大约为1s)
八、缺点
性能不佳,部分函数测试运行100w次运行的时间过长