鱼C论坛

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

还有什么其他办法没

[复制链接]
发表于 2024-4-23 11:21:15 | 显示全部楼层 |阅读模式

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

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

x
  1. s = input("请录入测试字符串:")
  2. left =[]
  3. temp = []

  4. for i in s:
  5.     if i == "(" or i == "[" or i == "{":
  6.         left.append(i)
  7.     elif len(left) == 0:
  8.         print("非法")
  9.         break
  10.     elif i == ")" or i == "]" or i == "}":
  11.         temp = left[-1] + i
  12.         if temp == "()" or temp == "[]" or temp == "{}":
  13.                 left.pop()
  14.     else:
  15.         print("非法")
  16.         break
  17. else:
  18.     if len(left) == 0:
  19.         print("合法")
  20.     else:
  21.         print("非法")
复制代码


其中:
elif len(left) == 0:
        print("非法")
        break
这一块,放在   temp = left[-1] + i 之后会报错
放在现在的位置,看着可恶心,还有别的办法嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-23 11:21:35 | 显示全部楼层
根据你提供的代码,我看到你的问题在于当temp等于空时(即左括号与右括号匹配成功),你尝试使用left.pop()来移除已匹配的左括号。但是,left是一个空列表,pop方法无法使用。

为了解决这个问题,你可以使用一个计数器变量来记录左括号的数量。每当遇到左括号时,计数器加1;每当遇到右括号时,计数器减1。这样,当你检查完所有字符后,如果计数器为0,就说明所有左括号都匹配成功,字符串合法。否则,左括号数量大于0或小于0,字符串非法。

下面是修改后的代码:

s = input("请录入测试字符串:")
count = 0

for i in s:
    if i == "(" or i == "{":
        count += 1
    elif i == ")" or i == "}":
        count -= 1
        if count < 0:  # 如果有右括号多余左括号,直接跳出循环
            print("非法")
            break

if count == 0:
    print("合法")
elif count > 0:
    print("非法,左括号缺失")
else:
    print("非法,右括号缺失")

这样修改后的代码只需要遍历一次字符串,不需要使用额外的列表,也不需要使用temp变量。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 00:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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