python處理算術表示式

2021-06-21 12:12:56 字數 1395 閱讀 6347

假設有這樣的要求:輸入乙個形如"12+6.3/3+2*4-7"的字串,求出其運算結果

對於這種問題有兩種辦法:

1、使用python自帶的庫函式eval,如下所示:

2、第二種方法當然是自己寫乙個函式去處理了

處理這個問題的基本思路是:

第一步:定義兩個變長陣列a、b,a用來存放輸入字串中的數字,b用來存放字串中的運算子

第二步:遍歷b,當b[i]=='*'、'/'、'%'其中之一時,a[i]=a[i](*或/或%)a[i+1],然後將b[i]從陣列b中移除,a[i+1]從a中移除

第三步:此時b中只有『+』、『-』兩種運算子,依次計算即可

例如字串s="'12-3.6*2+8.4/4+2'"

此時陣列a=[12,3.6,2,8.4,4,2]

陣列b=['-','*','+','/','+']

第一次遍歷,當 i=1時,b[i]='*',故a[i]=a[i]*a[i+1]=3.6*2=7.2,b.remove(b[i]),a.remove(a[i+1])

此時a=[12,7.2,8.4,4,2],b=['-','+','/','+']

第二次遍歷,當i=2時,b[i]='/',故a[i]=a[i]/a[i+1]=8.4/4=2.1,b.remove(b[i]),a.remove(a[i+1])

此時a=[12,7.2,2.1,2],b=['-','+','+']

接下來因為只剩下加減操作,不存在優先順序高低問題,依次執行即可

部分**如下:

以上演算法是我閒暇時間寫的,限於本人水平,這個演算法還有一些不完善的地方,如:

1、沒有做異常的處理

2、沒有考慮到『()』這一運算符號

模擬計算機處理算術表示式過程

從鍵盤上輸入算術表示式串 只含 運算子,允許含括號 輸出算術表示式的值。設輸入的表示式串是合法的。演算法分析 建立兩個棧,乙個是運算元棧 number 乙個是運算子棧 symbol 根據運算子的優先順序對兩個棧進行相應的操作。如下 include include include includeusi...

7002 模擬計算機處理算術表示式過程

time limit 3 second memory limit 2 mb 問題描述 從鍵盤上輸入算術表示式串 只含 運算子,允許含圓括號,運算數為整型 實型常量 輸出算術表示式的值。設輸入的表示式串是合法的。輸入為一行算術表示式串 輸出一行,算術表示式的值 輸出兩位小數,整數部分按實際位數輸出,最...

算術表示式

引用標頭檔案 include include include using namespace std typedef int elemtype const int stack init size 100 儲存空間的初始化分配量 const int stackincrement 10 儲存空間分配增量...