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__
- 模块的属性: 每个Python模块都有一个内置属性
__name__
。当模块被直接运行时,__name__
的值被设定为"__main__"
。然而,当模块作为一个导入模块在其他脚本中运行时,__name__
的值将等于模块的名称(例如,如果模块名为mymodule.py
,那么__name__
的值就是"mymodule"
)。
为什么使用 if __name__ == "__main__":
这个语句的主要用途是为模块提供一种测试和声明的机制,以避免在导入其他模块时不必要的代码执行。其具体意义和作用包括:
-
区分直接运行和被导入: 通过使用
if __name__ == "__main__":
,我们可以写一些代码,这些代码只在模块被直接运行时执行,而在它被导入为其他模块时不执行。这使得代码更具灵活性。 -
可重用性: 这使模块更加可重用。当你导入一个模块时,只会执行定义的函数和类,而不会执行模块内部的测试代码或主函数。这对于模块的逻辑和功能的测试非常有用。
-
组织代码: 使得脚本结构更规范,便于管理和理解。可以将主程序放置在这一块,可以清晰地看到主程序逻辑。
示例
以下是一个简单的示例,展示了如何使用 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()
函数可以使用,而不会自动执行。