#!/usr/bin/env python
# -*- coding:utf-8 -*- 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 is_number(x):
return (isinstance(x, int) or isinstance(x, float) or isinstance(x, complex)) #表达式计算
def eval_exp(e, values):
if is_basic_exp(e):
#如果e位于字典里则返回键对应的值,否则直接返回e
if e in values.keys():
return values[e]
else:
return e
op, a, b = e[0], eval_exp(e[1], values), eval_exp(e[2], values)
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("Unknown operator:", op) #加法
def eval_sum(a, b):
if is_number(a) and is_number(b):
return a+b
if is_number(a) and a==0:
return b
if is_number(b) and b==0:
return a
return make_sum(a, b) #减法
def eval_diff(a, b):
if is_number(a) and is_number(b):
return a - b
if is_number(a) and a==0:
return -b
if is_number(b) and b==0:
return a
return make_diff(a, b) #乘法
def eval_prod(a, b):
if is_number(a) and is_number(b):
return a * b
if is_number(a) and a==0:
return 0
if is_number(b) and b==0:
return 0
return make_prod(a, b) #除法
def eval_div(a, b):
if is_number(a) and is_number(b):
return a / b
if is_number(a) and a==0:
return 0
if is_number(b) and b==1:
return a
if is_number(b) and b==0:
raise ZeroDivisionError
return make_div(a, b) #取出表达式里所有变量的集合
var_list = [] #这里使用全局变量
def varibles(exp):
for i in range(1,3):
if is_basic_exp(exp[i]):
var_list.append(exp[i])
else:
varibles(exp[i])
return var_list if __name__=='__main__':
e1 = make_prod(make_sum('a',3), make_sum('b',make_sum(4,6)))
print(e1)
print("变量集合:",varibles(e1))
values = {}
values['a'] = 3
values['b'] = 4
print(values)
print(eval_exp(e1, values))

数据结构:基于list实现二元表达式(python版)的更多相关文章

  1. 数据结构之 栈 (Python 版)

    数据结构之 栈 (Python 版) -- 利用线性表实现栈 栈的特性: 后进先出 基于顺序表实现栈 class SStack(): ''' 基于顺序表 实现的 栈类 ''' def __init__ ...

  2. 数据结构之线性表(python版)

    数据结构之线性表(python版) 单链表 1.1  定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...

  3. 数据结构之队列(Python 版)

    数据结构之队列(Python 版) 队列的特点:先进先出(FIFO) 使用链表技术实现 使用单链表技术,在表首尾两端分别加入指针,就很容易实现队列类. 使用顺序表list实现 # 队列类的实现 cla ...

  4. 栈应用之 后缀表达式计算 (python 版)

    栈应用之 后缀表达式计算 (python 版) 后缀表达式特别适合计算机处理 1.  中缀表达式.前缀表达式.后缀表达式区别  中缀表达式:(3 - 5) * (6 + 17 * 4) / 3 17 ...

  5. 北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  6. 基于股票大数据分析的Python入门实战(视频教学版)的精彩插图汇总

    在我写的这本书,<基于股票大数据分析的Python入门实战(视频教学版)>里,用能吸引人的股票案例,带领大家入门Python的语法,数据分析和机器学习. 京东链接是这个:https://i ...

  7. 【数据结构与算法Python版学习笔记】引言

    学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...

  8. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

  9. 【python】python的二元表达式和三元表达式

    二元表达式 x,y=4,3if x>y: s = yelse: s= x print s   x if x<y else y 三元表达式: >>> def f(x,y): ...

随机推荐

  1. iosselect:一个js picker项目,在H5中实现IOS的select下拉框效果

    具体文档和demo可以访问github:https://github.com/zhoushengmufc/iosselect 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的pi ...

  2. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  3. Windows平台Go调用DLL的坑

    最近的项目中,使用了GO来开发一些服务中转程序.业务比较简单,但是有一些业务需要复用原有C++开发的代码.而在WINDOWS,用CGO方式来集成C/C++代码并不是太方便.所以用DLL把C++的代码封 ...

  4. Java基础知识(贰)

    一.面向对象 Java中的面向对象与C#的面向对象,本质都是一样.所以对于学过C#的同学理解Java中面向对象的概念就比较轻松. 对象 定义: 万物皆对象,客观存在的事物都称为对象. 1.面向对象 类 ...

  5. linux shell 中的sleep命令

    开始还以为是这样的语法: sleep(1), 后面发现是: linux shell 中的sleep命令 分类: LINUX 在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小 ...

  6. Android-Eclipse-INSTALL_FAILED_UPDATE_INCOMPATIBLE错误

    电脑重装了系统,环境问题一大堆,唉,搞死人,这不,今天就出现了这样的一个奇怪的问题. INSTALL_FAILED_UPDATE_INCOMPATIBLE 最后搜了一遍,发现是因为已经安装了这个包,包 ...

  7. ThinkPhp5.0模型验证规则

    Tp5提供了模型数据规则的验证功能,用于在数据save或者update前验证数据的有效性.Tp5提供校验规则的类为\Think\Validate,默认提供的校验规则可以查看该文件. 在Model文件中 ...

  8. ★Kali信息收集~4.DNS系列

    ★.1host:DNS信息 参数: 一般情况下,host查找的是A,AAAA,和MX的记录 案例: DNS服务器查询  host -t ns 域名 A记录和MX记录查询  host 域名(host - ...

  9. Redis数据结构详解之List(二)

    序言 思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用red ...

  10. 【.NET深呼吸】基于异步上下文的本地变量(AsyncLocal)

    在开始吹牛之前,老周说两个故事. 第一个故事是关于最近某些别有用心的人攻击.net的事,其实我们不用管它们,只要咱们知道自己是.net爱好者就行了,咱们就是因为热爱.net才会选择它.这些人在这段时间 ...