python 二叉树实现带括号的四则运算

时间:2023-01-10 12:19:44
#!/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 二叉树实现带括号的四则运算的更多相关文章

  1. python 二叉树实现带括号的四则运算(自学的孩子好可怜,不对的地方请轻责)

    #!/usr/bin/python #* encoding=utf-8 s = "20-5*(0+1)*5^(6-2^2)" c = 0 top = [0,s[c],0] op = ...

  2. Python调用函数带括号和不带括号的区别

    1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...

  3. python装饰器带括号和不带括号的语法和用法

    装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: def ...

  4. python实例化时带括号与不带

    1.首先这个标题题目不是很准确,但一时又想不到更好的标题所以只好用这个标题,下面我们来看看为什么. 首先我们要明白python中类的实例化是要加上括号的,那么不加括号是什么意思你,看代码 class ...

  5. Python带括号的计算器

    带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走  我会努力加油  将Python学好学踏实 参考了两位博主的文章 http://www.cnblogs.co ...

  6. python函数带不带括号的问题

    Python带括号返回的是该函数的返回值 不带括号返回的是该函数的位置信息等

  7. Python中类-带括号与不带括号的区别

    类不带括号我们叫赋值,带括号我们叫实例化. 什么是赋值? a=7 b=a id(7) 140726814208448 id(a) 140726814208448 id(b) 1407268142084 ...

  8. Python笔记&colon;调用函数,带扩号和和不带括号的区别

    调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...

  9. 使用python开发一个能够计算带括号的复杂表达式的计算器&lpar;只支持加减乘除&rpar;

    使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...

随机推荐

  1. 关于codeblocks调试错误

    对于出血编程者,当代码有错误时,可能大家一般都是在程序的变量操作之后输出变量的值,但是这种方法较麻烦,工作量较大,也无法很快的找出错误,因此运用编程软件调试错误就显得尤为重要,刚才写啦一个代码,运用直 ...

  2. hadoop的API对HDFS上的文件访问

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...

  3. &period;Net 两个对像之间的映射

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. Xamarin&period;Forms-webservices访问

    虽然xamarin.android/ios 均支持右键添加web引用方式引用webservices,但是xamarin.forms不支持此方式,而如果android/ios各做一套采用抽象方式实现则工 ...

  5. 对http协议断点续传的理解

    断点续传指的是下载传输文件可以中断,之后重新下载时可以接着中断的地方开始下载,而不必从头开始下载.断点续传需要客户端和服务端都支持. 原理是客户端一块一块的请求数据,最后将下载回来的数据块拼接成完整的 ...

  6. asyncio异步IO--同步原语

    asyncio同步原语与线程(threading)模块同步原语基本类似,但有两点重要区别: asyncio同步原语非线程安全,因此不应被用作系统线程同步(可以使用threading代替): async ...

  7. POJ3565 Ants (不相交线)

    那请告诉我 A - D  B - C  和  A - C  B - D 那个的和小 显然是A - C  B - D  (可以根据四边形 对角线大于对边之和) 然后 求的答案是不是就一定是不相交的 就是 ...

  8. Temporal Segment Networks

    摘要 解决问题 用CNN框架有效提取video长时序特征 在UCF101等训练集受限的情况下训练网络 贡献 TSN网络,基于长时间时序结构模型.稀疏时序采样策略,视频层监督有效学习整个视频. HMDB ...

  9. BZOJ1010 &lbrack;HNOI2008&rsqb;玩具装箱toy 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8687797.html 题目传送门 - BZOJ1010 题意 一个数列$C$,然后把这个数列划分成若干段. 对于 ...

  10. 0R的电阻以及NC的意义

    0欧电阻的作用: 0欧的电阻大概有以下几个功能:①做为跳线使用.这样既美观,安装也方便.②在数字和模拟等混合电路中,往往要求两个地分开,并且单点连接.我们可以用一个0欧的电阻来连接这两个地,而不是直接 ...