python3简单实现支持括号的加减乘除运算
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简单实现支持括号的加减乘除运算的更多相关文章
- python3 简单实现从csv文件中读取内容,并对内容进行分类统计
新手python刚刚上路,在实际工作中遇到如题所示的问题,尝试使用python3简单实现如下,欢迎高手前来优化import csv #打开文件,用with打开可以不用去特意关闭file了,python ...
- BigDecimal加减乘除运算(转)
java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val) Translates a doub ...
- 精确的double加减乘除运算工具类
import java.math.BigDecimal; /** * 精确的double加减乘除运算 * @author cyf * */ public class DoubleUtil { /** ...
- 新浪面试题:只允许使用++操作符实现加减乘除运算(c语言版)
//假定a,b都是正整数,只允许使用++而不使用-,--,*,/操作符的情况下实现加减乘除运算 //使用++实现加法: int jiafa(int a,int b){ for (int i=0;i&l ...
- Python3 简单的三级列表思路
Python3 简单的三级列表思路(初学者 比较low) 代码如下: info = { '北京':{ '沙河':['benz','momo'], '朝阳':['北土城','健德门'], '国贸':[' ...
- python3安装,支持openssl,支持采集https
python3安装,支持openssl,支持采集https 坑好多,特别是安装的时候,各种不匹配,服务器默认配置是python2,升级3后,采集的时候用到openssl,花了两天也没搞定各种错误,也许 ...
- C#:继承多态的方法实现数的简单加减乘除运算
// 定义一个抽象的父类 abstract class Figure { //声明抽象方法: //父类中的所有家里人可以用的方法必须都应用到子类中 ...
- 简单的java程序通过对话框输出 计算加减乘除运算(运算方法可选择)
import javax.swing.JOptionPane; // import class JOptionPane public class Addition { public static vo ...
- Android:随机生成算数四则运算简单demo(随机生成2~4组数字,进行加减乘除运算)
首先创建一个新的Android工程,下面是页面布局: Java代码: 我们先来分析一下如何完成的步骤: 1.首先,先完成生成随机数.(包括随机生成几组数字,范围为多少的数字,四则运算符号等): 2.要 ...
随机推荐
- CSS弹性盒模型(flex box)
本文介绍的是 CSS3 规范中引入的新布局模型:弹性盒模型(flex box).随着响应式用户界面的流行,Web 应用一般都要求适配不同的设备尺寸和浏览器分辨率. 浏览器支持: 弹性盒布局的容器(fl ...
- input type=file的几个属性
<input type='file' /> inputDom.onchange=function (e){ e.currentTarget.files 是只有一个对象的数组 var ob ...
- Angular 基本内置服务和筛选器
AngularJS中的内置服务(共30多个): $http 发送http请求,主要用于进行异步数据请求的功能实现,这个服务主要封装了XMLHttpRequest对象和JSONP数据访问模式来完成远程请 ...
- [转帖] Linux 时间参数
Linux下文件的三个时间参数 https://blog.csdn.net/GGxiaobai/article/details/53609478 想用touch修改创建时间呢 发现不知道怎么修改来着. ...
- MySQL主从复制(一)
whereis...命令的使用:
- Django(八)下:Model操作和Form操作、序列化操作
二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...
- jQuery的deferred对象实战应用(附:Exchar动态多条数据展示并在topic展示详细数据)
解决三个后台请求都成功后先比较数据再处理数据的需求 今天碰到了一个问题,我需要创建一个图表,但是需要请求三个接口才能比较出指标数据,于是就看到了deferred对象 理论的补充在这里:http://w ...
- 【pytorch】pytorch-backward()的理解
pytorch-backword函数的理解 函数:\(tensor.backward(params)\) 这个params的维度一定要和tensor的一致,因为tensor如果是一个向量y = [y1 ...
- Xshell配合Screen之ssh会话永不断开
[转]Xshell配合Screen之ssh会话永不断开 - 海运的博客
- 百度编辑器前后端二开图片上传Js Thinkphp tp5 ueditor
百度编辑器图片上传Jsueditor.all.min.js 下载链接 链接:https://pan.baidu.com/s/1VNgw9ELgRRHKeCQheFkQTw 提取码:fnfi 使用方法: ...