數學計算式是中綴表示式,所以先把中綴表示式轉換為字尾表示式,然後對字尾表示式進行求值。
字尾表示式: 又叫逆波蘭表示式 ,不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:(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...