formula 返回list_python正则实现计算器功能
本文实例为大家分享了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正则实现计算器功能相关推荐
- python编写计算器输入1或2代表+或x_Python实现两款计算器功能示例
本文实例为大家分享了Python实现计算器功能示例代码,供大家参考,具体内容如下 1.简单计算器 #计算一个表达式的时候,首先肯定是先算括号里面的,再算乘除法,后算加减法 import re # 1. ...
- 手把手教你做安豆计算器(三)-计算器功能实现
第4节 计算器功能实现 这一节我们将实现计算器的功能.在实现的过程中,可以随时将修改的代码部署到设备上,看看实际的效果. 4.1 添加按钮响应 按钮是需要在用户点击的时候做出响应的.每当用户点击一下按 ...
- 使用jquery实现的计算器功能
晚上做了一个jQuery的项目,使用jQuery实现了一个简单的计算器功能,可以实现连加,连减,混合计算,括号内优先计算,代码如下: css部分: 1 <style> 2 .main{ 3 ...
- c语言4x4按键计算器代码,4X4按键实现计算器功能.doc
4X4按键实现计算器功能 ;4X4按键实现计算器功能 ;当按0-9时显示数值 ;当按A-F时将其除以10 ;如商为0就是0-9数字输入 ;如商为1就是+,-,*,/,= ;跟据余数转到相应的功能处 ; ...
- 计算机一级考试的时候用计算器,在WPS文字里设置计算器功能
在WPS文字里设置计算器功能 分类:计算机等级| 更新时间:2012-12-21| 来源:转载 在使用WPS文字编辑文稿时,常常需要对一些数据进行简单的核算,为了计算方便,笔者经过一番摸索,设法在WP ...
- c语言自定义函写计算器,C语言实现计算器功能
<C语言实现计算器功能>由会员分享,可在线阅读,更多相关<C语言实现计算器功能(11页珍藏版)>请在人人文库网上搜索. 1.实验1多功能计算机一.问题的说明设计一台能完成基本计 ...
- PHP高级计算器的过程,PHP基于堆栈实现的高级计算器功能示例
PHP基于堆栈实现的高级计算器功能示例 发布于 2017-10-14 13:38:26 | 108 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...
- 表达式计算器 java代码_Java实现简单的表达式计算器功能示例
本文实例讲述了Java实现简单的表达式计算器功能.分享给大家供大家参考,具体如下: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例 ...
- python编程计算器_Python设计实现的计算器功能完整实例
本文实例讲述了Python设计实现的计算器功能.分享给大家供大家参考,具体如下: 通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/ ...
最新文章
- orcal 忘记用户名和密码
- 剑指offer 算法(链表 树)
- 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】...
- shell脚本中的坑
- 大数据处理架构Hadoop
- 普通平键的主要尺寸有_你还在为怎样选择床上用品尺寸而烦恼吗?床品尺寸大解析帮到你!...
- 产品配件类目税目分类_商品及税收分类编码选择技巧
- 邻接矩阵计算matlab计算,急求各位大神帮忙解决,下面这个邻接矩阵算出它的可达矩阵...
- 可行性分析报告 模板
- python学习笔记——取矩阵的上三角或下三角元素
- python京东笔试题象棋马走到指定位置方法数
- android浏览器对比评测,11款手机浏览器性能横向评测
- 泡一杯清茶,看窗外细细的雨
- Springboot整合liqubase
- java网上销售外文文献_JAVA外文文献+翻译.docx
- python 小说词频统计_Python中文分词及词频统计
- elastic job (一) elastic-job-lite----SimpleJob
- 那些年,你看过有哪些让你记忆犹新的书
- 阿西莫夫 - 神们自己(2015年6月23日)
- 投研报告 - Ariva(ARV)
热门文章
- 微软推出Visual Studio Kubernetes工具包预览版
- 基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现
- 入门干货之Electron的.NET实现-Electron.NET
- Entity Framework Core的贴心:优雅处理带默认值的数据库字段
- 利用lay-ui结合ajax实现分页功能(不借助框架,简单易懂)
- Android Notification总结
- Android之网络请求通过协程+okhttp的没有做网络异常处理导致程序奔溃问题
- linux c之gcc -g file.c -o file提示warning: no newline at end of file
- linux之通过strings命令查看so里面是否包含****字符串
- Android之解决布局文件图片太大同步放缩后挤掉其它布局的问题