【发布时间】:2013-12-08 22:24:05
【问题描述】:
我编写了一个 python 脚本来检查大括号的有效性。我实现了堆栈,对于每个'{'我都会进行堆栈推送操作,对于每个'}'我都会进行堆栈弹出并查看它是否为空。但我无法弄清楚我的代码有什么问题。
class Stack(object) :
def __init__(self) :
self.items = []
def push(self, item) :
self.items.append(item)
def pop(self) :
return self.items.pop()
def isEmpty(self) :
return (self.items == [])
def getStack(self) :
return self.items
def check_braces(file_data):
stack = Stack()
for char in file_data:
if char == '{':
stack.push('{')
#print stack.getStack()
if char == '}':
stack.pop()
#print stack.getStack()
if stack.isEmpty():
#print stack.isEmpty()
return 'braces are valid'
return 'braces are invalid'
myData = ['{', 'a:', '"1",', 'b:', '{', 'a:', '"2",', 'b:', '{', 'a:', '"7",', 'b:', '{', 'a:', '"14"', '}', '}', '},', 'b:', '{', 'a:', '"3",', 'b:', '{', 'a:', '"8"', '},', 'b:', '{', 'a:', '"9"', '}', '},', 'b:', '{', 'a:', '"4",', 'b:', '{', 'a:', '"10"', '},', 'b:', '{', 'a:', '"11",', 'b:', '{', 'a:', '"15"', '}', '}', '},', 'b:', '{', 'a:', '"5"', '},', 'b:', '{', 'a:', '"6",', 'b:', '{', 'a:', '"12"', '},', 'b:', '{', 'a:', '"13",', 'b:', '{', 'a:', '16', '},', 'b:', '{', 'a:', '17', '},', 'b:', '{', 'a:', '18', '}', '}', '}', '}']
print check_braces(myData)
【问题讨论】:
-
好吧,它有什么问题? (我投了反对票,因为这没有提供示例输入和预期/实际结果。)至少有一个错误是
stack.pop()可能在空堆栈上被调用。 -
根据您的代码,
{}{{{{将是有效的,因为在第一个(也是唯一一个)}之后,堆栈为空。您必须检查两种情况:您尝试从空堆栈中弹出 -> 无效。最后一个输入项后,栈不为空->无效。