鱼C论坛

 找回密码
 立即注册
查看: 2749|回复: 4

[已解决]有关python列表的问题

[复制链接]
发表于 2023-6-10 19:00:15 | 显示全部楼层 |阅读模式

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

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

x
python最新版第20讲作业里最后判断括号合法性的题目

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

  2. # 创建一个特殊列表
  3. stack = []

  4. for c in s:
  5.     if c == '(' or c == '{' or c == '[':
  6.         stack.extend(c)
  7.     else:
  8.         if len(stack) == 0:
  9.             print("非法T_T")
  10.             break

  11.         if c == ')':
  12.             d = '('
  13.         elif c == ']':
  14.             d = '['
  15.         elif c == '}':
  16.             d = '{'

  17.         if d != stack[-1]:
  18.             print("非法T_T")
  19.             break
  20. else:
  21.     if len(stack) == 0:
  22.         print("合法^o^")
  23.     else:
  24.         print("非法T_T")
复制代码


为什么在判断 d != stack[-1] 就不行了呢?
最佳答案
2023-6-10 19:02:10
这个Python代码是用于检查输入的字符串中的括号是否合法的。合法的意思是所有的括号都需要正确配对,比如"()"、"[]"、"{}"都是合法的,而"("、")("、"["等就不合法。

在这个代码中,我们有一个列表 stack ,用于存储字符串中的开括号。每次当我们在字符串中遇到一个开括号时,我们就把它添加到 stack 的末尾。然后,每次我们在字符串中遇到一个闭括号时,我们就检查 stack 的末尾元素是否是对应的开括号。

问题是在以下代码段中:

  1.         if c == ')':
  2.             d = '('
  3.         elif c == ']':
  4.             d = '['
  5.         elif c == '}':
  6.             d = '{'

  7.         if d != stack[-1]:
  8.             print("非法T_T")
  9.             break
复制代码

d 用来存储应该与 c 配对的开括号。然后,我们检查 d 是否等于 stack 的末尾元素。如果不等于,那就意味着 c 没有与正确的开括号配对,所以我们就打印出"非法T_T"并结束循环。

但是,如果输入的字符串中包含不是括号的字符,比如"a",这段代码就会出现错误,因为在这种情况下, d 的值不会被赋值,然后在 if d != stack[-1]: 这行代码中, d 是未定义的,Python就会抛出一个错误。为了修复这个问题,我们需要在 else 子句中处理这种情况,像这样:

  1.         if c == ')':
  2.             d = '('
  3.         elif c == ']':
  4.             d = '['
  5.         elif c == '}':
  6.             d = '{'
  7.         else:
  8.             continue

  9.         if d != stack[-1]:
  10.             print("非法T_T")
  11.             break
复制代码

现在,如果 c 不是一个闭括号,我们就会跳过当前循环的剩余部分,并继续下一个循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-10 19:02:10 | 显示全部楼层    本楼为最佳答案   
这个Python代码是用于检查输入的字符串中的括号是否合法的。合法的意思是所有的括号都需要正确配对,比如"()"、"[]"、"{}"都是合法的,而"("、")("、"["等就不合法。

在这个代码中,我们有一个列表 stack ,用于存储字符串中的开括号。每次当我们在字符串中遇到一个开括号时,我们就把它添加到 stack 的末尾。然后,每次我们在字符串中遇到一个闭括号时,我们就检查 stack 的末尾元素是否是对应的开括号。

问题是在以下代码段中:

  1.         if c == ')':
  2.             d = '('
  3.         elif c == ']':
  4.             d = '['
  5.         elif c == '}':
  6.             d = '{'

  7.         if d != stack[-1]:
  8.             print("非法T_T")
  9.             break
复制代码

d 用来存储应该与 c 配对的开括号。然后,我们检查 d 是否等于 stack 的末尾元素。如果不等于,那就意味着 c 没有与正确的开括号配对,所以我们就打印出"非法T_T"并结束循环。

但是,如果输入的字符串中包含不是括号的字符,比如"a",这段代码就会出现错误,因为在这种情况下, d 的值不会被赋值,然后在 if d != stack[-1]: 这行代码中, d 是未定义的,Python就会抛出一个错误。为了修复这个问题,我们需要在 else 子句中处理这种情况,像这样:

  1.         if c == ')':
  2.             d = '('
  3.         elif c == ']':
  4.             d = '['
  5.         elif c == '}':
  6.             d = '{'
  7.         else:
  8.             continue

  9.         if d != stack[-1]:
  10.             print("非法T_T")
  11.             break
复制代码

现在,如果 c 不是一个闭括号,我们就会跳过当前循环的剩余部分,并继续下一个循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-10 19:04:25 | 显示全部楼层
是因为判断一个配对后就要移除来判断下一个括号的原因吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-10 19:07:39 | 显示全部楼层
我懂啦xdm
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-10 19:46:25 | 显示全部楼层

请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 19:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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