|
发表于 2024-1-12 22:12:27
|
显示全部楼层
本帖最后由 sfqxx 于 2024-1-12 22:14 编辑
首先,我们来分析一下您的代码逻辑。代码的主要思路是使用栈(stack1)来处理括号的匹配问题。对于每一个遇到的左括号,您将其压入栈中。遇到右括号时,则检查栈顶元素是否与之匹配。如果匹配,则从栈中移除该左括号;如果不匹配或栈为空,则判断为非法。
您的代码中存在几个问题:
1. 变量 x 的使用:您使用变量 x 来访问栈顶元素。然而,这个变量在栈的大小变化时没有正确更新,导致可能会访问错误的元素或引发索引错误。
2. 判断逻辑错误:在遇到右括号时,您的代码应该先检查栈是否为空,然后再检查栈顶元素是否匹配。目前的代码没有进行这样的检查。
3. 输出逻辑:您的代码在每次匹配成功时就输出“合法”,这实际上只是表示某一对括号匹配成功,而不是整个字符串的括号都合法。
下面是根据您的代码思路进行修改的代码:
- stack1 = []
- temp = input("请输入括号:")
- list_1 = list(temp)
- valid = True
- for i in list_1:
- if i in "([{":
- stack1.append(i)
- elif i == "]":
- if not stack1 or stack1[-1] != "[":
- valid = False
- break
- stack1.pop()
- elif i == ")":
- if not stack1 or stack1[-1] != "(":
- valid = False
- break
- stack1.pop()
- elif i == "}":
- if not stack1 or stack1[-1] != "{":
- valid = False
- break
- stack1.pop()
- if valid and not stack1:
- print("合法!")
- else:
- print("非法")
复制代码 |
|