def make_sum(a, b): # 加
return ['+', a, b]
def make_prod(a, b): # 乘
return ['*', a, b]
def make_diff(a, b): # 减
return ['-', a, b]
def make_div(a, b): # 除
return ['/', a, b]
def is_basic_exp(a): # 判别是否为基本表达式
return not isinstance(a, list)
def eval_exp(e):
if is_basic_exp(e):
return e
op, a, b = e[0], eval_exp(e[1]), eval_exp(e[2])
if op == '+':
return eval_sum(a, b)
elif op == '-':
return eval_diff(a, b)
elif op == '*':
return eval_prod(a, b)
elif op == '/':
return eval_div(a, b)
else:
raise ValueError("Unkown opterator:", op)
def eval_sum(a, b): # 加
if isinstance(a, Number) and isinstance(b, Number): # 如果a是一个数字并且b也是一个数字
return a+b
if isinstance(a, Number) and a == 0:
return b
if isinstance(b, Number) and b == 0:
return a
return make_sum(a, b)
def eval_div(a, b): # 除
if isinstance(a, Number) and isinstance(b, Number):
return a / b
if isinstance(a, Number) and a == 0:
return 0
if isinstance(b, Number) and b == 1:
return a
if isinstance(b, Number) and b ==0:
raise ZeroDivisionError
return make_div(a, b)
def eval_prod(a, b): # 乘
if isinstance(a, Number) and isinstance(b, Number):
return a * b
if isinstance(a, Number) and a == 0:
return 0
if isinstance(b, Number) and b == 0:
return 0
if isinstance(a, Number) and a == 1:
return b
if isinstance(b, Number) and b == 1:
return a
return make_prod(a, b)
def eval_diff(a, b): # 减
if isinstance(a, Number) and isinstance(b, Number):
return a - b
if isinstance(a, Number) and a == 0:
return -b
if isinstance(b, Number) and b == 0:
return a
return make_diff(a, b)
二叉树的应用:表达树的代码实现(python语言)
最新推荐文章于 2024-05-01 17:47:55 发布