鱼C论坛

 找回密码
 立即注册
查看: 91|回复: 1

python最新版作业20讲的动手题

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
自己思考的代码如下:
思路:
1.设置一个空列表用来存储输入的括号;
2.对列表长度分为奇偶数长度,奇数则报错,偶数继续往下走;
3.我分了两种情况:1)[]{}类型的  2){[]}类型的
4.两种情况主要的区别在:需要判断第二个字符是否为左括号

目前遇到的问题:
1.对于{[]}类型的,发现当{[]}()这种时,就不适用了。。。
2.我感觉我的代码很繁杂,太多的if-else语句,不简洁,恳求能有更简洁明了的代码(小甲鱼的代码我看了,但是希望能自己思考做出来,所以答案就不要推啦~)






  1. s=[]
  2. char=input("请输入:")

  3. s.extend(char)
  4. n=len(s)


  5. a1='{'
  6. a2='['
  7. a3='('
  8. if a1=='{':
  9.     b1='}'
  10. if a2=='[':
  11.     b2=']'
  12. if a3=='(':
  13.     b3=')'

  14. #奇数
  15. if n%2!=0:
  16.     print("非法!")
  17. elif n%2==0:   #偶数
  18.     i=0
  19.     a_1=s[i+1]
  20.     for i in range(n):
  21.       
  22. # []{}这种情况
  23.         if a_1==']'or a_1==')' or a_1=='}':   
  24.             a=s.pop(i)
  25.             b=s.pop(-i)
  26.             
  27.             print(a)
  28.             print(b)
  29.             print(a_1)
  30.             print(i+1)
  31.             
  32.             if a=='{':
  33.                 b1='}'
  34.                 if b!=b1:
  35.                     print("no1_1")
  36.                     break
  37.                 else:
  38.                     print("yes1_1")
  39.                     
  40.             elif a=='[':
  41.                 b2=']'
  42.                 if b!=b2:
  43.                     print("no2_1")
  44.                     break
  45.                 else:
  46.                     print("yes2_1")
  47.                     
  48.             elif a=='(':
  49.                 b3=')'
  50.                 if b!=b3:
  51.                     print("no3_1")
  52.                     break
  53.                 else:
  54.                     print("yes3_1")
  55.             else:
  56.                 if len(s)==0:
  57.                     print("合格!")
  58.                     break
  59.         
  60.   #{[]}这种情况
  61.         elif  a_1=='{' or a_1=='[' or a_1=='(':
  62.             b=s.pop(len(s)-1-i)

  63.             print(a)
  64.             print(b)
  65.             print(a_1)
  66.            
  67.             if a=='{':
  68.                 b1='}'
  69.                 if b!=b1:
  70.                     print("no1_2")
  71.                     break
  72.                 else:
  73.                     print("yes1_2")
  74.                     
  75.             elif a=='[':
  76.                 b2=']'
  77.                 if b!=b2:
  78.                     print("no2_2")
  79.                     break
  80.                 else:
  81.                     print("yes2_2")
  82.                     
  83.             elif a=='(':
  84.                 b3=')'
  85.                 if b!=b3:
  86.                     print("no3_2")
  87.                     break
  88.                 else:
  89.                     print("yes3_2")
  90.             else:
  91.                 if len(s)==0:
  92.                     print("合格!")
  93.                     break
  94.       
复制代码




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
感谢你的分享!你的思路很清晰,但确实如你所说,代码可能有些复杂。括号匹配问题有一个经典且简洁的解决方案:使用栈(stack)数据结构。

基本原理:
- 遍历字符串中的每个字符。
- 遇到左括号时,将其压入栈。
- 遇到右括号时,检查栈是否为空。如果为空,则不匹配;否则,弹出栈顶元素,并检查是否与当前右括号匹配。
- 遍历结束后,如果栈为空,则所有括号匹配;否则,不匹配。

这种方法可以处理任何类型的括号组合,包括混合类型如{}()

这里是一个简单的Python实现示例:


  1. def is_valid_parentheses(s):
  2.     stack = []
  3.     mapping = {')': '(', '}': '{', ']': '['}  # 定义右括号到左括号的映射
  4.    
  5.     for char in s:
  6.         if char in mapping.values():  # 如果是左括号
  7.             stack.append(char)
  8.         elif char in mapping.keys():  # 如果是右括号
  9.             if not stack or stack[-1] != mapping[char]:
  10.                 return False
  11.             stack.pop()
  12.         # 忽略其他字符(如果输入只包含括号,可以省略检查)
  13.    
  14.     return not stack  # 如果栈为空,则匹配
复制代码


在这个代码中,我们使用一个字典来映射右括号到对应的左括号,这样代码更简洁。你可以根据需要调整。

希望这能帮助你简化代码!继续加油,自己动手实现一遍会更有收获。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-28 02:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表