1.首先表达式的空格。
2.循环计算最内层带括号的表达式(提取运算符出现的顺序,然后计算)
3.计算最外层的表达式输出。
刚接触python,代码不够严谨,仅实现功能。不知道如何在函数中使用运算符变量做运算(使用的时候是字符串形式),希望知道的朋友告诉我,互相学习一下。
import re,math
def qcysf(s):
while re.findall('\+\-|\+\+|\-\-|\-\+',s):
s = s.replace('+-','-')
s = s.replace('++','+')
s = s.replace('--','+')
s = s.replace('-+','-')
return s
def yunsuan(a1):
temp1 = re.sub('\d|\.|\+|-| ','',a1)
# print(temp1)
# print(a1)
for i in temp1:
if i == "*":
b = re.search('(-?\d+\.?\d*\*-?\d+\.?\d*)', a1).group()
# print(b)
temp2 = round(float(b.split('*')[0]) * float(b.split('*')[1]),10)
temp2 = '+' + str(temp2)
a1 = a1.replace(b, temp2,1)
# print(a1)
else:
b = re.search('(-?\d+\.?\d*/-?\d+\.?\d*)', a1).group()
# print(b)
temp2 = round(float(b.split('/')[0]) / float(b.split('/')[1]),10)
temp2 = '+' + str(temp2)
a1 = a1.replace(b, temp2,1)
# print(a1)
a1 = qcysf(a1)
# print(a1)
a2 = a1.lstrip('-')
temp3 = re.sub('\d|\.| ', '', a2)
for i in temp3:
if i == "+":
b = re.search('(-?\d+\.?\d*\+\d+\.?\d*)', a1).group()
temp2 = round(float(b.split('+')[0]) + float(b.split('+')[1]),10)
a1 = a1.replace(b, str(temp2),1)
# print(a1)
else:
b = re.search('(\d+\.?\d*\-\d+\.?\d*)', a1).group()
temp2 = round(float(b.split('-')[0]) - float(b.split('-')[1]),10)
a1 = a1.replace(b, str(temp2),1)
# print(a1)
return a1 if __name__ == "__main__":
a = input('请输入你要计算的内容:')
a = a.replace(' ','')
# print(a)
if re.findall('[a-zA-Z]]',a):
print('你输入的内容不合法')
else:
while re.search("\([^()]+\)", a):
b = re.search("\([^()]+\)", a).group()
# b = qcysf(b)
# print(a)
# print(b)
b1 = re.sub('\(|\)','',b)
# print(a)
temp = yunsuan(b1)
a = a.replace(b, str(temp))
# print('这是倒数第二个',a)
a = qcysf(a)
a = yunsuan(a)
print(a)

请输入你要计算的内容:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
2776672.6951997215

python3简单实现支持括号的加减乘除运算的更多相关文章

  1. python3 简单实现从csv文件中读取内容,并对内容进行分类统计

    新手python刚刚上路,在实际工作中遇到如题所示的问题,尝试使用python3简单实现如下,欢迎高手前来优化import csv #打开文件,用with打开可以不用去特意关闭file了,python ...

  2. BigDecimal加减乘除运算(转)

    java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val) Translates a doub ...

  3. 精确的double加减乘除运算工具类

    import java.math.BigDecimal; /** * 精确的double加减乘除运算 * @author cyf * */ public class DoubleUtil { /** ...

  4. 新浪面试题:只允许使用++操作符实现加减乘除运算(c语言版)

    //假定a,b都是正整数,只允许使用++而不使用-,--,*,/操作符的情况下实现加减乘除运算 //使用++实现加法: int jiafa(int a,int b){ for (int i=0;i&l ...

  5. Python3 简单的三级列表思路

    Python3 简单的三级列表思路(初学者 比较low) 代码如下: info = { '北京':{ '沙河':['benz','momo'], '朝阳':['北土城','健德门'], '国贸':[' ...

  6. python3安装,支持openssl,支持采集https

    python3安装,支持openssl,支持采集https 坑好多,特别是安装的时候,各种不匹配,服务器默认配置是python2,升级3后,采集的时候用到openssl,花了两天也没搞定各种错误,也许 ...

  7. C#:继承多态的方法实现数的简单加减乘除运算

       // 定义一个抽象的父类     abstract class Figure     {         //声明抽象方法:         //父类中的所有家里人可以用的方法必须都应用到子类中 ...

  8. 简单的java程序通过对话框输出 计算加减乘除运算(运算方法可选择)

    import javax.swing.JOptionPane; // import class JOptionPane public class Addition { public static vo ...

  9. Android:随机生成算数四则运算简单demo(随机生成2~4组数字,进行加减乘除运算)

    首先创建一个新的Android工程,下面是页面布局: Java代码: 我们先来分析一下如何完成的步骤: 1.首先,先完成生成随机数.(包括随机生成几组数字,范围为多少的数字,四则运算符号等): 2.要 ...

随机推荐

  1. [kuangbin带你飞]专题二十二 区间DP-E-POJ - 1651

    区间DP模板题 做区间DP的题目的时候,我们考虑DP[i][j]的含义是什么? 由题意大概是这样的,我们可以从n个数中每次选一个我们以前没选过的数字拿走,需要消耗a[i]*a[i+1]*a[i-1]的 ...

  2. jdbc连接字符串

    MySQL:String Driver="com.mysql.jdbc.Driver"; //驱动程序String URL="jdbc:mysql://localhost ...

  3. vscode 打开多个标签页

    默认只打开2个,按如下设置可以支持多开: 路径C:\Users\admin\AppData\Roaming\Code\User下的settings.json添加一条配置:"workbench ...

  4. Flask自定义转换器,实现路由匹配正则表达式参数

    Flask框架动态路由实现参数传递和Django框架有类似之处,但是相比于Django框架,Flask实现复杂的参数就需要自己自定义转换器来实现了,而不能向Django那样直接使用正则表达式 # 路由 ...

  5. deeplearing4j学习以及踩过的坑

    1. 添加dl4j后, run项目时, 一直run不起来, run按钮绿色但是点击没反应.   查看日志后发现: 是classpath太长导致的. 在本项目的.idea文件夹,找到文件夹中的works ...

  6. c提高第六次课 文件读取

    一.基本概念1.文件分类 普通文件:存放在硬盘中的文件 设备文件:屏幕.键盘等特殊文件 文本文件:ASCII文件,每个字节存放一个字符的ASCII码,打开文件看到的是文本信息 二进制文件:数据按其在内 ...

  7. Java 写 Log

    . 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和 ...

  8. PLC 数据类型

    类型 长度(位) 取值范围 描述 BOOL 1 0/1 布尔型 BYTE 8 0x00~0xFF 十六进制数 WORD 16 0~65535 无符号整数 DWORD 32 0~4294967295 无 ...

  9. loadrunner断言多结果返回

    有这么一个场景,接口返回的多个状态都是正常的,那么在压测的时候,断言就需要多 init里面执行登录,根据返回获取到tokenId action中,执行登录后的操作,获取响应返回的状态,把正确的状态个数 ...

  10. SNOI 2019 字符串

    SNOI 2019 字符串 题目 题解: 解法一: 记一个数组\(f\),\(f[i]=\min_j\ s[j]\neq s[j+1] (j\geq i)\),直接sort即可,复杂度\(O(nlog ...