1. 程式人生 > >【小程序】計算器(使用正則表達式實現)

【小程序】計算器(使用正則表達式實現)

fin lag pre racket 公式 優先級 += == 取數

功能:

  1. 實現加減乘除及拓號優先級解析
  2. 用戶輸入
    1-2*((60-30+(-40/5)*(9-2*5/3-2*(-18.3/3-(5*2+3+(-2*3)*(-7-1)/(5*7)*2)+2/6*7)+(-6+5+1)-7/3*99/4*(-2998)/3+10*568/14))-(-4*3)/(16-3*2))+(2+3*2)+(2-3)

    類似公式後,通過正則表達式解析裏面的(),+,-,*,/符號和公式,運算後得出結果

# Author:q1.ang
import re
content=input(‘‘‘
- - - 計算器 - - -
輸入:
‘‘‘).strip()
# content=‘1-2*((60-30+(-40/5)*(9-2*5/3-2*(-18.3/3-(5*2+3+(-2*3)*(-7-1)/(5*7)*2)+2/6*7)+(-6+5+1)-7/3*99/4*(-2998)/3+10*568/14))-(-4*3)/(16-3*2))+(2+3*2)+(2-3)‘
def calculation(find_list,content): ‘‘‘ 計算find_list中的式子 :param find_list: 正則表達式索引到的列表 :param content: 原計算式 :return: 計算後的計算式 ‘‘‘ for i in find_list: print(計算式:,i) result=0 if * in i or / in i:#判斷是否含有乘除號 num = re.findall([\-\d\.]+
,i) #提取數字 symbol=re.findall([*/],i) #提取運算符,*/ print(num:, num) print(symbol:, symbol) for i2 in range(len(symbol)): #循環計算,num1為數字1,num2為數字2,sym為運算符 print(計算次數:, i2 + 1) num1=num[i2] num2=num[i2 + 1] sym
=symbol[i2] if sym == *: num[i2 + 1] = float(num1) * float(num2) elif sym == /: num[i2 + 1] = float(num1) / float(num2) if i2 == (len(symbol) - 1): result = num[i2 + 1] print(結果:, result) else:#加減運算 num=re.findall(\-{0,1}[\d\.]+,i) #提取數字 for i3 in num: result+=float(i3) print(結果:, result) content=content.replace(i,str(result),1) #替換 return content def replace_symbol(content): ‘‘‘ 替換重復相連的運算符 :param content: 原計算式 :return: 替換後的計算式 ‘‘‘ content = content.replace(++, +) content = content.replace(--, +) content = content.replace(-+, -) content = content.replace(+-, -) content = content.replace(*+, *) content = content.replace(+*, *) content = content.replace(/+, *) content = content.replace(+/, *) return content
stop_flag=True content1=‘‘ while stop_flag: find_mul_div = re.findall((?:[\d\.]+(?:[*/]\-|[*/]))+[\d\.]+,content) #匹配所有乘除法,2*3/4 content=calculation(find_mul_div,content) content=replace_symbol(content) print(content) find_bracket = re.findall(\([+\-*/\d\.]+\),content) #匹配最內括號裏的內容,2*3/4 content=calculation(find_bracket,content) content=replace_symbol(content) print(content) if content1==content: #運算至只有加減法 last=[content] content = calculation(last,content) stop_flag=False content1 = content print(=,content)

【小程序】計算器(使用正則表達式實現)