實現一個能夠對錶達式進行求值的控制檯程式
我這個專案的碼雲地址是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
|
- 解題思路描述。即剛開始拿到題目後,如何思考,如何找資料的過程。
答:當我看到這個專案的時候,我的想法是,當輸入內容的時候要先判斷輸入的內容,是否符合算術表示式,符合之後開始運算,不符合就會給出提示。
在寫是否符合算術表示式,我想到了用正則表示式,但是我忘記了,於是我上網查詢了一下,並學習了大約一個小時,最後我寫出了只能判斷不帶負號的表示式,然後寫了一個大方法,裡邊包括了四個小方法,分別是加減乘除四個方法。
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]
總結:通過這次專案的編寫,我體會到了對於我來說最重要的一點,那就是真的要學會管理自己的程式碼,在寫的過程中,我多次儲存了寫錯的程式碼,導致我無法撤回,還好在這之前我把之前的程式碼提交到了遠端程式碼倉庫中,要不然這將耗費我一個專案的大半時間。
好啦,我就寫這麼多啦,老師要求的有很多我還沒有在這裡寫出來,那是因為我覺得沒有必要寫出來,因為流程誰都明白,只是程式碼能不能寫出來的問題,我先把作業交了,上邊的這段程式碼我還沒有完全學會,我得去學了,對了在這之前我得先吃個飯,哈哈!