python最新版作业20讲的动手题
自己思考的代码如下:思路:
1.设置一个空列表用来存储输入的括号;
2.对列表长度分为奇偶数长度,奇数则报错,偶数继续往下走;
3.我分了两种情况:1)[]{}类型的2){[]}类型的
4.两种情况主要的区别在:需要判断第二个字符是否为左括号
目前遇到的问题:
1.对于{[]}类型的,发现当{[]}()这种时,就不适用了。。。
2.我感觉我的代码很繁杂,太多的if-else语句,不简洁,恳求能有更简洁明了的代码(小甲鱼的代码我看了,但是希望能自己思考做出来,所以答案就不要推啦~)
s=[]
char=input("请输入:")
s.extend(char)
n=len(s)
a1='{'
a2='['
a3='('
if a1=='{':
b1='}'
if a2=='[':
b2=']'
if a3=='(':
b3=')'
#奇数
if n%2!=0:
print("非法!")
elif n%2==0: #偶数
i=0
a_1=s
for i in range(n):
# []{}这种情况
if a_1==']'or a_1==')' or a_1=='}':
a=s.pop(i)
b=s.pop(-i)
print(a)
print(b)
print(a_1)
print(i+1)
if a=='{':
b1='}'
if b!=b1:
print("no1_1")
break
else:
print("yes1_1")
elif a=='[':
b2=']'
if b!=b2:
print("no2_1")
break
else:
print("yes2_1")
elif a=='(':
b3=')'
if b!=b3:
print("no3_1")
break
else:
print("yes3_1")
else:
if len(s)==0:
print("合格!")
break
#{[]}这种情况
elifa_1=='{' or a_1=='[' or a_1=='(':
b=s.pop(len(s)-1-i)
print(a)
print(b)
print(a_1)
if a=='{':
b1='}'
if b!=b1:
print("no1_2")
break
else:
print("yes1_2")
elif a=='[':
b2=']'
if b!=b2:
print("no2_2")
break
else:
print("yes2_2")
elif a=='(':
b3=')'
if b!=b3:
print("no3_2")
break
else:
print("yes3_2")
else:
if len(s)==0:
print("合格!")
break
感谢你的分享!你的思路很清晰,但确实如你所说,代码可能有些复杂。括号匹配问题有一个经典且简洁的解决方案:使用栈(stack)数据结构。
基本原理:
- 遍历字符串中的每个字符。
- 遇到左括号时,将其压入栈。
- 遇到右括号时,检查栈是否为空。如果为空,则不匹配;否则,弹出栈顶元素,并检查是否与当前右括号匹配。
- 遍历结束后,如果栈为空,则所有括号匹配;否则,不匹配。
这种方法可以处理任何类型的括号组合,包括混合类型如{}()。
这里是一个简单的Python实现示例:
def is_valid_parentheses(s):
stack = []
mapping = {')': '(', '}': '{', ']': '['}# 定义右括号到左括号的映射
for char in s:
if char in mapping.values():# 如果是左括号
stack.append(char)
elif char in mapping.keys():# 如果是右括号
if not stack or stack[-1] != mapping:
return False
stack.pop()
# 忽略其他字符(如果输入只包含括号,可以省略检查)
return not stack# 如果栈为空,则匹配
在这个代码中,我们使用一个字典来映射右括号到对应的左括号,这样代码更简洁。你可以根据需要调整。
希望这能帮助你简化代码!继续加油,自己动手实现一遍会更有收获。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]