四則運算的遞迴python實現

2021-08-11 14:17:55 字數 1776 閱讀 5929

本文採用中國慕課網上的《程式設計與演算法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 第四個元素為運算子 由於 的優先順序大於棧頂元素 所以將其加入到運算子棧中 第五個元素為...