一、括号判定

前一篇文章我们介绍了栈的简单应用中,关于括号的判定,但那只是一种括号的判定,下面我们来介绍多种括号混合使用时,如何判断括号左右一一对应。

比如“{}{(}(][”这种情况,需要对一种括号判定的代码进行修改。

 from stack import Stack  //引入栈
def parChecker(symbolString):
s=Stack()
balanced = True
index = 0
while index < len(symbolString) and balanced: //当输入的字符串不为空时循环开始
symbol = symbolString[index]
if symbol in "([{":
s.push(symbol) //思路如一种括号判定时一样,从左到右逐渐循环,当碰到左括号时,加入栈。 else:
if s.isEmpty():
balanced = False //当栈为空时,说明字符串内没有左括号,或者左括号已经全部出栈,但是仍有多余括号。判定不匹配。
else:
top = s.pop()
if not matches(top,symbol):
balanced = False //碰到右括号时,而且栈不为空,那么从栈推出一个左括号,看是否与这个右括号相匹配,如果不匹配则判定最终字符串括号不匹配。 index = index + 1 if balanced and s.isEmpty():
return True else:
return False

下面是判定左括号和右括号匹配的matches函数:

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

输入一个括号字符串:

print(parChecker("{{[]}}"))
print(parChecker("{{[]}"))

结果如下:

二、进制转换

在进制转换中也有体现栈的特性的地方,比如十进制转换为二进制,如下图

二进制最后的结果为:10000011,刚好与余数顺序相反,这就与栈的先入后出相契合,在进制转换中,我们 可以把余数入栈,最后输出结果时在出栈。

from stack import Stack

def divideBy2(decNumber,base):
digits = "0123456789ABCDEF"
remstack =Stack() while decNumber > 0:
rem =decNumber%base
remstack.push(rem) #把余数入栈
decNumber = decNumber // base binString = ""
while not remstack.isEmpty():
binString = binString +digits[remstack.pop()] #余数出栈

栈及其简单应用(二)(python代码)的更多相关文章

  1. 栈及其简单应用(python代码)

    栈属于线性结构(Linear Struncture),要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质."栈“者,存储货物或供旅客住宿的地方,可引申为仓库.中转站,所以引入到计 ...

  2. python脚本-简单读取有效python代码量

    import os count=[0,0] paths=[] file_count=[0] def sum_code(path): if os.path.isfile(path): one_file( ...

  3. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  4. 用一行Python代码制作动态二维码

    在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. GitHub网站参见:https://github.c ...

  5. 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)

    本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...

  6. 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  7. 研磨设计模式解析及python代码实现——(二)外观模式(Facade)

    一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...

  8. 一起来写2048(160行python代码)

    前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家,而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...

  9. 一起写2048(160行python代码)

    前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家.而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...

随机推荐

  1. ADB-常见命令使用详解

    ADB命令使用详解 ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备. 1.连接android设置adb connect 设备名例如:adb con ...

  2. TCP 进阶

    转自: https://www.cnblogs.com/caoyusongnet/p/9087633.html 一. 端口号 标准的端口号由 Internet 号码分配机构(IANA)分配.这组数字被 ...

  3. oracle 12c数据库在Windows环境下的安装

    ​    因为菜鸟小白之前做着一些数据库审计产品的测试,接下来我会分享一些关于数据库安装和通过python的访问数据库的知识 安装 首先我们需要下载一个oracle 12c的安装程序,解压后右键点击“ ...

  4. (6)webpack使用babel插件的使用

    为什么要使用babel插件? 首先要了解babel插件是干嘛的,随着js的语法规范发展,出现了越来越多的高级语法,但是使用webpack打包的时候,webpack并不能全部理解这些高级语法,需要我们使 ...

  5. CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018

    CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作   来源:晓飞的算法工程笔记 公众号 论文:Neural ...

  6. IDM的“免费版”NDM免费的下载工具

    软件截图 软件介绍 免费小巧的多线程下载工具,支持断点续传,支持浏览器扩展,嗅探下载音视频文件. 和IDM差不多,只不过是免费的 下载软件 Win 我提供的UCloud-OSS 官网下载 Mac 我提 ...

  7. p46_IPv4地址

    IP地址:全世界唯一的32位/4字节标识符,标识路由器主机的接口. IP地址::={<网络号>,<主机号>} 图中有6个子网 比如222.1.3.0是网络号,3是主机号,222 ...

  8. Makefile中的奇葩字符

    % : Makefile规则通配符,一般出现在目标或是依赖中 * : shell命令中的通配符,一般出现在命令中 $@:目标的名字 $^:所有依赖的名字 $<:第一个依赖的名字 $?:所有依赖中 ...

  9. [redis] -- 为什么那么快

    1 完全基于内存 2 数据结构简单,对数据操作也简单 3 只有单线程,避免了不必要的上下文切换,也不存在竞态,不存在多进程或多线程导致的切换而消耗CPU,不用开了各种锁的问题 4 使用多路IO复用模型 ...

  10. 题解 洛谷 P4171 【[JSOI2010]满汉全席】

    考虑\(2-SAT\). 将汉式看作\(0\)状态,满式看做\(1\)状态,将每个材料拆成\(01\)两个状态. 从\(a\)向\(b\)连有向边表示的意义为选了\(a\)后必须选\(b\). 那么每 ...