小程序计算器(使用正则表达式实现)

Posted q1ang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序计算器(使用正则表达式实现)相关的知识,希望对你有一定的参考价值。

功能:

  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)

 


以上是关于小程序计算器(使用正则表达式实现)的主要内容,如果未能解决你的问题,请参考以下文章

开发者说丨使用动态规划实现正则表达式匹配

怎么用正则表达式匹配小括号里内容(含括号)?

[ Python - 6 ] 正则表达式实现计算器功能

JS的众多小技巧之高傲的正则表达式(RegExp):你真能行

正则表达式

通过 Java 正则表达式提取 semver 版本字符串的片段