本文实例为大家分享了python正则实现计算器功能的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*-

# Author :Gogh

# @Time :2017/12/4 20:16

# @Email :361910002@qq.com

import re

def operator_update(formula):

# 对formula公式进行 去除空字符,更新运算符处理

formula = formula.replace(" ", "") # 去除空字符

formula = formula.replace("+-", "-")

formula = formula.replace("--", "+")

return formula

def calc_muldiv(formula_list):

'''''

计算公式里面的乘除

:param formula: 列表

:return:

'''

for index, element in enumerate(formula_list):

if "*" in element or "/" in element:

operators = re.findall("[*/]", element)

calc_list = re.split("[*/]", element)

num = None

for i, e in enumerate(calc_list):

if num:

if operators[i - 1] == "*":

num *= float(e)

elif operators[i - 1] == "/":

num /= float(e)

else:

num = float(e)

formula_list[index] = num

return formula_list

def calc_plumin(operators, num_list):

'''''

计算列表数字的加减

:param operators: 运算符列表

:param num_list: 进行运算的数字列表

:return: 返回计算结果

'''

num = None

for i, e in enumerate(num_list):

if num:

if operators[i - 1] == "+":

num += float(e)

elif operators[i - 1] == "-":

num -= float(e)

else:

num = float(e)

return num

def merge(plus_minus_operator, multiply_divide_list):

'''''

把列表中这样的形式'2*' '-3*' '5/3*' '4/2'合并到一块

:param formula_list:

:return:

'''

for index, element in enumerate(multiply_divide_list):

if element.endswith("*") or element.endswith("/"):

multiply_divide_list[index] = element + plus_minus_operator[index] + multiply_divide_list[index + 1]

del multiply_divide_list[index + 1]

del plus_minus_operator[index]

return merge(plus_minus_operator, multiply_divide_list)

return plus_minus_operator, multiply_divide_list

def bracket_calc(formula):

'''''

对括号最内层的formula公式进行计算

:param formula:

:return:

'''

formula = re.sub("[()]", "", formula) # 去除两边的()

formula = operator_update(formula)

plus_minus_operator = re.findall("[+-]", formula) # 列表 '+' '-' 运算符

multiply_divide_list = re.split("[+-]", formula) # 列表 有'*' '/'

if multiply_divide_list[0] == "": # multiply_divide_list列表第一个字符为空的话,表示一个数字为负号

multiply_divide_list[1] = "-" + multiply_divide_list[1]

del plus_minus_operator[0]

del multiply_divide_list[0]

res = merge(plus_minus_operator, multiply_divide_list)

plus_minus_operator = res[0] # 列表 '+' '-' 运算符 进行合并处理

multiply_divide_list = res[1]

plus_minus_list = calc_muldiv(multiply_divide_list) # 生成只进行加减运算的列表

res = calc_plumin(plus_minus_operator, plus_minus_list)

return res

def calculate(formula):

'''''计算程序主入口, 主要逻辑是先计算拓号里的值,算出来后再算乘除,再算加减'''

while True:

formula_depth = re.search("[()]+", formula)

if formula_depth:

formula_depth = formula_depth.group()

res = bracket_calc(formula_depth)

formula = formula.replace(formula_depth, str(res))

print("\33[34;1m%s\33[0m" % (formula))

else:

res = bracket_calc(formula)

print("\33[31;1m结果:%s\33[0m" % (res))

exit()

if __name__ == '__main__':

formula = "1 - 2 * ( (60-30 +(-9-2- 5-2*-3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) -(-4*3)/ (16-3*2) )"

calculate(formula)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

