Python 大作業3 簡單計算器

2022-08-13 00:15:23 字數 2531 閱讀 7528

# 題目:利用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...