实验三:堆栈应用括号匹配实验(python实现)

 

def check_brackets(expression):
    stack = []
    bracket_map = {')': '(', ']': '[', '}': '{'}

    for i in expression:
        if i in '([{':
            stack.append(i)
        elif i in ')]}':
            if not stack:
                return -2  # 右括号多于左括号
            top = stack.pop()
            if top != bracket_map[i]:
                return -1  # 左右括号配对次序不正确

    if stack:
        return -3  # 左括号多于右括号
    return 0  # 左右括号匹配正确


def main():
    n = int(input())
    results = []

    for _ in range(n):
        expression = input()
        result = check_brackets(expression)
        results.append(result)

    for result in results:
       print(result)


if __name__ == "__main__":
      main()

拓展:

       在Python中,if __name__ == "__main__": 语句用于确定模块的运行方式。这是Python中一个非常重要的编程惯例,能够帮助我们更好地组织代码和管理模块的执行。下面是对这个语句的详细解释:

理解 __name__

  1. 模块的属性: 每个Python模块都有一个内置属性 __name__。当模块被直接运行时,__name__ 的值被设定为 "__main__"。然而,当模块作为一个导入模块在其他脚本中运行时,__name__ 的值将等于模块的名称(例如,如果模块名为 mymodule.py,那么 __name__ 的值就是 "mymodule")。

为什么使用 if __name__ == "__main__":

这个语句的主要用途是为模块提供一种测试和声明的机制,以避免在导入其他模块时不必要的代码执行。其具体意义和作用包括:

  1. 区分直接运行和被导入: 通过使用 if __name__ == "__main__":,我们可以写一些代码,这些代码只在模块被直接运行时执行,而在它被导入为其他模块时不执行。这使得代码更具灵活性。

  2. 可重用性: 这使模块更加可重用。当你导入一个模块时,只会执行定义的函数和类,而不会执行模块内部的测试代码或主函数。这对于模块的逻辑和功能的测试非常有用。

  3. 组织代码: 使得脚本结构更规范,便于管理和理解。可以将主程序放置在这一块,可以清晰地看到主程序逻辑。

示例

以下是一个简单的示例,展示了如何使用 if __name__ == "__main__": 来组织模块和函数的执行。

# example.py

def greet():
    print("Hello, world!")

# 只有当这个文件被直接运行时,下面的代码才会执行
if __name__ == "__main__":
    greet()
    print("This script is running directly.")

  • 直接运行:
    如果运行 python example.py,输出将是:

    Hello, world!
    This script is running directly.
    
  • 导入模块:
    如果在另一个 Python 文件中导入这个模块:

    import example
    

    它不会打印“Hello, world!”和“ This script is running directly.”,只会让 greet() 函数可以使用,而不会自动执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值