实现一个能够对表达式进行求值的控制台程序
下边这张表格记录了我预期做这个项目的时间和实际上消耗的时间,看得出来我写的速度还是赶不上我希望的速度,我的继续努力!!!
PSP2.1 |
Personal Software ProcessStages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
480 |
240 |
Estimate |
估计这个任务需要多少时间 |
480 |
240 |
Development |
开发 |
150 |
180 |
Analiysis |
需求分析(包括学习新技术) |
60 |
120 |
Design Spec |
生成设计文档 |
20 |
10 |
Design Review |
设计复审 |
0 |
0 |
Coding Standard |
代码规范(为目前的开发制定合适的规范) |
20 |
5 |
Design |
具体设计 |
20 |
5 |
Coding |
具体编码 |
60 |
120 |
Code Review |
代码复审 |
60 |
100 |
Test |
测试(自我测试,修改代码,提交修改) |
30 |
20 |
Reporting |
报告 |
0 |
0 |
Test Repor |
测试报告 |
0 |
0 |
Size Measurement |
计算工作量 |
0 |
0 |
Postmortem & Process Improvement Plan |
事后总结,并提出过程改进计划 |
60 |
60 |
合计 |
480 |
620
|
- 解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。
答:当我看到这个项目的时候,我的想法是,当输入内容的时候要先判断输入的内容,是否符合算术表达式,符合之后开始运算,不符合就会给出提示。
在写是否符合算术表达式,我想到了用正则表达式,但是我忘记了,于是我上网查询了一下,并学习了大约一个小时,最后我写出了只能判断不带负号的表达式,然后写了一个大方法,里边包括了四个小方法,分别是加减乘除四个方法。
2.设计实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?
答:在我设计的过程中,我一共建立了3个文件,一个是判断输入的内容,另一个是计算的文件,最后一个是主要的运行文件,过程是这样的,首先在命令行输入算是之后,要引用判断输入的内容的文件,通过判断之后是引用计算的文件,然后得出的结果,打印到屏幕上。
3.展示你程序中消耗最大的函数。
下面的代码是我写的过程中最费劲的,因为要考虑很多因素,这里的代码大部分都是我在网上找的,我读起来很费劲,只看懂了一部分。
def getValue(exp): def value(exp, i): deque = [] pre = 0 while i < len(exp) and exp[i] != ')': if ord(exp[i]) >= ord('0') and ord(exp[i]) <= ord('9'): pre = pre * 10 + int(exp[i]) i += 1 elif exp[i] != '(': addNum(deque, pre) deque.append(exp[i]) i += 1 pre = 0 else: bra = value(exp, i + 1) pre = bra[0] i = bra[1] + 1 addNum(deque, pre) return [getNum(deque), i] def addNum(deque, pre): if deque: top = deque.pop() if top == '+' or top == '-': deque.append(top) else: cur = int(deque.pop()) pre = cur * pre if top == '*' else cur / pre deque.append(pre) def getNum(deque): res = 0 add = True while deque: cur = deque.pop(0) if cur == '+': add = True elif cur == '-': add = False else: res += int(cur) if add else -int(cur) return res return value(exp, 0)[0]
总结:通过这次项目的编写,我体会到了对于我来说最重要的一点,那就是真的要学会管理自己的代码,在写的过程中,我多次保存了写错的代码,导致我无法撤回,还好在这之前我把之前的代码提交到了远程代码仓库中,要不然这将耗费我一个项目的大半时间。
好啦,我就写这么多啦,老师要求的有很多我还没有在这里写出来,那是因为我觉得没有必要写出来,因为流程谁都明白,只是代码能不能写出来的问题,我先把作业交了,上边的这段代码我还没有完全学会,我得去学了,对了在这之前我得先吃个饭,哈哈!