計算器
# 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....