解析四则算式并计算
2017-09-16 18:35
78 查看
from re import sub as replace from re import search as find from re import split '''***********解析四则算式并计算***********''' '''全局正则定义''' #乘除正则,查找乘除操作 mul_div_calc_regex = r'\d+(\.\d+)?[\*\/]\d+(\.\d+)?' #加减正则,查找加减操作 plus_sub_calc_regex = r'\d+(\.\d+)?[\+\-]\d+(\.\d+)?' #括号正则,查找括号运算 mark_regex = r'\([^\(]*?\)' #运算正则,查找具体操作 calc_regex = r'[\+\-\*\/]' def basic_calc(a,mark, b): '''简单计算''' a = float(a) b = float(b) ans = 0 if mark == '*': ans = a*b elif mark == '/': ans = a/b elif mark == '+': ans = a+b elif mark == '-': ans = a-b return ans def calc_by_string(s): '''字符串拆分计算''' global calc_regex a = split(calc_regex,s) mark = find(calc_regex,s).group() return basic_calc(a[0],mark, a[1]) def mul_div(s): '''查找字符串中加减操作,并计算''' global mul_div_calc_regex while find(mul_div_calc_regex, s): a = find(mul_div_calc_regex, s).group() ans = calc_by_string(a) s = replace(mul_div_calc_regex, str(ans), s,count=1) return s def plus_sub(s): '''查找字符串中乘除操作,并计算''' global plus_sub_calc_regex while find(plus_sub_calc_regex, s): a = find(plus_sub_calc_regex, s).group() ans = calc_by_string(a) s = replace(plus_sub_calc_regex, str(ans), s,count=1) return s def calc_one(s): '''计算一个简单等式,不包含括号''' return plus_sub(mul_div(s)) def mark_calc(s): '''查找括号,并计算''' global mark_regex while find(mark_regex,s): print(s) a = find(mark_regex, s).group() ans = calc_one(replace(r'[\(\)]','',a)) s = replace(mark_regex,ans,s,count=1) print(s) return s def calc_all(s): '''全部计算''' return plus_sub(mul_div(mark_calc(s))) test_string = '1+(9+(32*1)+(25/5)-3)*(3*9-5+3)' print(calc_all(test_string))计算过程显示如下
1+(9+(32*1)+(25/5)-3)*(3*9-5+3) 1+(9+32.0+(25/5)-3)*(3*9-5+3) 1+(9+32.0+5.0-3)*(3*9-5+3) 1+43.0*(3*9-5+3) 1+43.0*25.0 1076.0
相关文章推荐
- lua 实现文件读取四则算式并计算结果
- 【原创】Delphi实现数学表达式的计算(逆波兰式法)-四则运算解析
- java 解析四则混合运算表达式并计算结果
- 词语相似度计算:3、使用urllib爬取wiki文章,使用beautifulSoup解析html
- 关于HashMap的table下标计算——tableSizeFor()方法解析
- 四则表达式计算模板第二版
- VMware vSphere 5.1 群集深入解析(十四)-DRS计算推荐
- python-Levenshtein几个计算字串相似度的函数解析
- 解析BeeGFS将以何成就高性能计算
- 第十周(11.18-11.24)----分数计算----(1)打印出带有分数的算式
- 异构计算完全解析-CSDN.NET
- 一个基于LL(1)的简易C++四则表达式计算
- 一种可扩展的表达式解析及计算方法
- Java实现四则运算表达式计算
- Java实现四则运算的解析
- 计算所汉语词法分析系统ICTCLAS 字典格式解析
- 计算表达式的值(仅含有四则运算和支持括号嵌套,浮点数运算)
- 使用栈实现计算四则运算
- shell从管道读取命令行并解析,双引号中有空格计算为一个参数