按书上练习完,就可以知道日常的用处啦

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# learn <<Problem Solving with Algorithms and Data Structures>>
# Release 3.0
# chengang882 @ 2016-12-20
# 它可以检查常用的语法里,({[]})这些符号是否是正常闭合的
# Completed implementation of a stack ADT

class Stack(object):
    def __init__(self):
        self.items = []

    def is_empty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def peek(self):
        return self.items[len(self.items)-1]

    def size(self):
        return len(self.items)

def par_checker(symbol_string):
    s = Stack()
    balanced = True
    index = 0
    pure_symbol = []
    for symbol in symbol_string:
        if symbol not in "(){}[]":
            continue
        else:
            pure_symbol.append(symbol)
    pure_symbol_string = ''.join(pure_symbol)
    print pure_symbol_string
    while index < len(pure_symbol_string) and balanced:
        symbol = pure_symbol_string[index]
        print index, symbol, balanced, "###"

        if symbol in "([{":
            s.push(symbol)
        else:
            if s.is_empty():
                balanced = False
            else:
                top = s.pop()
                if not matches(top, symbol):
                    balanced = False
        index += 1
    if balanced and s.is_empty():
        return True
    else:
        return False

def matches(open, close):
    opens = "([{"
    closes = ")]}"
    return opens.index(open) == closes.index(close)

if __name__ == "__main__":
    text_sample ="""
    class Stack(object):
    def __init__(self):
        self.items = []

    def is_empty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def peek(self):
        return self.items[len(self.items)-1]

    def size(self):
        return len(self.items)
    """
    print(par_checker("()()[]()[]()()()()()[()]()()"))
    print(par_checker(text_sample))

  输出:

>>>
()()[]()[]()()()()()[()]()()
0 ( True ###
1 ) True ###
2 ( True ###
3 ) True ###
4 [ True ###
5 ] True ###
6 ( True ###
7 ) True ###
8 [ True ###
9 ] True ###
10 ( True ###
11 ) True ###
12 ( True ###
13 ) True ###
14 ( True ###
15 ) True ###
16 ( True ###
17 ) True ###
18 ( True ###
19 ) True ###
20 [ True ###
21 ( True ###
22 ) True ###
23 ] True ###
24 ( True ###
25 ) True ###
26 ( True ###
27 ) True ###
True
()()[]()[]()()()()()[()]()()
0 ( True ###
1 ) True ###
2 ( True ###
3 ) True ###
4 [ True ###
5 ] True ###
6 ( True ###
7 ) True ###
8 [ True ###
9 ] True ###
10 ( True ###
11 ) True ###
12 ( True ###
13 ) True ###
14 ( True ###
15 ) True ###
16 ( True ###
17 ) True ###
18 ( True ###
19 ) True ###
20 [ True ###
21 ( True ###
22 ) True ###
23 ] True ###
24 ( True ###
25 ) True ###
26 ( True ###
27 ) True ###
True

  

剪短的python数据结构和算法的书《Data Structures and Algorithms Using Python》的更多相关文章

  1. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  2. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  3. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  4. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  5. Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...

  6. Python数据结构与算法设计总结篇

    1.Python数据结构篇 数据结构篇主要是阅读[Problem Solving with Python]( http://interactivepython.org/courselib/static ...

  7. python数据结构与算法之算法和算法分析

    1.问题.问题实例.算法的概念区分. 一个例子说明一下: 问题:判断一个正整数N是否为素数   #问题是需要解决的一个需求 问题实例:判断1314是否为素数? #问题实例是该问题的一个具体例子 算法: ...

  8. python数据结构与算法之问题求解实例

    关于问题求解,书中有一个实际的案例. 上图是一个交叉路口的模型,现在问题是,怎么安排红绿灯才可以保证相应的行驶路线互不交错. 第一步,就是把问题弄清楚. 怎么能让每一条行驶路线不冲突呢? 其实,就是给 ...

  9. python数据结构与算法之问题求解

    懂得计算机的童鞋应该都知道,一条计算机程序由数据结构跟算法两大部分组成.所以,其实不管你使用哪种计算机语言编写程序,最终这两部分才是一个程序设计的核心.所以,一个不懂得数据结构与算法的程序员不是一个好 ...

随机推荐

  1. NOIP2016呵呵记

    经过了一年的想象和臆测,经历了学长们的几次考试,通过老师的言语莫名感受过了所谓oi式压力之后,自己的考试也终于到来了. 考前的生活也没有想象中的那么充实,无非跟着神犇刷刷题,讨论算法,学点新技巧,然后 ...

  2. git Bash常用命令

    1.Construct ssh key (If you want to commit to git server via THIS COMPUTER) git config --global user ...

  3. django创建blog

    如果本文看不懂的,去看的我视频吧!http://www.testpub.cn/ ------------------------------------------- Django 自称是" ...

  4. web前端基础知识-(三)JavaScript基本操作

    JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. JavaScrip ...

  5. DD_belatedPNG.js解决透明PNG图片背景灰色问题

    <!--[]> <script type="text/javascript" src="http://www.phpddt.com/usr/themes ...

  6. Pandas-数据聚合与分组运算

    目录 图解"split-apply-combine" 数据的分类split: groupby() 以column进行分组 以index进行分组 分组遍历 数据的应用apply: a ...

  7. C/C++的开发环境安装

    sudo apt-get install gcc sudo apt-get install g++ sudo apt-get install cmake sudo apt-get install ma ...

  8. ReactiveCocoa源码拆分解析(六)

    (整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) RAC为了实现优雅的信号绑定,可谓使尽浑身解数,不仅 ...

  9. 设计模式--5.5 代理模式-通用代码及aop

    1.通用代码 (1)Subjects package com.design.代理模式.通用代码; public interface Subject { void request(); } (2)Rea ...

  10. jquery和dom之间的转换

    刚开始学习jquery,可能一时会分不清楚哪些是jQuery对象,哪些是DOM对象.至于DOM对象不多解释,我们接触的太多了,下面重点介绍一下jQuery,以及两者相互间的转换. 什么是jQuery对 ...