谁能解释一下这段代码中的括号类吗?

2024-03-29 05:01:07 发布

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

# python3

import sys

class Bracket:

    def __init__(self, bracket_type, position):
        self.bracket_type = bracket_type
        self.position = position

    def match(self, char):
        """Matches given character with the bracket's type."""

        if self.bracket_type == '[' and char == ']':
            return False
        if self.bracket_type == '{' and char == '}':
            return False
        if self.bracket_type == '(' and char == ')':
            return False
        return True


def checker(text):
    stack = []
    for index, char in enumerate(text, start=1):
        if char in ("[", "(", "{"):            can anyone explain these 
            stack.append(Bracket(char, index))    two lines as well exactly
        elif char in ("]", ")", "}"):
            if stack:
                return index

            top = stack.pop()
            if not top.match(char):
                return index
    if not stack:
        top = stack.pop()
        return top.position

    return "Success"


if __name__ == "__main__":
    text = sys.stdin.read().strip("\n")
    print(checker(text))

在这段代码中,我很难理解如何调用括号类。我的意思是我理解init的工作原理,但是我不理解类括号中的函数匹配是如何工作的。这对代码有何影响。我非常感谢你的帮助


Tags: andtextinselffalseindexreturnif
3条回答

下面的for循环正在枚举传递给checker()函数的字符串

它返回一个索引和传递给checker()的字符串的每个字符。 start=1的原因是在传递给checker()的字符串周围不包含引号

for index, char in enumerate(text, start=1):

下面的条件检查是否存在字符“[”、“(”、“{”)。 如果存在,则将它们作为参数传递给括号类。然后将从括号类返回的值附加到列表堆栈[]

if char in ("[", "(", "{"):            
        stack.append(Bracket(char, index))   

尝试在for循环之后添加一个print语句,如下所示,并运行代码

for index, char in enumerate(text, start=1):
     print(index,char)
     .......

我想这会帮助你理解它在做什么

def __init__(self, bracket_type, position):
        .........

Bracket Class中,bracket_typechar,而positionindex

例如,当您定义函数时

   def match():

          #code

您使用

    match()

同样,如果您定义了一个类,例如

   class bracket:

创建类的对象

   brac=bracket()

如果在init方法中传递任何参数。必须将其添加到对象类中。就是

    brad=bracket(*args)

*args表示它可以是任何参数。代码中的两个参数是括号类型和位置。必须将其参数传递给对象。 我希望这能回答你关于课堂的问题

在代码中,下一行将从堆栈中弹出一个元素,它是括号类的实例,因此top将成为该实例,然后在if条件中调用match方法

top = stack.pop()
 if not top.match(char):

相关问题 更多 >