如何用python編寫可使用cmd控制檯傳入引數的簡單四則算式計算器
阿新 • • 發佈:2018-11-08
一、專案碼雲地址是:https://gitee.com/Steven_me/personal_project41656
二、PSP預計表:
三、簡單的程式流程圖:
四、下面附上程式部分執行程式碼樣式僅限參考(關鍵函式已將重要引數缺失或替換掉):
1.定義去除括號和返回運算值部分:
1 def quchu(**):
2 while 1:
3 ** = re.search(r'\([^(]*?\)',**)
4 if **:
5 re_string = **.group()
6 re_sj = suanfa(re_string.strip('()'))
7 ** = **.replace(re_string,str(**))
8 **
9 break
10 re_sj = suanfa(string)
11 return float(**)
View Code
2.定義主要演算法部分,演算法部分優先處理乘除法,如果條件不滿足就算加減法(使用正則運算優化):
1 def suanfa(**):
2 while 1:
3 ** = re.search(r' \d+\.*?\d*[*/]\-?\d+\.?\d*', **)
4 if **:
5 chengchu_string = **.group(456)
6 **r = chengchu(chengchu_string)
7 re_string = re_string.replace(chengchu_string, str(r**))
8 re_string =chulifuhao(re_string)
9 **
10 break
11 **m = re.findall(r'[+-]?\d+\.?\d* ', **)
12 if len(num) > 1:
13 my*** = 0
14 for i in num:
15 my*** += float(i)
16 return my***
17 else:
18 return ***[0]
View Code
3.定義單元演算法處理乘除法:
1 def chengchu(~~):
2 if '*' in ~/~:
3 ~,~ = ~*~.split('*')
4 return float(~)*float(~)
5 if '/' in ~/~:
6 ~, ~ = ~*~.split('/')
7 return float(~)/float(~)
View Code
4.定義最後的處理符號:
因為需要滿足cmd傳參,而命令列的第0未是為檔案路徑,所以算式在第1位,最後使用sys.argv[1]方法進行命令列傳參,計算器支援帶括號的混合運算,程式的實際執行結果:
五、開發小結
遇到的困難:
1.前期版本的演算法部分程式碼未經過正則運算優化導致臃腫,緩慢,甚至出錯,不得已重構。。。。
2.需求分析出錯,本來以為不用eval()可以很快寫出來,沒想到真的是有點想的太簡單了。。。
3.沒有做出正確的程式碼功能,導致在寫程式碼的時候實現了“負優化”。。。
4.python的eval()函式真的好用!
得到的收穫:
1.學習到了正則運算的好處,掌握並運用。
2.python真的是一門比較好用的程式語言,雖然它現在對陣列型別規範的很嚴格。
3.python的eval()函式真的不錯!
附上傳說中的用eval()函式寫的程式碼(僅供參考):
1 import sys 2 re = sys.argv[1] 3 print (eval(re))View Code
程式執行結果:
六、單元測試:
單元通過的結果:python程式因為使用過正則運算簡化過,結果使用float進行轉換,可以保留到小數點的後一位,可以轉換符號,任意加減乘除都可以,下面是單元測試結果:
單元未通過的結果:因為最後輸出的是float值,所以當有string值,就會報錯。
七、最後的PSP表: