还有什么其他办法没
s = input("请录入测试字符串:")left =[]
temp = []
for i in s:
if i == "(" or i == "[" or i == "{":
left.append(i)
elif len(left) == 0:
print("非法")
break
elif i == ")" or i == "]" or i == "}":
temp = left[-1] + i
if temp == "()" or temp == "[]" or temp == "{}":
left.pop()
else:
print("非法")
break
else:
if len(left) == 0:
print("合法")
else:
print("非法")
其中:
elif len(left) == 0:
print("非法")
break
这一块,放在 temp = left[-1] + i 之后会报错
放在现在的位置,看着可恶心,还有别的办法嘛 根据你提供的代码,我看到你的问题在于当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 小助理,如未能正确解答您的问题,请继续追问。 d , e , f = [] , {')' : '(' , ']' : '[' , '}' : '{'} , False
s = input('请输入测试字符串:')
if s :
for x in s :
if x in e . keys() or x in e . values() :
if x in e . values() :
d . append(x)
else :
if d and d[-1] == e :
d . pop()
else :
break
else :
if not d :
f = True
print('合法') if f else print('非法')
页:
[1]