码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-02-26 08:15:13      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:ret   code   pen   int   python   express   __init__   断包   pre   

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

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

 

 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))

 

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

标签:ret   code   pen   int   python   express   __init__   断包   pre   

原文地址:http://www.cnblogs.com/xautxuqiang/p/6443519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!