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

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

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

 

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

 

posted @ 2017-02-26 02:13  小黄人python  阅读(2985)  评论(0编辑  收藏  举报