本文採用中國慕課網上的《程式設計與演算法2》郭老師的方法進行。
問題:(1+(2*3+4)/2+4/2)程式用來解決這種四則運算,全部是整數。
首先,清晰下解決的問題。這是乙個表示式子,他是由項組成,項之間的運算是可以相加減。項是由因子組成,因子之間可以乘或者除。因子有兩種情況,一種是乙個整數,或者是乙個表示式,例如,(1+2+3)×3,其中前面的(1+2+3)就是乙個表示式。
因此,這種邏輯關係非常清晰,也利於接下來寫程式。主要由三個函式組成,表示式函式,項函式term_value,因子函式factor_value。函式讀字串,然後返回先計算出的結果值和剩餘的表示式。程式**如下:
def calculate(a):
result,a = term_value(a) # read the first term
if len(a)==0:
return result,a
boo = true
i =0
while len(a)>0 and boo: #把表示式的所有項追個檢查出來
if a[i] =='+': #加
a = a[1:]
res,a = term_value(a)
result+=res
elif a[i]=='-': #減
a = a[1:]
res,a = term_value(a)
result-=res
elif a[i] == ')' : #這個部分處理的不好,因為下面去掉了(,沒有去掉),所以這裡特地去掉了。郭老師的c++程式貌似沒有這個過程
a = a[1:]
else:
boo = false
return result,a
def term_value(a): #把所有項的因子全部檢查出來,比如1*2*3*4/5*(1+2)
if len(a) ==1:
return int(a),'' #這段似乎重複了
result,a= factor_value(a) #開始檢查第乙個因子,把運算結果都疊加都這個上
boo = true
i =0
while len(a)>0 and boo: #其餘因子,並把結果跟第乙個相乘或者相除
if a[i]=='*': #乘
a = a[1:]
result = factor_value(a)[0]*result
a = factor_value(a)[1]
elif a[i]=='/': #除
a = a[1:]
result = result/factor_value(a)[0]
a = factor_value(a)[1]
else:
boo = false
return result,a
def factor_value(a): #檢查因子
if a[0]=='(': #因子是乙個表示式
a = a[1:]
return calculate(a)
else: #因子是乙個整數的情況
s = 0
i = 0
while i
python四則運算程式 四則運算(Python)
四則運算程式 一 資訊 二.題目要求 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 除了整數以外,還要支援真分數的四則運算,例如 1 6 1 8 7 24 程式要求能處理使用者的輸入,判斷對錯,累積分數 程式支援可以由使用者自行選擇加 減 乘 除運算 三 import random...
實現四則運算
總結最近在看資料結構,遇到第乙個實際棧的應用,記錄 將平時的四則運算表示式又稱為中綴表示式轉化為字尾表示式。遇數字輸出,遇符號進棧,符號優先順序低於棧當前符號則輸出,輸出直到同等優先順序符號。例 9 3 1 2 輸出 棧 9 in 9 in 9 3 9 3 in 9 3 1 9 3 1 in 右括號...
四則運算 python
中綴表示式9 3 2 1 轉為字尾表示式思路9 3 2 1 設立乙個運算子棧和字尾表示式棧 第乙個元素為數字9,加入字尾表示式棧 9 第二個元素為運算子 加入到運算子棧 第三個元素為數字3,字尾表示式棧 9 3 第四個元素為運算子 由於 的優先順序大於棧頂元素 所以將其加入到運算子棧中 第五個元素為...