python 二叉树实现带括号的四则运算
#!/usr/bin/python
#* encoding=utf-8
s = "20-5*(0+1)*5^(6-2^2)" c = 0
top = [0,s[c],0]
op = [["0","1","2","3","4","5","6","7","8","9"],["+","-"],["*","/"],["^"]] def getLev(ch):
for c1 in range(0, len(op)):
for c2 in range(0, len(op[c1])):
if (op[c1][c2]==ch):
return c1
elif (len(ch)>1):
match = 0
for c3 in range(0, len(ch)):
if (getLev(ch[c3])>=0):
match+=1
if (match==len(ch)):return c1
return -1 def makeTree(root):
global c
global s c += 1
if (c>=len(s)):
return root if (s[c]=="("):
c+=1
node = [0, s[c], 0]
node = makeTree(node)
elif (s[c]==")"):
return root
else: node=[0, s[c], 0] levRoot = getLev(root[1])
levCur = getLev(node[1])
print levRoot, levCur, root[1], node[1] if (levCur>=levRoot):
if ((levRoot==0 and levCur!=levRoot)
or (levRoot!=0 and levCur==levRoot)):
node[0] = root
root = node
return makeTree(root)
elif (levRoot==0 and levCur==0):
root[1] += node[1]
return makeTree(root)
else:
node[0] = root[2]
root[2] = makeTree(node)
return makeTree(root)
else:
if (levCur==0 or node[0]!=0):
root[2] = node
return makeTree(root)
else:
c-=1
return root top = makeTree(top)
#print top def getTree(node):
ret = [] if (node[0]!=0):
_tmp = getTree(node[0])
for c in range(0, len(_tmp)):
ret.append(_tmp[c]) if (node[2]!=0):
_tmp = getTree(node[2])
for c in range(0, len(_tmp)):
ret.append(_tmp[c]) ret.append(node[1])
return ret exp = getTree(top)
print exp def calc():
stack=[] for c in range(0, len(exp)):
if (exp[c]>='0' and exp[c]<='9'):
stack.append(exp[c])
else:
op = exp[c]
n2 = stack.pop()
n1 = stack.pop()
if (op!="^"):
v = n1+op+n2
else:
v = "pow(%s,%s)"%(n1,n2)
print v, eval(v)
stack.append("%s"%eval(v)) return stack.pop() print calc()
python 二叉树实现带括号的四则运算的更多相关文章
- python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)
#!/usr/bin/python #* encoding=utf-8 s = "20-5*(0+1)*5^(6-2^2)" c = 0 top = [0,s[c],0] op = ...
- Python调用函数带括号和不带括号的区别
1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...
- python装饰器带括号和不带括号的语法和用法
装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: def ...
- python实例化时带括号与不带
1.首先这个标题题目不是很准确,但一时又想不到更好的标题所以只好用这个标题,下面我们来看看为什么. 首先我们要明白python中类的实例化是要加上括号的,那么不加括号是什么意思你,看代码 class ...
- Python带括号的计算器
带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走 我会努力加油 将Python学好学踏实 参考了两位博主的文章 http://www.cnblogs.co ...
- python函数带不带括号的问题
Python带括号返回的是该函数的返回值 不带括号返回的是该函数的位置信息等
- Python中类-带括号与不带括号的区别
类不带括号我们叫赋值,带括号我们叫实例化. 什么是赋值? a=7 b=a id(7) 140726814208448 id(a) 140726814208448 id(b) 1407268142084 ...
- Python笔记:调用函数,带扩号和和不带括号的区别
调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...
- 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)
使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...
随机推荐
- C#用反射实现两个类的对象之间相同属性的值的复制
在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要 ...
- vue项目做seo优化(prerender-spa-plugin vue-meta-info)
今天公司考虑seo设计方案,服务端渲染(ssr)和 预渲染的方式,不过只是打算对几个简单的页面seo,所以选择了使用预渲染的方式,以下是实现过程中遇到的问题,供大家查看,有不对的地方请指正: 使用pr ...
- jQuery使用CDN加速
使用新浪.百度.谷歌和微软的CDN加速jQuery 随着jQuery的版本更新,体积也越来越大,如果把jQuery放在自己的服务器上,会消耗不少的流量.而谷歌和百度等互联网公司为了方便开发者,提供了C ...
- Tomcat应用部署
1.Tomcat安装配置 1.1安装包下载 http://tomcat.apache.org/ 选择下载安装包版本 选择适合当前系统的安装包 安装包目录说明: 1.2环境配置 配置用户名密码conf/ ...
- ActiveMQ(为什么要使用消息中间件,JMS传输模型)
为什么要使用消息中间件: 同步请求:当客户端向服务器发送一条请求的时候,此时服务器由于网络,或者处理一些比较大的数据的时候,可能有延迟,客户端 会处于一直等待的状态.只有等待服务器返回处理结果, ...
- oracle dg 报错提示 涉及硬盘错误
###oracle dg 报错提示 涉及硬盘错误 Dec 23 03:28:01 xhisdg rsyslogd: [origin software="rsyslogd" swVe ...
- 知识点:Mysql 索引原理完全手册(2)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 八. 联合索引与覆盖索引 ...
- php curl使用 常用操作
1. http Get 简单的只需要 这四行 就 $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, "http://site" ...
- Ajax2简单的使用方式
http://www.cnblogs.com/Ming8006/p/6142191.html
- C博客01——分支,顺序结构
C博客01--分支,顺序结构 1. 本章学习总结 1.1 思维导图 请以思维导图总结本周的学习内容. 1.2 本章学习体会及代码量体会 1.2.1 学习体会 对于C语言课程的理解,我有点吃力,不是说老 ...