小学四则运算(2.0版本)

小学四则运算(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次运行的时间过长

posted @ 2020-09-28 10:47  xiayiLL  阅读(154)  评论(0编辑  收藏  举报