Python 正则表达式实现计算器功能


Posted in Python onApril 29, 2017

需求:

用户输入运算表达式,终端显示计算结果

代码:

# !/usr/bin/env/ python3
# -*- coding: utf-8 -*-

"""用户输入计算表达式,显示计算结果"""

__author__ = 'Jack'

import re

bracket = re.compile(r'\([^()]+\)') # 寻找最内层括号规则
mul = re.compile(r'(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)') # 寻找乘法运算规则
div = 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+\)?') # 检查括号内是否运算完毕规则
strip = re.compile(r'[^(].*[^)]') # 脱括号规则

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 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 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 = re.split(r'-', sub.search(s).group())
 return s.replace(sub.search(s).group(), str(float(exp[0]) - float(exp[1])))

def calc():
 while True:
  s = input('Please input the expression(q for quit):') # 例:'1+2- (3* 4-3/2+ ( 3-2*(3+ 5 -3* -0.2-3.3*2.2 -8.5/ 2.4 )+10) +10)'
  if s == '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 = s.replace('--', '+') # 检查表达式,并将--运算替换为+运算
    s_search = bracket.search(s).group() # 将最内层括号及其内容赋给变量s_search
    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): # 若括号内无任何运算(类似(-2.32)除外)
     s = s.replace(s_search, strip.search(s_search).group()) # 将括号脱掉,例:(-2.32)---> -2.32

   print('The answer is: %.2f' % (float(s)))
if __name__ == '__main__':
 calc()

运行效果:

Python 正则表达式实现计算器功能

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
Python六大开源框架对比
Oct 19 Python
python运行其他程序的实现方法
Jul 14 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
python实现录音小程序
Oct 26 Python
Django框架实现分页显示内容的方法详解
May 10 Python
Django框架首页和登录页分离操作示例
May 28 Python
使用python的pyplot绘制函数实例
Feb 13 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 Python
python中类变量与成员变量的使用注意点总结
Apr 29 #Python
Python urls.py的三种配置写法实例详解
Apr 28 #Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 #Python
Python 通过pip安装Django详细介绍
Apr 28 #Python
python 使用get_argument获取url query参数
Apr 28 #Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 #Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 #Python
You might like
PHP4实际应用经验篇(3)
2006/10/09 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
php curl基本操作详解
2013/07/23 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
Python文件和目录操作详解
2015/02/08 Python
python中的错误处理
2016/04/10 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
机械设计及其自动化求职推荐信
2014/02/17 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
运动会口号16字
2014/06/07 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
2014年销售助理工作总结
2014/12/01 职场文书