随笔 - 41, 文章 - 8, 评论 - 8, 引用 - 0
数据加载中……

[导入][python]表示算术表达式的树

今天看了一遍《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

posted on 2011-02-02 12:01 mirguest 阅读(486) 评论(0)  编辑 收藏 引用 所属分类: python


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理