编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法

先入和元素后判断,后入的元素先判断。这符合栈的特征。

所以这里可以利用栈实现括号合法性的判断。

 1 #!/usr/bin/env python3
 2
 3 def judge(expression):
 4         s = Stack()
 5         d = {‘}‘:‘{‘, ‘]‘:‘[‘, ‘)‘:‘(‘}
 6         for i in expression:
 7                 if i == ‘[‘ or i == ‘{‘ or i == ‘(‘:
 8                         s.push(i)
 9                 if i == ‘]‘ or i == ‘}‘ or i == ‘)‘:
10                         #当遍历到后括号时,发现栈里没有数据
11                         #说明表达式有问题
12                         if s.is_empty():
13                                 return False
14                         #或者出栈的数据和后括号对应的前括号不一样
15                         #则表达式也有问题
16                         elif s.pop() != d[i]:
17                                 return False
18           #遍历玩表达式后,要再次判断一下栈是否为空
19         #如果不为空,说明表达式有问题。
20         if not s.is_empty():
21                 return False
22         else:
23                 return True
24
25
26 class Stack(object):
27         def __init__(self):
28                 self._elems = []
29
30         def is_empty(self):
31                 return self._elems == []
32
33         def push(self, elem):
34                 self._elems.append(elem)
35
36         def pop(self):
37                 if self.is_empty():
38                         raise ValueError
39                 return self._elems.pop()
40
41         def peek(self):
42                 if self.is_empty():
43                         raise ValueError
44                 return self._elems[-1]
45
46 if __name__ == "__main__":
47         ep = "[a+b*(5-4)]*{x+b+b*{(1+2)}}"
48         ep1 = "[a+b*(5-4)]*{x+b+b*{{(1+2)}}"
49         print(judge(ep))
50         print(judge(ep1))
时间: 2024-08-25 10:19:47

编程题目:写一段代码,判断包含括号 { [ ( ) ] } 的表达式是否合法的相关文章

PHP写一段代码,确保多个进程同时写入一个文件成功

这个需求是在软件设计过程常见的加锁.学计算机的同学都应该知道,这个是在<计算机操作系统>课程上有这个知识点.主要要考虑的是进程的同步,也就是进程对资源的互斥访问.OK,用程序说话吧! <?phpfunction writefile( $filename, $data ){ $fp = fopen( $filepath, 'a' );   //以追加的方式打开文件,返回的是指针 do{   usleep( 100 );  //暂停执行程序,参数是以微秒为单位的 }while( !flock

假设写一段代码引导PC开机这段代码是 ? Here is a tiny &amp;quot;OS&amp;quot; :-D

Hello world -- OS 我找到了华科绍志远博士的相关代码,发现他依据MIT的JOS的boot.S 稍作改动.然后单独剥离出来,能够非常好玩~ 资料下载地址: http://download.csdn.net/detail/u011368821/8006465 原则上仅仅须要两个文件(boot.S mmu.h)就能够,可是我们这里还须要一些附带的虚拟器工具.以及makefile来做实验. 须要提示的就是地址0xb800是显存的开头地址 : ) MOVSB(MOVe String Byt

用for循环写这段代码

之前用while循环写了一段代码,现在改为用for循环来写,代码如下: hongtao_age = 38 for i in range(5): guess_age = int(input("Please guess the hongtao's age: ")) if guess_age == hongtao_age: print("================") print("Yes!you get it!!Good Bye!!") pri

如果写一段代码引导PC开机这段代码是 ? Here is a tiny &quot;OS&quot; :-D

Hello world -- OS 我找到了华科绍志远博士的相关代码,发现他根据MIT的JOS的boot.S 稍作修改,然后单独剥离出来,可以很好玩~ 资料下载地址: http://download.csdn.net/detail/u011368821/8006465 原则上只需要两个文件(boot.S mmu.h)就可以,但是我们这里还需要一些附带的虚拟器工具,以及makefile来做实验. 需要提示的就是地址0xb800是显存的开头地址 : ) MOVSB(MOVe String Byte)

javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

1 function test(){ 2 var bt = document.getElementById("bt"); 3 bt.addEventListener("click",function(){ 4 5 var str = "dafdsjkfnaiesdaadsllllllkkkkk444444444444444"; 6 var obj = []; // 存放结果集的数组,结果中存放 key-value 对象 7 for(var i =

day2:写几段代码

在linux公社找到本书<Python核心编程 第二版> 跳过前面32页的啰七八嗦,看代码~ 字符串替换 >>> print "%s's price is %d yuan" % ( "this tomato" , 6 ) this tomato's price is 6 yuan %s和%d是来占座的,分别占了字符串和整数的座.s代表string(字符串),d为啥代表整数我忘了-- 可以看出: 1.比起c++的printf,Python

用 wait-notify 写一段代码来解决生产者-消费者问题

在同步块中调用 wait() 和 notify()方法,如果阻塞,通过循环来测试等待条件.请参考答案中的示例代码. [生产者] import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; public class Producer implements Runnable { private final Vector sharedQueue; private final int

高效 告别996,开启java高效编程之门 2-8实战:判断逻辑参数化-Lambda表达式

0 有用部分 1    函数式编程简介 2    函数式编程和lambda的关系 3    lambda表达式应用范围 4    lambda应用的五个案例 5    函数式编程应用条件 6 提出问题 0 有用部分 4 lambda应用的五个案例 5 函数式编程应用条件 6 提出问题 本节主要介绍了lambda的使用方式,具体demo参照2-10 和2-15 1 函数式编程简介 函数式编程是一种不同的编程思想,定义函数作为公民,可以赋值给变量,作为参数或者返回值来传递 2 函数式编程和lambd

值得收藏!16段代码入门Python循环语句

[ 导读 ]本文重点讲述for语句和while语句.for语句属于遍历循环,while语句属于当型循环.除了两个循环语句外,还介绍了break.continue与pass三个用于控制循环结构中的程序流向的语句.在此基础之上,也介绍了列表推导式,这是一种特殊的循环语句. 循环语句又称为重复结构,用于反复执行某一操作.面对大数量级的重复运算,即使借助计算机,重复编写代码也是费时的,这时就需要借助循环语句.使用循环语句一般要用到条件判断,根据判断式的返回值决定是否执行循环体. 循环分为两种模式,一种是