У меня есть задание, в котором я должен использовать стек в Python для проверки внешнего html-файла на наличие сбалансированных тегов (сошники совпадают с доводчиками).Я знаю, что здесь есть и другие подобные вопросы, но они были менее чем полезны.Моя мысль состоит в том, чтобы взять кусок html-тега, указанного в «<» и «>», и поместить только имя тега в стек.Затем вытолкните закрывающий тег и сопоставьте его с открывающим тегом, где, если они полностью совпадают, HTML считается сбалансированным.Пока что все идет не очень хорошо.Любая помощь будет оценена.
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def htmlChecker():
f = open("nocloser.txt", "r")
s = Stack()
balanced = True
for line in f:
index = 0
while index < len(line) and balanced:
symbol = line[index]
if symbol == "<":
tempIndex = index + 1
tagName = ""
while line[tempIndex] != ">" and tempIndex < len(line):
if line[tempIndex] in "<":
print("Invalid Syntax:", line.strip())
tagName += line[tempIndex]
tempIndex += 1
if tagName[0] != "/":
s.push(tagName)
print("Opened tag with name:", tagName)
else:
if s.isEmpty() == False:
popped = s.pop()
print("Revmoving next line in stack", popped)
else:
balanced = False
print("Closing tag without opener.", tagName)
print("Stack", s)
index += 1
if balanced and s.isEmpty():
return True
else:
return False
HTML-файл:
<html>
<head>
<title>
Example
</title>
</head>
<body>
<h1>Hello, world</h1>
</html>
Еще раз, любая помощь будет оценена.Я хочу понять, где я иду не так.