1. 程式人生 > >實現一個能夠對錶達式進行求值的控制檯程式

實現一個能夠對錶達式進行求值的控制檯程式

我這個專案的碼雲地址是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]

總結:通過這次專案的編寫,我體會到了對於我來說最重要的一點,那就是真的要學會管理自己的程式碼,在寫的過程中,我多次儲存了寫錯的程式碼,導致我無法撤回,還好在這之前我把之前的程式碼提交到了遠端程式碼倉庫中,要不然這將耗費我一個專案的大半時間。

好啦,我就寫這麼多啦,老師要求的有很多我還沒有在這裡寫出來,那是因為我覺得沒有必要寫出來,因為流程誰都明白,只是程式碼能不能寫出來的問題,我先把作業交了,上邊的這段程式碼我還沒有完全學會,我得去學了,對了在這之前我得先吃個飯,哈哈!