鱼C论坛

 找回密码
 立即注册
查看: 651|回复: 5

[已解决]第二十讲课后习题最后一题,真的没看懂T_T

[复制链接]
发表于 2025-3-19 22:15:16 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
s = input("请输入测试字符串:")

stack = []

  

for c in s:

  if c == '(' or c == '[' or c == '{':

  stack.append(c)
  else:

  
  if len(stack) == 0:

    print("非法T_T")

    break



  if c == ')':

    d = '('

  elif c == ']':

    d = '['

  elif c == '}':

    d = '{'



#从这里开始,后面就基本都蒙了,看讲解也没看懂,天啊,我是不是很笨T_T# 为啥子左边括号就比右边括号多了,又右边括号比左边括号多了
        if d != stack.pop():

    print("非法T_T")

    break

else:
  if len(stack) == 0:

  print("合法^o^")

  else:

  print("非法T_T")
最佳答案
2025-3-19 23:41:28
是这样的,stack 就是一个容器,你可以把它想象成一个篮子……

假设输入是 s = "({[]})",代码的执行过程如下:

1. ( 放进篮子 → 篮子 = ["("]

2. { 放进篮子 → 篮子 = ["(", "{"]

3. [ 放进篮子 → 篮子 = ["(", "{", "["]

4. ] 发现是右括号,检查篮子里 最后一个 是不是 [,匹配成功,取出 [ → 篮子 = ["(", "{"]

5. } 发现是右括号,检查篮子里 最后一个 是不是 {,匹配成功,取出 { → 篮子 = ["("]

6. ) 发现是右括号,检查篮子里 最后一个 是不是 (,匹配成功,取出 ( → 篮子 = []

7. 篮子空了,说明括号完全匹配

仔细观察以上步骤,对应到代码中的实现,是否更清晰了呢?

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-3-20 20:43:15 From FishC Mobile | 显示全部楼层
小甲鱼的二师兄 发表于 2025-3-20 02:32
作了个图,帮助你理解:

感谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-20 03:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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