鱼C论坛

 找回密码
 立即注册
查看: 545|回复: 3

python第20讲列表II的最后一题不懂

[复制链接]
发表于 2025-3-29 21:39:32 | 显示全部楼层
关于 Python 中 for-else 的用法与括号合法性判断

你提到的这段代码:


  1. if len(stack) == 0:
  2.     print("非法")
  3. else:
  4.     print("合法")
复制代码


其实是和 for...else 结构配合使用的。这个 else 不是 if 的 else,而是 for 的 else,它的作用是:当 for 循环没有被 break 中断时,才会执行 else 里的内容。

举个例子:


  1. for char in s:
  2.     if 不合法:
  3.         print("非法")
  4.         break
  5. else:
  6.     print("合法")
复制代码


也就是说,如果在 for 循环中发现了不合法的情况,就会 break,此时 else 不会执行;如果整个 for 循环都没有问题,才会执行 else 中的 print("合法")

如何判断括号是否合法?

像你说的 “{()}【】” 这种,其实是可以通过 栈(stack) 来判断是否匹配的。基本思路如下:

  • 遇到左括号(如 ( { 【)就压入栈中;
  • 遇到右括号(如 ) } 】)时,检查栈顶是否是对应的左括号;
  • 如果匹配,就弹出栈顶;
  • 如果不匹配,说明不合法;
  • 最后如果栈为空,说明所有括号都匹配成功。


注意:这种方法不仅能判断左右对称的情况,也能判断嵌套的合法性,比如 “{[()]}” 也是合法的。

示例代码:


  1. def is_valid(s):
  2.     stack = []
  3.     pairs = {')': '(', '}': '{', '】': '【'}

  4.     for char in s:
  5.         if char in '({【':
  6.             stack.append(char)
  7.         elif char in ')}】':
  8.             if not stack or stack[-1] != pairs[char]:
  9.                 print("非法")
  10.                 break
  11.             stack.pop()
  12.     else:
  13.         if len(stack) == 0:
  14.             print("合法")
  15.         else:
  16.             print("非法")
复制代码


你可以试试输入 “{()}【】”,会输出 “合法”。

如果还有不懂的地方,欢迎继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-28 05:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表