Python正則表達計算器

2022-07-19 02:42:09 字數 2996 閱讀 9506

計算器

# author : ryoma

# time : 17:39

import re

def add(string):

equ = string

flag = true

while flag:

is_right = re.search('[\-]?\d+\.?\d*\+[\-]?\d+\.?\d*', equ)

if is_right:

old = is_right.group()

# 計算加法

nums = old.split('+')

sum = float(nums[0]) + float(nums[1])

new = str(sum)

equ = equ.replace(old,new)

else:

flag = false

return equ

def reduce(string):

equ = string

flag = true

while flag:

is_right = re.search('[\-]?\d+\.?\d*-[\-]?\d+\.?\d*', equ)

if is_right:

old = is_right.group()

# 計算減法

count = len(re.findall('-',old))

if count==1:

nums = old.split('-')

sum = float(nums[0]) - float(nums[1])

new = str(sum)

equ = equ.replace(old, new)

elif count==2:

nums = old.split('-')

sum = - float(nums[1]) - float(nums[2])

new = str(sum)

equ = equ.replace(old, new)

else:

flag = false

return equ

def ride(string):

equ = string

flag = true

while flag:

is_right = re.search('[\-]?\d+\.?\d*\*[\-]?\d+\.?\d*', equ)

if is_right:

old = is_right.group()

# 計算乘法

nums = old.split('*')

sum = float(nums[0]) * float(nums[1])

new = str(sum)

equ = equ.replace(old,new)

else:

flag = false

return equ

def divide(string):

equ = string

flag = true

while flag:

is_right = re.search('[\-]?\d+\.?\d*/[\-]?\d+\.?\d*', equ)

if is_right:

old = is_right.group()

# 計算除法

nums = old.split('/')

if nums[1] == '0':

exit('0不能做被除數!')

sum = float(nums[0]) / float(nums[1])

new = str(sum)

equ = equ.replace(old,new)

else:

flag = false

return equ

# 判斷優先順序 按照優先順序進行計算:括號》乘除法》加減法

def pri(equ):

flag = true

while flag:

# 查詢最裡層括號

ret = re.search('\([^()]+\)', equ)

if ret:

# 記錄查詢的式子

old = ret.group()

# 去除括號

new = old.replace('(', '')

new = new.replace(')', '')

# 計算-先乘除後加減

new = ride(new)

new = divide(new)

new = add(new)

new = reduce(new)

# 替換方程式

equ = equ.replace(old, new)

else:

flag = false

else:

equ = ride(equ)

equ = divide(equ)

equ = add(equ)

equ = reduce(equ)

return equ

# 格式處理

def check(equ):

equ = equ.replace(' ','')

if len(re.findall('[^0-9\-+/*\(\).]', equ)):

print("請輸入正確的表示式!")

elif not equ.count('(') == equ.count(')'):

print("存在未閉合的括號!")

else:

equ = pri(equ)

return equ

if __name__ == '__main__':

print("歡迎使用計算器".center(50,'-'))

while 1:

equ = input("輸入你要計算的式子:")

equ = check(equ)

print(equ)

python正則練習 計算器

1 實現加減乘除及拓號優先順序解析 2 使用者輸入帶有加減乘除小括號的複雜運算公式後,必須自己解析裡面的 符號和公式,運算後得出結果,結果必須與真實的計算器所得出的結果一致 coding utf 8 import re def check string 檢查是否有其他特殊字元字母,檢查表示式合法性 ...

計算器 (正規表示式

寫個計算器,輸入完全符合要求的 數字組成的表示式,計算相應結果。思路分先後順序遞迴拆解式子。先對 符合進行遞迴,直到全是 表示式,再對 表示式進行遞迴直到只有數字。最後返回計算。include using namespace std define maxn 100005 define maxm 10...

python正則實現計算器功能

coding utf 8 author gogh time 2017 12 4 20 16 email 361910002 qq.com import re def operator update formula 對formula公式進行 去除空字元,更新運算子處理 formula formula....