如何检查HTML标记是否是平衡的python的程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (89)

我需要创建一个使用堆栈的函数,以查看html文件是否具有平衡的开始标记和结束标记。这个问题允许你假设html逐行出现,而不必担心缩进。当我不平衡结束标记(如<html>)时,下面的程序就能工作了,这就是所有的问题,但是我试图编辑我的函数,这样它就会看到不平衡的html开始标记。 我在想,我可以在函数中添加另一个语句,比如“if ch == '<' and not stack.is_empty(): return False“,但是我不确定我会把它放在函数中的哪个位置。

class Stack:
""" Last in first out"""
def __init__(self):
    self.items = []
def is_empty(self):
    return self.items == []
def peek(self):
    return self.items[len(self.items - 1)]
def push(self,item):
    return self.items.append(item)
def pop(self):
    return self.items.pop()
def size(self):
    return len(self.items)

def HTMLCheck(newfile):
    # How to see if << is covered
    with open(newfile) as file:
        stack = Stack()
        list1 = list()
        for line in file:
            line = line.rstrip()
            list1.append(line)
        index = 0
        while index < len(list1):
            for ch in list1[index]:
                if ch == '<':
                    stack.push(ch)
                elif ch == '>':
                    if stack.is_empty():
                        return False
                    else:
                        stack.pop()
            index += 1

        return True


print(HTMLCheck('HW5.txt'))
提问于
用户回答回答于
def HTMLCheck(newfile):
    # How to see if << is covered
    with open(newfile) as file:
        stack = Stack()
        list1 = list()
        for line in file:
            line = line.rstrip()
            list1.append(line)
        index = 0
        while index < len(list1):
            for ch in list1[index]:
                if ch == '<':
                    stack.push(ch)
                elif ch == '>':
                    if stack.is_empty():
                        return False
                    else:
                        stack.pop()
            index += 1

        return stack.is_empty() # if the stack is not empty then it was not balanced ...

扫码关注云+社区

领取腾讯云代金券