如何用python編寫可使用cmd控制臺傳入參數的簡單四則算式計算器
一、項目碼雲地址是: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表:
如何用python編寫可使用cmd控制臺傳入參數的簡單四則算式計算器