实现一个能够对表达式进行求值的控制台程序

我这个项目的码云地址是https://gitee.com/wangzhiming/personal_project41678.git

下边这张表格记录了我预期做这个项目的时间和实际上消耗的时间,看得出来我写的速度还是赶不上我希望的速度,我的继续努力!!!

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

 

  1. 解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。

    答:当我看到这个项目的时候,我的想法是,当输入内容的时候要先判断输入的内容,是否符合算术表达式,符合之后开始运算,不符合就会给出提示。

      在写是否符合算术表达式,我想到了用正则表达式,但是我忘记了,于是我上网查询了一下,并学习了大约一个小时,最后我写出了只能判断不带负号的表达式,然后写了一个大方法,里边包括了四个小方法,分别是加减乘除四个方法。

  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]

总结:通过这次项目的编写,我体会到了对于我来说最重要的一点,那就是真的要学会管理自己的代码,在写的过程中,我多次保存了写错的代码,导致我无法撤回,还好在这之前我把之前的代码提交到了远程代码仓库中,要不然这将耗费我一个项目的大半时间。

好啦,我就写这么多啦,老师要求的有很多我还没有在这里写出来,那是因为我觉得没有必要写出来,因为流程谁都明白,只是代码能不能写出来的问题,我先把作业交了,上边的这段代码我还没有完全学会,我得去学了,对了在这之前我得先吃个饭,哈哈!

猜你喜欢

转载自www.cnblogs.com/wangzhiming980116/p/9917091.html