今天看了一遍《C++沉思录》的第八章,作者使用c++实现了表示算术表达式的树。
就是像 (-3)*(3+3)的树就是:
然后,我就用python实现了一下。因为python与C++不同,(作者使用了句柄类),我这里就没考虑这么多。
下面是实现:
# -*- coding:utf-8 -*-
class One_node(object):
def __init__(self,n):
self.n=n
def __str__(self):
return str(self.n)
class Unary_node(object):
def __init__(self,op,n):
self.op=op
self.n=n
def __str__(self):
return "("+self.op+str(self.n)+")"
class Binary_node(object):
def __init__(self,op,left,right):
self.op=op
self.left=left
self.right=right
def __str__(self):
return "("+str(self.left)+self.op+str(self.right)+")"
class Ternary_node(object):
def __init__(self,left,middle,right):
self.left=left
self.middle=middle
self.right=right
def __str__(self):
return "("+str(self.left)+"?"+str(self.middle)+":"+str(self.right)+")"
def Expr(*argc):
if len(argc)==1:
return One_node(*argc)
elif len(argc)==2:
return Unary_node(*argc)
elif len(argc)==3:
return Binary_node(*argc)
if __name__=="__main__":
x=Expr(10)
print x
x=Expr("-",10)
print x
x=Expr("*",2,10)
print x
x=Expr("*",Expr(10),Expr("-",3))
print x
x=Expr("*",x,x)
print x
x=Ternary_node(x,x,x)
print x
阅读全文 类别:Python 查看评论文章来源:
http://hi.baidu.com/mirguest/blog/item/dc98a183e5ac6acbbc3e1e87.html