鱼C论坛

 找回密码
 立即注册
查看: 45|回复: 2

[已解决]python最新版20讲作业

[复制链接]
发表于 2026-10-1 20:30:32 | 显示全部楼层 |阅读模式
30鱼币
求问大佬这个代码的问题在哪 我的for循环只执行一次 而且结果也不对




0. 请编写一个程序,判断给定的字符串 s 中括号的写法是否合法。

条件:

字符串仅包含 '('、')'、'['、']'、'{'、'}' 这三对括号的组合
左右括号必须成对编写,比如 "()" 是合法的,"(" 则是非法的
左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的






  1. string = input("输入测试字符串:")
  2. string_list = [ ]
  3. string_list.extend(string)
  4. list_temp = [ ]
  5. r = ''
  6. index = 0
  7. for i in string_list:
  8.     print(i)
  9.     if (i == '{') or (i == '(' )or (i == '['):
  10.         list_temp.append(string_list.pop(index))
  11.     else:
  12.         if len(list_temp) == 0:
  13.             print("illegal2!")
  14.             break
  15.         if i == '}':
  16.             r = '{'
  17.         if i == ']':
  18.             r = '['
  19.         if i == ')':
  20.             r = '('

  21.         if list_temp.pop() != r:
  22.             print(i)
  23.             print(r)
  24.             print(test1)
  25.             print('illegal3!')
  26.             break
  27.     index += 1


  28. print('end')
复制代码
最佳答案
2026-10-1 20:30:33
问题的核心是:你在遍历 string_list 的同时,又修改了 string_list。

自己尝试修改一下吧?

最佳答案

查看完整内容

问题的核心是:你在遍历 string_list 的同时,又修改了 string_list。 自己尝试修改一下吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-10-1 20:30:33 | 显示全部楼层    本楼为最佳答案   
问题的核心是:你在遍历 string_list 的同时,又修改了 string_list。

自己尝试修改一下吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-10-1 20:30:46 | 显示全部楼层
你的代码主要有这几个问题:

1. list_temp 一直是空列表,没有压入任何东西,第一次执行 list_temp.pop() 就会报错,所以循环只走一次。
2. pop() 不能每次循环都执行,应该只在遇到右括号时执行。
3. 括号映射反了:遇到左括号应该把对应的右括号压入栈,而不是只赋值给 r。
4. 循环结束后还要检查栈是否为空,栈不为空说明有左括号没闭合。

正确思路:用列表当栈。遇到左括号,把对应的右括号压栈;遇到右括号,先判断栈是否为空,再弹出栈顶比较是否相同;最后栈为空才合法。

参考代码:


  1. s = input("输入测试字符串:")
  2. stack = []
  3. pairs = {'(': ')', '[': ']', '{': '}'}
  4. ok = True

  5. for ch in s:
  6.     if ch in pairs:              # 左括号
  7.         stack.append(pairs[ch])
  8.     elif ch in ')]}':            # 右括号
  9.         if not stack or stack.pop() != ch:
  10.             ok = False
  11.             break

  12. if ok and not stack:
  13.     print("合法")
  14. else:
  15.     print("非法")
复制代码


另外,在论坛贴代码时最好用 [code] 包起来,否则方括号 [ ] 会被论坛当成标签解析掉,比如 [] 可能就显示不出来。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-11 00:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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