formula 返回list_python正则实现计算器功能相关推荐

  1. python编写计算器输入1或2代表+或x_Python实现两款计算器功能示例

    本文实例为大家分享了Python实现计算器功能示例代码,供大家参考,具体内容如下 1.简单计算器 #计算一个表达式的时候,首先肯定是先算括号里面的,再算乘除法,后算加减法 import re # 1. ...

  2. 手把手教你做安豆计算器(三)-计算器功能实现

    第4节 计算器功能实现 这一节我们将实现计算器的功能.在实现的过程中,可以随时将修改的代码部署到设备上,看看实际的效果. 4.1 添加按钮响应 按钮是需要在用户点击的时候做出响应的.每当用户点击一下按 ...

  3. 使用jquery实现的计算器功能

    晚上做了一个jQuery的项目,使用jQuery实现了一个简单的计算器功能,可以实现连加,连减,混合计算,括号内优先计算,代码如下: css部分: 1 <style> 2 .main{ 3 ...

  4. c语言4x4按键计算器代码,4X4按键实现计算器功能.doc

    4X4按键实现计算器功能 ;4X4按键实现计算器功能 ;当按0-9时显示数值 ;当按A-F时将其除以10 ;如商为0就是0-9数字输入 ;如商为1就是+,-,*,/,= ;跟据余数转到相应的功能处 ; ...

  5. 计算机一级考试的时候用计算器,在WPS文字里设置计算器功能

    在WPS文字里设置计算器功能 分类:计算机等级| 更新时间:2012-12-21| 来源:转载 在使用WPS文字编辑文稿时,常常需要对一些数据进行简单的核算,为了计算方便,笔者经过一番摸索,设法在WP ...

  6. c语言自定义函写计算器,C语言实现计算器功能

    <C语言实现计算器功能>由会员分享,可在线阅读,更多相关<C语言实现计算器功能(11页珍藏版)>请在人人文库网上搜索. 1.实验1多功能计算机一.问题的说明设计一台能完成基本计 ...

  7. PHP高级计算器的过程,PHP基于堆栈实现的高级计算器功能示例

    PHP基于堆栈实现的高级计算器功能示例 发布于 2017-10-14 13:38:26 | 108 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  8. 表达式计算器 java代码_Java实现简单的表达式计算器功能示例

    本文实例讲述了Java实现简单的表达式计算器功能.分享给大家供大家参考,具体如下: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例 ...

  9. python编程计算器_Python设计实现的计算器功能完整实例

    本文实例讲述了Python设计实现的计算器功能.分享给大家供大家参考,具体如下: 通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/ ...

最新文章

  1. orcal 忘记用户名和密码
  2. 剑指offer 算法(链表 树)
  3. 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】...
  4. shell脚本中的坑
  5. 大数据处理架构Hadoop
  6. 普通平键的主要尺寸有_你还在为怎样选择床上用品尺寸而烦恼吗?床品尺寸大解析帮到你!...
  7. 产品配件类目税目分类_商品及税收分类编码选择技巧
  8. 邻接矩阵计算matlab计算,急求各位大神帮忙解决,下面这个邻接矩阵算出它的可达矩阵...
  9. 可行性分析报告 模板
  10. python学习笔记——取矩阵的上三角或下三角元素
  11. python京东笔试题象棋马走到指定位置方法数
  12. android浏览器对比评测,11款手机浏览器性能横向评测
  13. 泡一杯清茶,看窗外细细的雨
  14. Springboot整合liqubase
  15. java网上销售外文文献_JAVA外文文献+翻译.docx
  16. python 小说词频统计_Python中文分词及词频统计
  17. elastic job (一) elastic-job-lite----SimpleJob
  18. 那些年,你看过有哪些让你记忆犹新的书
  19. 阿西莫夫 - 神们自己(2015年6月23日)
  20. 投研报告 - Ariva(ARV)

热门文章

  1. 微软推出Visual Studio Kubernetes工具包预览版
  2. 基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现
  3. 入门干货之Electron的.NET实现-Electron.NET
  4. Entity Framework Core的贴心:优雅处理带默认值的数据库字段
  5. 利用lay-ui结合ajax实现分页功能(不借助框架,简单易懂)
  6. Android Notification总结
  7. Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题
  8. linux c之gcc -g file.c -o file提示warning: no newline at end of file
  9. linux之通过strings命令查看so里面是否包含****字符串
  10. Android之解决布局文件图片太大同步放缩后挤掉其它布局的问题