農林漁牧網

您現在的位置是:首頁 > 林業

python語言實現逆波蘭表示式求值

2022-08-15由 南宮黍天閣 發表于 林業

字尾表示式怎麼求

01

題目

根據逆波蘭表示法,求表示式的值。有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另一個逆波蘭表示式。

輸入: [“2”, “1”, “+”, “3”, “*”]

輸出: 9

解釋: ((2 + 1) * 3) = 9

python語言實現逆波蘭表示式求值

02

原始碼

import sys

from collections import deque

def evalRPN(tokens):

st = deque() # 定義一個運算數棧

i = 0

while i < len(tokens): # 遍歷postexp

opv = tokens[i] # 從逆波蘭表示式(字尾表示式)中取一個元素opv

if opv == “+”: # 判定為“+”號

a = st。pop() # 退棧取數值a

b = st。pop() # 退棧取數值b

c = b+a # 計算c

st。append(c) # 將計算結果進棧

elif opv == “-”: # 判定為“-”號

a = st。pop() # 退棧取數值a

b = st。pop() # 退棧取 數值 b

c = b-a # 計算c

st。append(c) # 將計算結果進 棧

elif opv == “*”: # 判定為“*”號

a = s t。pop() # 退棧取數值a

b = st。pop() # 退 棧取 數 值b

c = b*a # 計算c

elif opv == “/”: # 判定為“/”號

a = st。pop() # 退棧取數值a

b = st。pop( ) # 退棧 取數值b

c = int(b/a) # 計算c

st。append(c) # 將計算結 果進棧

else: # 處理整數

st。append(int(opv)) # 將數值opv進棧

i += 1 # 繼續處理postexp的其他元素

return st[-1] # 棧頂元素即為求值結果

if __name__ == ‘__main__’:

tokens = sys。stdin。readline()。strip()。split(‘ ’)

print(evalRPN(tokens))

python語言實現逆波蘭表示式求值

03

重要語句提升

①from collections import deque

引入 棧 這一資料結構;

ps:如果執行過程中有什麼問題歡迎評論區諮詢小編!關注後回覆關鍵字:“逆波蘭表示式求值”可以獲得原始碼!