sayumi 发表于 2026-4-4 22:34:54

AI一直说我的代码有问题

本帖最后由 sayumi 于 2026-4-5 11:37 编辑

a = []
b = input('请输入测试字符串:')
for c in b:
    if c == '[' or c == '{' or c == '(':
      a.append(c)
    else:
      if a == []:
            print('非法')
            break
      elif c == ')' and a.pop(len(a) - 1) == '(':
            continue
      elif c == ']' and a.pop(len(a) - 1) == '[':
            continue
      elif c == '}' and a.pop(len(a) - 1) == '{':
            continue
      else:
            print('非法')
            break
else:
    if not a:
            print('合法')
    else:
      print('非法')

FishC 发表于 2026-4-4 22:35:41

鱼油的代码有两个主要问题:

问题1:变量 a 未正确初始化
a 应该是一个列表(用作栈),但代码中写的是 a = ,这会导致语法错误。应该改为 a = []。

问题2:判断栈是否为空的条件错误
代码中 if a == : 应该改为 if not a: 或 if a == []:。

此外,代码逻辑上还需要考虑非括号字符的处理,否则可能导致错误判断。以下是修正后的代码:


a = []
b = input('请输入测试字符串:')
for c in b:
    if c == '[' or c == '{' or c == '(':
      a.append(c)
    else:
      # 跳过非括号字符
      if c not in [']', '}', ')']:
            continue
      if not a:
            print('非法')
            break
      elif c == ')' and a.pop() == '(':
            continue
      elif c == ']' and a.pop() == '[':
            continue
      elif c == '}' and a.pop() == '{':
            continue
      else:
            print('非法')
            break
else:
    # 循环正常结束时,检查栈是否为空
    if not a:
      print('合法')
    else:
      print('非法')


修改说明:
1. 将 a 初始化为空列表 []。
2. 将判断栈空的条件改为 if not a:。
3. 在非左括号的分支中,先判断字符是否为右括号,如果不是则跳过。
4. 将 a.pop(len(a) - 1) 简化为 a.pop()。
5. 循环结束后,检查栈是否为空,避免未匹配的左括号导致误判为合法。

这样修改后,程序可以正确检查括号匹配,并忽略非括号字符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

空python 发表于 2026-4-5 10:53:17

学习了,
最近一段时间,
学习python,函数自身用法与语法
两者不能出错,
每每自己感觉没错时,但系统又报错时,
多半是没有做到细节,
比如大小写,中英转换,函数与语法用法不当,
造成的。

页: [1]
查看完整版本: AI一直说我的代码有问题