• 正则计算器2


     1 import sys
     2 import re
     3 
     4 def deal_fuhao(calc_list):
     5     new_calc_list=[]
     6     for index,item in enumerate(calc_list):
     7         if item.strip().endswith('*') or item.strip().endswith('/'):
     8             new_calc_list.append('%s-%s'%(calc_list[index],calc_list[index+1]))
     9         elif ('*'or'/') in item:
    10             new_calc_list.append(item)
    11     print(new_calc_list)
    12     return new_calc_list
    13 
    14 def jianfa(formula):
    15     print('运算',formula)
    16     print(formula)
    17     formula = formula.replace('+-', "-")
    18     formula = formula.replace('++', "+")
    19     formula = formula.replace('-+', "-")
    20     formula = formula.replace('--', "+")
    21 
    22     calc_list=re.split('[+-]',formula)
    23     sub_calc_list = re.findall('[+-]', formula)
    24     print(calc_list,sub_calc_list)
    25     sub_res=None
    26     for index,item in enumerate(calc_list):
    27         if sub_res: #这不是第一次
    28             if sub_calc_list[index-1]=="-":
    29                 sub_res -= float(item)
    30             else:
    31                 sub_res += float(item)
    32         else:
    33             sub_res=float(item) #这里其实就是赋值,然后用于上边的计算
    34     print('33[31;1m[%s]33[0m' %sub_res)
    35     print(eval(formula))
    36 def chengchu(formula):
    37     print('运算',formula)
    38     calc_list=re.split('[+-]',formula)
    39     calc_list =deal_fuhao(calc_list)
    40     print(calc_list)
    41 
    42     for item in calc_list:
    43         sub_calc_list=re.split('[*/]',item)
    44         sub_operator_list=re.findall('[*/]',item)
    45         print(sub_calc_list,sub_operator_list)
    46         sub_res=None
    47         for index,i in  enumerate(sub_calc_list):
    48             if sub_res: #这不是第一次
    49                 if sub_operator_list[index-1]=='*':
    50                     sub_res *= float(i)
    51                 else:
    52                     sub_res /= float(i)
    53             else:
    54                  sub_res = float(i)
    55 
    56         print('33[31;1m[%s]=33[0m'%item,sub_res)
    57         formula = formula.replace(item,str(sub_res))
    58 
    59     print('33[31;1m[%s]结果33[0m',formula)
    60     res_zuizhong =jianfa(formula)
    61 
    62 def calc(formula):
    63     parentheses_flag = True
    64     while parentheses_flag:
    65         m=re.search('([^()]+)',formula)
    66         if m:
    67             print(m.group())
    68             sub_formula=m.group().strip('()')
    69             sub_res=chengchu(sub_formula)
    70         break
    71 
    72 if __name__=='__main__':
    73     formula = '1-2*(60-30+ (-40.0/5*(9-2*5/-3+7/3*99/4*2998+10*568/14)))-(-4*3)/(16-3*2)'
    74     res = calc(formula)
     1 C:UsersqiangqlAppDataLocalProgramsPythonPython36-32python.exe C:/Users/qiangql/PycharmProjects/untitled1/计算器2.py
     2 (9-2*5/-3+7/3*99/4*2998+10*568/14)
     3 运算 9-2*5/-3+7/3*99/4*2998+10*568/14
     4 ['2*5/-3', '7/3*99/4*2998', '10*568/14']
     5 ['2*5/-3', '7/3*99/4*2998', '10*568/14']
     6 ['2', '5', '-3'] ['*', '/']
     7 [2*5/-3]= -3.3333333333333335
     8 ['7', '3', '99', '4', '2998'] ['/', '*', '/', '*']
     9 [7/3*99/4*2998]= 173134.50000000003
    10 ['10', '568', '14'] ['*', '/']
    11 [10*568/14]= 405.7142857142857
    12 [%s]结果 9--3.3333333333333335+173134.50000000003+405.7142857142857
    13 运算 9--3.3333333333333335+173134.50000000003+405.7142857142857
    14 9--3.3333333333333335+173134.50000000003+405.7142857142857
    15 ['9', '3.3333333333333335', '173134.50000000003', '405.7142857142857'] ['+', '+', '+']
    16 [173552.54761904766]
    17 173552.54761904766
    18 
    19 Process finished with exit code 0
    运算结果
  • 相关阅读:
    Leetcode题目:House Robber II
    Leetcode题目:Compare Version Numbers
    Leetcode题目:Intersection of Two Arrays II
    Leetcode题目:Intersection of Two Arrays
    Mac OS X 好用的软件包管理工具 Homebrew
    Linux 安装配置 JDK 8
    Centos 6.5 RedHat 6 安装mysql
    Ubuntu 源
    grub2 使用memdisk工具 启动任意iso
    Fedora 21 设置开机启动脚本
  • 原文地址:https://www.cnblogs.com/PYlog/p/8929004.html
Copyright © 2020-2023  润新知