解析四则算式并计算
来源:互联网 发布:免费虚拟光驱软件 编辑:程序博客网 时间:2024/04/29 02:55
from re import sub as replacefrom re import search as findfrom 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 ansdef 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 sdef 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 sdef 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 sdef 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.01076.0
阅读全文
0 0
- 解析四则算式并计算
- lua 实现文件读取四则算式并计算结果
- 算式计算
- 算式计算
- Python实现读取文件中的算式并计算结果
- 简易四则计算
- 纯C语言 四则计算
- [算法]计算算式
- JAVA 计算算式表达式
- java计算算式
- 输入一个算式,并求出该算式
- 算式的解析算法
- [c++]随机生成四个数字,计算24点,并输出算式
- 算式类型字符串表达式读取并计算出结果(简单四则运算)--后缀表达式计算
- 四则
- 用C#计算算式结果
- excel 计算单元格的算式
- 算式表达式计算 java实现
- 轻松把玩HttpClient之模拟post请求示例
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- NodeJS、NPM安装配置步骤(windows版本)
- leetcode之TwoSum[Java]
- 大话设计模式之外观模式
- 解析四则算式并计算
- plink 与 ssh 远程登录问题
- 将mqsql数据合并
- POJ4134查找最近的元素
- 通达oa破解版/通达oa破解版下载/通达oa2017破解版
- 番茄工作法——预估(笔记)
- 数据结构顺序表的基本算法
- Online Judge 错误提示
- #leetcode编程日记#547. Friend Circles