python数学公式识别_python用re正则表达式实现数学公式计算
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:QiFeng Zhang
import re
__Author__ = "Faker"
'''计算表达式字符串'''
bracket = re.compile(r"\([^()]+\)") #查找最内层括号
div = re.compile(r"(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)") #查找除法运算
mul = re.compile(r"(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)") #查找乘法运算
add = re.compile(r"(-?\d+\.?\d*\+-\d+\.?\d*)|(-?\d+\.?\d*\+\d+\.?\d*)") #查找加法运算
sub = re.compile(r"(-?\d+\.?\d*--\d+\.?\d*)|(-?\d+\.?\d*-\d+\.?\d*)") #查找减法运算
c_f = re.compile(r"\(?\+?-?\d+\.?\d*\)?") #查找括号内是否运算完毕
strip = re.compile(r"[^(].*[^)]") #去除括号
def Div(s):
'''计算除法'''
exp = re.split(r'/',div.search(s).group()) #将除法表达式拆分成列表
return s.replace(div.search(s).group(),str(float(exp[0])/float(exp[1]))) #计算并用结果替换列表中表达式
def Mul(s):
'''计算乘法'''
exp = re.split(r'\*',mul.search(s).group()) #将乘法表达式拆分成列表
return s.replace(mul.search(s).group(),str(float(exp[0])*float(exp[1]))) #计算并用结果替换列表中表达式
def Add(s):
'''计算加法'''
exp = re.split(r'\+',add.search(s).group()) #将加法表达式拆分成列表
return s.replace(add.search(s).group(),str(float(exp[0])+float(exp[1]))) #计算并用结果替换列表中表达式
def Sub(s):
'''计算减法'''
exp = sub.search(s).group() #去除减法表达式
if exp.startswith('-'): #如果表达式形如:-2.2-1.2;需变换为:-(2.2+1.2)
exp = exp.replace('-', '+') #将-号替换为+号;+2.2+1.2
res = Add(exp).replace('+', '-') #调用Add运算,将返回值+3.4变为-3.4
else:
exp = re.split(r'-',exp)
res = str(float(exp[0]) - float(exp[1]))
return s.replace(sub.search(s).group(),res)
def calc():
while True:
s = input('plase input the key(q for quit)>>>').strip()
if s == 'q': #如果输入q退出
break
else:
s = ''.join([x for x in re.split('\s+',s)]) #去除字符串中的空白字符
if not s.startswith('('): #若字符串不是以括号开始的,增加括号
s = str('(%s)'%s)
while bracket.search(s): #若表达式存在括号,将括号内容取出来存变量
s = s.replace('--','+') #将表达式中的--替换成+
s_search = bracket.search(s).group() #查找最内层括号,将括号内容取出
if div.search(s_search): #如果括号内包含除服,则先算除法
s = s.replace(s_search,Div(s_search)) #替换除法运算
elif mul.search(s_search): #判断是否包含乘法运算
s = s.replace(s_search,Mul(s_search)) #将乘法计算内容替换乘法表达式
elif sub.search(s_search): #判断是否包含减法运算
s = s.replace(s_search,Sub(s_search)) #将减法运算结果替换减法运算表达式
elif add.search(s_search): #判断是否加法运算
s = s.replace(s_search,Add(s_search)) #将加法运算结构调换加法运算表达式
elif c_f.search(s_search): #加减乘除都不含,判断是否有括号
s = s.replace(s_search,strip.search(s_search).group()) #对最终结果执行去括号操作
print('The answer is %.2f'%(float(s)))
if __name__ == "__main__":
calc()
python数学公式识别_python用re正则表达式实现数学公式计算相关推荐
- python模型预测_python:目标检测模型预测准确度计算方式(基于IoU)
训练完目标检测模型之后,需要评价其性能,在不同的阈值下的准确度是多少,有没有漏检,在这里基于IoU(Intersection over Union)来计算. 希望能提供一些思路,如果觉得有用欢迎赞我表 ...
- python 数学公式识别_Python实现基于KNN算法的笔迹识别功能详解
本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列, ...
- python小说文本挖掘_Python小说文本挖掘正则表达式分析案例
原文链接:http://tecdat.cn/?p=5673 约瑟夫·海勒的<第二十二条军规>是我最喜欢的小说.我最近读完了 ,并喜欢整本书中语言的创造性使用和荒谬人物的互动.对于我的可视化 ...
- python人头识别_python+opencv实现人头检测
python+opencv实现人头检测 python+opencv实现人头检测 前段时间琢磨了下人头检测这个功能,现在有了初步的认知和体会,下面开始讲下我在实现人头检测过程中遇到的坑和解决方法. 环境 ...
- python信用卡识别_python opencv实现信用卡的数字识别
本项目利用python以及opencv实现信用卡的数字识别 前期准备 导入工具包 定义功能函数 模板图像处理 读取模板图像 cv2.imread(img) 灰度化处理 cv2.cvtColor(img ...
- python 图片识别_python识别图片文字
滑稽研究所 python识别图片文字 哈喽,大家好呀,我是滑稽君.大家在写论文时可能经常碰到无法复制文字的文章.明明找到了需要的内容却无法直接复制使用,这让我们十分苦恼.那么本期滑稽君就告诉大家如何使 ...
- python 图片识别_Python—识别图片中的文字
一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存.但是当我们想用到里面的 ...
- python智能识别_Python人工智能识别文字内容(OCR)
环境准备 安装pytesseract和PIL安装这两个包可以借助pip命令行安装 pip install PIL pip install pytesseract 安装识别引擎tesseract-ocr ...
- python 分词 识别_python分词如何实现新词识别
2013-12-19 回答 # -*- coding: utf-8 -*- import jieba ''''' created on 2015-11-23 ''' def word_split(te ...
最新文章
- java并发之同步辅助类CyclicBarrier和CountDownLatch
- 开发日记-20190816 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 24
- python-子类和派生、继承
- Double 与 Float 的值的比較结果
- RealARM210 V3.2硬件版本 nand flash地址分配明细
- <深入剖析Tomcat>摘抄
- 使用c:forEach 控制5个换行
- 【linux命令总结】——后续用到的内容持续补充和更新
- php mysql cpu100_解决mysql占用cpu资源100%的问题_MySQL
- RS请求错误之RSV-BBP-0028
- 一起谈.NET技术,ASP.NET2.0服务器控件之类型转换器
- Joomla源代码解析(十九) JController
- NetBeans Weekly News 刊号 # 152 - Jun 15, 2011
- jQuery EasyUI快速入门01
- 中国石油大学--生活学习简易FAQ
- 五大主流浏览器内核的源起以及国内各大浏览器内核总结
- SECS/GEM概念
- Android Dialog宽度设置固定大小
- 教师办公用计算机使用管理制度,教师办公室计算机使用规章制度
- 我是如何从流水线工人到程序员?(2008-2018)
热门文章
- 如何做好积分商城运营?
- python直角坐标转极坐标_Python在OpenCV里实现极坐标变换功能
- 通过css和js实现流星雨效果
- 百度地图集成,经纬度返回 4.9e-324
- vmware ThinApp 4.01 and Workstation 6.5.1 sn
- 产品生命周期,鸿沟理论和CNCF项目孵化
- linux 备份信息查看器,linux 全新的备份神器 Duplicity
- WIN10 禁用 credentital guard Device Guard或Credential Guard与Workstation不兼容
- 俞敏洪老师谈英语单词记忆方法——转
- Linux登录mysql时 密码正确登录不进去,没有密码却能登进去