Использование стека для балансировки HTML Python 3 - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть задание, в котором я должен использовать стек в 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>

Еще раз, любая помощь будет оценена.Я хочу понять, где я иду не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...