zoukankan      html  css  js  c++  java
  • 计算器(正则练习详细步骤)


    s='1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
    def cacular(s):
    import re
    def division(a, b):
    return float(a) / float(b)
    def multiplication(a, b):
    return float(a) * float(b)
    def subtraction(a, b):
    return float(a) - float(b)
    def addition(a, b):
    return float(a) + float(b)
    dic = {"*": multiplication, "/": division, "-": subtraction, "+": addition}
    s = s.replace('++', '+')
    s = s.replace('+-', '-')
    s = s.replace('-+', '-')
    s = s.replace("--", '+')
    while re.search('[(][^(]*?[)]',s):
    brackets=re.search('[(][^(]*?[)]',s).group()
    print(f'当前括号内容{brackets}')
    re.search('[(][^(]*?[)]',brackets)
    brackets_inner = re.search('[(]([^(]*?)[)]', brackets).group(1)
    print(f"当前表达式:{brackets_inner}")
    while re.search('d+.?d*[/*]-?d+.?d*',brackets_inner):
    first_MAD = re.search("(?P<firstnumber>d+.?d*)(?P<sign>[*/])(?P<secondnumber>-?d+.?d*)", brackets_inner)
    value=dic[first_MAD.group('sign')](first_MAD.group('firstnumber'),first_MAD.group('secondnumber'))
    brackets_inner=brackets_inner.replace(first_MAD.group(),str(value))
    print(brackets_inner)
    print('当前乘除法结束')
    while re.search('-?d+.?d*[+-]-?d+.?d*',brackets_inner):
    first_ADS = re.search("(?P<firstnumber>-?d+.?d*)(?P<sign>[+-])(?P<secondnumber>-?d+.?d*)", brackets_inner)
    value=dic[first_ADS.group('sign')](first_ADS.group('firstnumber'),first_ADS.group('secondnumber'))
    brackets_inner=brackets_inner.replace(first_ADS.group(),str(value))
    print(brackets_inner)
    print('当前加减法结束')
    print(brackets_inner,brackets)
    s=s.replace(brackets,brackets_inner)
    s = s.replace('++', '+')
    s = s.replace('+-', '-')
    s = s.replace('-+', '-')
    s = s.replace("--", '+')
    print('当前括号内容执行完毕')
    print(s)
    while re.search('d+.?d*[/*]-?d+.?d*', s):
    first_MAD = re.search("(?P<firstnumber>d+.?d*)(?P<sign>[*/])(?P<secondnumber>-?d+.?d*)", s)
    value = dic[first_MAD.group('sign')](first_MAD.group('firstnumber'), first_MAD.group('secondnumber'))
    s = s.replace(first_MAD.group(), str(value))
    print(s)
    print('当前乘除法结束')
    while re.search('-?d+.?d*[+-]-?d+.?d*', s):
    first_MAD = re.search("(?P<firstnumber>-?d+.?d*)(?P<sign>[+-])(?P<secondnumber>-?d+.?d*)", s)
    value = dic[first_MAD.group('sign')](first_MAD.group('firstnumber'), first_MAD.group('secondnumber'))
    s = s.replace(first_MAD.group(), str(value))
    print(s)
    print('当前加减法结束')
    return float(s)
    cacular(s)
    print(eval(s))
  • 相关阅读:
    C#使用WINDOW
    赵四小姐从十六岁开始跟张学良。跟一年,属奸情;跟三年,算偷情;跟六十年,便成为千古爱情!
    Microsoft Visual Studio 2010(VS2010)正式版 CDKEY / SN:
    C#中byte[]与string的转换
    sqlserver waitfor time '10:00' waitfor delay '1:00' 时间延时 和 间隔
    免费下载 精英讲解
    在决定使用ClickOnce发布你的软件前,应该知道的一些事情
    Windows7下注册OCX的注意事项
    用命令行以最快速简单的方式搭建MySQL数据库
    设计模式探索系列之Bridge模式
  • 原文地址:https://www.cnblogs.com/diracy/p/13391181.html
Copyright © 2011-2022 走看看