簡單數學計算器求值(Python)

2021-08-19 23:16:47 字數 2078 閱讀 8609

數學計算式是中綴表示式,所以先把中綴表示式轉換為字尾表示式,然後對字尾表示式進行求值。

字尾表示式: 又叫逆波蘭表示式 ,不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:(2 + 1) * 3 , 即2 1 + 3 *

class

stack

():def

__init__

(self):

self.items =

defisempty

(self):

return self.items ==

defpush

(self, item):

# 入棧

self.items.insert(0, item)

defpop(self):

# 出棧

return self.items.pop(0)

defpeek

(self):

# 取棧頂元素

return self.items[0]

defsize

(self):

# 棧的長度

return len(self.items)

import re

definfixtopostfix

(infixer):

# 建立運算子優先順序字典

proc =

opstack = stack()

postlist =

# tokenlist = infixer.split()

tokenlist = re.findall('[\+\-\*\/\(\)]|[\d]+', infixer) # 使用正規表示式解析公式

for token in tokenlist:

if re.match('\d+', token): # 如果是數字先把數字先放入輸出結果的列表

elif token == '(': # 如果是「(」放入棧中

opstack.push(token)

elif token == ")": # 如果遇到 「)」出棧

toptoken = opstack.pop()

while toptoken != "(": # 如果彈出的元素不是 「(」

toptoken = opstack.pop() # 彈出棧中的值

else:

while

not opstack.isempty() and (proc[opstack.peek()] > proc[token]):

# 如果棧不為空且棧頂的的元素優先順序大於token, 彈出棧頂元素並寫入結果輸出列表

opstack.push(token) # 把 token push 進棧

while

not opstack.isempty(): # 如果棧不為空, 把棧裡的元素都彈出輸出到列表

return postlist

defexpression_to_value

(expression):

stack_value =

for item in expression: #遍歷字尾表示式元素

if item in ["+", "-", "*", "/"]: # 如果是運算子, 彈出列表中最後的兩個元素

n1 = stack_value.pop()

n2 = stack_value.pop()

result_value = calc(n1, n2, item) # 呼叫計算函式

else:

return stack_value[0]

defcalc

(n1, n2, op):

if op == '+':

return n1 + n2

if op == '-':

return n2 - n1

if op == '*':

return n1 * n2

if op == '/':

return n2 / n1

C Math 簡單數學計算

object math 為三角函式 對數函式和其他通用數學函式提供常數和靜態方法。序號常量含義值 1math.pi 3.14159265358997 2math.e e2.71828182845905 序號函式 含義示例 1math.pow a,b a的b次方 math.pow 2,3 結果為8 2...

簡單計算器 Python

用python模擬簡單的計算器,實現python中的基本計算運算,具體方法為 分三行輸入,前兩行輸入數字,第三行輸入乙個運算子 包括 輸出運算結果。注意,如果除數為0,需要輸出 無法計算,請重新輸入運算子 並且重新輸入新的運算子。輸入樣例1 輸入樣例2 7 10 3 0 輸出樣例1 輸出樣例2 2....

python作為計算器 數學用法

1.基本的加減乘除與取餘運算 print 5 10 15 print 5 10 5 print 5 10 50 print 10 5 2.0 print 5 3 2 補充 如果想保留位數需要用到round函式 如果不指定的話預設取整 print 100 10 10.0 print round 100...