关于 Python 中 for-else 的用法与括号合法性判断
你提到的这段代码:
if len(stack) == 0:
print("非法")
else:
print("合法")
其实是和 for...else 结构配合使用的。这个 else 不是 if 的 else,而是 for 的 else,它的作用是:当 for 循环没有被 break 中断时,才会执行 else 里的内容。
举个例子:
for char in s:
if 不合法:
print("非法")
break
else:
print("合法")
也就是说,如果在 for 循环中发现了不合法的情况,就会 break,此时 else 不会执行;如果整个 for 循环都没有问题,才会执行 else 中的 print("合法")。
如何判断括号是否合法?
像你说的 “{()}【】” 这种,其实是可以通过 栈(stack) 来判断是否匹配的。基本思路如下:
- 遇到左括号(如 ( { 【)就压入栈中;
- 遇到右括号(如 ) } 】)时,检查栈顶是否是对应的左括号;
- 如果匹配,就弹出栈顶;
- 如果不匹配,说明不合法;
- 最后如果栈为空,说明所有括号都匹配成功。
注意:这种方法不仅能判断左右对称的情况,也能判断嵌套的合法性,比如 “{[()]}” 也是合法的。
示例代码:
def is_valid(s):
stack = []
pairs = {')': '(', '}': '{', '】': '【'}
for char in s:
if char in '({【':
stack.append(char)
elif char in ')}】':
if not stack or stack[-1] != pairs[char]:
print("非法")
break
stack.pop()
else:
if len(stack) == 0:
print("合法")
else:
print("非法")
你可以试试输入 “{()}【】”,会输出 “合法”。
如果还有不懂的地方,欢迎继续提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |