# 題目:利用python實現乙個計算器,可以計算小數複數等
import re
def calculator(string):
# 去除括號函式
def get_grouping(string):
flag = false
ret = re.findall('\(([^()]+)\)', string)
for i in ret:
temp = cal(i)
if temp:
string = re.sub('\(([^()]+)\)', temp[1], string)
flag = true
return flag, string
# 將三個優先順序集合,可以解決所有沒有括號的問題,如果計算成功返回true和替換後的string,如果沒有成功返回false
def cal(string):
flag = false
func_box = [priority_1, priority_2, priority_3]
for i in func_box:
while true:
ret = i(string)
if ret == false: break
else:
string = ret[1]
flag = true
return flag, string
# 第一優先順序計算冪運算
def priority_1(string):
ret = re.findall('-?\d+(?:\.\d+)?\*\*-?\d+(?:\.\d+)?', string)
if not ret: return false
for i in ret:
temp_li = i.split('**')
res = float(temp_li[0]) ** float(temp_li[1])
string = re.sub('-?\d+(\.\d+)?\*\*-?\d+(\.\d+)?', str(res), string, 1)
return true, string
# 第二優先順序計算乘除
def priority_2(string):
ret = re.findall('-?\d+(?:\.\d+)?[*/]-?\d+(?:\.\d+)?', string)
if not ret: return false
for i in ret:
if '/' in i:
temp_li = i.split('/')
res = float(temp_li[0]) / float(temp_li[1])
string = string.replace(i, str(res))
elif '*' in i:
temp_li = i.split('*')
res = float(temp_li[0]) * float(temp_li[1])
string = string.replace(i, str(res))
return true, string
# 第三優先順序計算加鍵
def priority_3(string):
ret = re.findall('-?\d+(?:\.\d+)?[+-]+?\d+(?:\.\d+)?', string)
if not ret: return false
for i in ret:
if '+' in i:
temp_li = i.split('+', 1)
res = float(temp_li[0]) + int(temp_li[1])
string = string.replace(i, str(res))
else:
temp_li = i.split('-', 1)
res = float(temp_li[0]) - float(temp_li[1])
string = string.replace(i, str(res))
return true, string
# 主邏輯
string = string.replace(' ','') # 去除輸入過程中的所有空格
res1, string_processed = get_grouping(string) # 先按照優先順序計算好所括號內的運算
res2, result = cal(string_processed) # 按照優先順序計算去除括號後的運算
if res1 == false and res2 == false: # 如果沒有進行字串的改變,返回false,字串輸入格式有誤
print('illegal input.')
else: print(result)
return
if __name__ == '__main__':
string = input('input:\n').strip()
calculator(string)
大作業 計算器
翁愷老師的計算器大作業 改掉了逆波蘭表示式的一些bug如不能算小數等等 現在是真正的計算器了!功能強大的計算器 可計算加減乘除乘方階乘,三角函式,反三角函式,自然對數,常用對數,高斯函式 floor 以e為底的指數函式 exp 如果函式後面是非負常數則不必加括號 如sin5,arcsin0.5等 如...
簡單計算器 Python
用python模擬簡單的計算器,實現python中的基本計算運算,具體方法為 分三行輸入,前兩行輸入數字,第三行輸入乙個運算子 包括 輸出運算結果。注意,如果除數為0,需要輸出 無法計算,請重新輸入運算子 並且重新輸入新的運算子。輸入樣例1 輸入樣例2 7 10 3 0 輸出樣例1 輸出樣例2 2....
棧的作業 簡單計算器
include include include include define max 15 define bool int typedef struct stack stack stack initstack s top 1 return s void destory stack s bool is...