У меня есть стек классов, который выглядит следующим образом.
У меня есть эта функция, которая проверяет, действительна ли данная строка скобок.
После отладки и печати текущего символа и символа на пике: Этот вывод соответствует условию в строке 40 и должен вытолкнуть элемент. Но не делает. Вот полный код.
class Stack:
def __init__(self):
self.item = []
def push(self, item):
self.item.append(item)
def pop(self):
self.item.pop()
def isEmpty(self):
return self.item == []
def peek(self):
if not self.isEmpty():
return self.item[-1]
else:
return "Stack is Empty."
def getStack(self):
return self.item
s = Stack()
string = "{[{()}][]}"
print(list(string))
def isValid(String):
for char in string:
# print(char)
print("Peak -> " +s.peek())
print("char -> " + char)
if char == "(" or char == "[" or char == "{":
s.push(char)
elif (char == ")" and s.peek == "("):
s.pop()
elif (char == "]" and not s.isEmpty() and s.peek == "["):
s.pop()
elif (char == "}" and not s.isEmpty() and s.peek == "{"):
s.pop()
else:
return False
return s.isEmpty()
print(isValid(string))
Перед проверкой оператора if, char ->) и s.peak возвращает -> (. Итак, он должен быть отображен, но вместо этого не запускается ни один оператор if и возвращает false. (PS, если я использую или вместо и, он работает (по крайней мере, для пары, которую я пробовал). Разве это не сработает для и , а не для или )
Что-то не хватает? Помогите, кто-нибудь!