import rebracket = 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 = sub.search(s).group()if exp.startswith('-'):  # 如果表达式形如:-2.2-1.2;需变换为:-(2.2+1.2)exp = exp.replace('-', '+')  # 将-号替换为+号;+2.2+1.2res = Add(exp).replace('+', '-')  # 调用Add运算,将返回值+3.4变为-3.4else: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('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':breakelse: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_searchif 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.32print('The answer is: %.2f' % (float(s)))calc()

转载于:https://www.cnblogs.com/niuli1987/p/9460715.html

正则表达式 实现计算器相关推荐

  1. Java正则表达式实现计算器_用java编写win7计算器

    展开全部 参考代码:62616964757a686964616fe78988e69d8331333337393635import java.awt.*; import java.awt.event.* ...

  2. 初版python计算器

    作业: 使用正则表达式实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 先看运行结果: 1 请输入您的计算式: 1 - 2 * ( (60-30 +(-40.0/5) ...

  3. Python汉字转数字

    文章目录 问题描述 代码 TODO 参考文献 问题描述 输入 十一 输出 11 输入 九万八千零七十六点五四三二一 输出 98076.54321 代码 对参考文献1中的代码进行优化,添加了小数的情况 ...

  4. python表达式计算器_Python正则表达式实现简易计算器功能示例

    本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+ ...

  5. C++实现简易计算器(正则表达式计算)

    说明:简单高效的C++代码,实现简易计算器(正则表达式计算),允许小数.括号.但没有表达式正误检验功能,所以测试前请确保式子正确哦 数据结构:栈 示范输入: ((1.5+2.5)*3-4)+5 42/ ...

  6. python_正则表达式、正则函数、正则计算器

    # ### 正则表达式 匹配单个字符 import re """ lst = re.findall(正则表达式,要匹配的字符串) 返回列表,按照正则表达式匹配到的内容都扔 ...

  7. Python学习——正则表达式与re模块实现字符串计算器

    学习了python的正则表达式后,一片懵逼,不知道干啥用的,也不知道咋用,只能放一些实例和正则表达式的规则以备后续查阅,希望在经过长时间的训练和使用后能对正则表达式有一个深刻的理解.什么是正则表达式呢 ...

  8. 正则表达式应用:实现一个简单的计算器

    实现一个简单的计算器,代码如下: 下面的函数用来检验数学表达式的合规性,当然此处只实现两个检验:(1)括号应该闭合 (2)不能出现字母 def check_expression(str):check_ ...

  9. 用python的正则表达式实现简单的计算器功能

    #!/usr/bin/env python # -*- coding:utf-8 -*- import sys import redef welcome_func():""&quo ...

最新文章

  1. grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程
  2. Petshop3.0学习笔记(二)Global.asax文档分析
  3. 百年通信史:落后西方半世纪的中国,用 20 年绝地反杀! | 文末送福利
  4. CCNA认证指南note 01
  5. 【人工智能作业及答案】什么叫智能?什么叫人工智能?人工智能科学体系大致分哪几个层次?
  6. Linux:批量清空当前目录下的日志文件
  7. windows10访客_如何在Windows 10中创建访客帐户
  8. R7-4 检查密码 (15 分)
  9. ES6新特性_变量的解构赋值---JavaScript_ECMAScript_ES6-ES11新特性工作笔记006
  10. Scanner类中的next()和nextLine()方法
  11. 计算机刻录光盘不显示,为什么我的CD刻录光盘的容量在
  12. win10+android+手机驱动,win10系统电脑没有手机驱动的解决方法
  13. 微信小程序轮播图点击跳转页面
  14. 锂电池电量百分比计算_锂电池容量计算的方法
  15. 中学计算机课小课题,【信息技术课题研究方案】 信息技术小课题研究题目大全_信息技术课题研究题目_信息技术课题研究_东城教研...
  16. 控制台(console)与终端(terminal)理解
  17. 本科生如何学习计算机科学与技术
  18. C++学习int main()函数
  19. 《Java程序员,上班那点事儿》荣登北京新华书店销售榜第2名,立贴纪念!
  20. 猿学~黑客、红客、白帽子之间的技术较量,为什么大公司都有黑客团队?

热门文章

  1. Microsoft SignalR Map Controller具有页面可见性API和事件模糊功能,可映射文档管理系统(DMS)中的用户交互
  2. 100m光纤测速多少正常_光纤收发器的分类知识详解
  3. abaqus推荐用哪一版本的_ABAQUS推荐资料合集(一)
  4. 质数的后代c语言,(信息学奥赛辅导)程序设计试题汇编(答案10)
  5. android banner动画框架,Android Studio Banner轮播图使用
  6. 祁是计算机,南京邮电大学计算机/软件学院导师介绍:祁正华
  7. mysql效率索引_mysql下普通索引和唯一索引的效率对比
  8. c语言变量名s_i使其随i变化,动态规划I(含细c语言代码).ppt
  9. 怎么定义int_面试官问:MySQL的自增ID用完了,怎么办?!
  10. python串口通信_python的串口通信(pyserial)