用python实现堆栈以验证括号

2024-09-30 00:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个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)

Tags: selfreturnifstack堆栈defitemspop
2条回答

正如我在评论中所说,你必须检查两种情况:

class Stack (list):
        def push (self, x):
                return self.append (x)

def check_braces (data):
        stack = Stack ()
        for c in data:
                if c == '{':
                        stack.push (c)
                if c == '}':
                        if not stack: return False #First case: too many closing
                        stack.pop ()
        return not stack #Second case too many opening

print (check_braces ('{}}') )
print (check_braces ('{{}') )
print (check_braces ('{}{') )
print (check_braces ('}{}') )
print (check_braces ('{}{}{{}}') )

但是,由于堆栈的唯一重要之处在于其深度,您可以简单地使用:

^{pr2}$

您的代码非常好,但是您的输入(myData)有问题。

请使用以下选项-

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', '}', '}', '}', '}']

您的输入中有几个'},'项,应该是'}'

相关问题 更多 >

    热门问题