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('非法')
鱼油的代码有两个主要问题:
问题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,函数自身用法与语法
两者不能出错,
每每自己感觉没错时,但系统又报错时,
多半是没有做到细节,
比如大小写,中英转换,函数与语法用法不当,
造成的。
页:
[1]