Sarah5526 发表于 2025-9-25 14:17:51

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
      



FishC 发表于 2025-9-25 14:18:48

感谢你的分享!你的思路很清晰,但确实如你所说,代码可能有些复杂。括号匹配问题有一个经典且简洁的解决方案:使用栈(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]
查看完整版本: python最新版作业20讲的动手题