使用for语句读取列表,若元素存在“【”,会发生丢失或异常
本帖最后由 夜路9恶小 于 2022-8-20 15:25 编辑问题来源于新版Python课后作业第20讲的题目:
发现使用for语句读取列表时,若元素为“【”,会发生报错或者丢失
x = input("请输入测试字符串:")
s1 = list(x)
s2 = []
print(s2,s1)
for i in s1:
if i == '[' or i == '{' or i == '(':
s2.append(i)
s1.remove(i)
print(s2,s1)
b = 0
c = 1
for a in s2:
if a == "(":
temp = ")"
if temp != s1:
c = 0
break
if a == "{":
temp = "}"
if temp != s1:
c = 0
break
if a == "[":
temp = "]"
if temp != s1:
c = 0
break
print(s2,s1)
b += 1
if c == 1:
print("合法")
else:
print("非法")
代码出现异常的情况:
有没有大佬能告诉我是什么原理还是我有细节出错了 本帖最后由 jackz007 于 2022-8-20 17:34 编辑
这种题用字典解决非常简单
def foo(s):
d = {'{' : '}' , '[' : ']' , '(' : ')'}
while len(s) > 1:
if s in d . keys():
if s == d]:
s = s . strip()
elif s[-1] == d]:
s = s . strip()
else:
break
elif s[-2] in d . keys() and s[-1] == d]:
s = s[: -2]
else:
break
return False if s else True
s = input("请输入测试字符串 : ") . strip()
if s:
print('合法 ^o^') if foo(s) else print('非法 T_T') jackz007 发表于 2022-8-20 12:41
这种题用字典加递归解决非常简单
你试试" ()[]{} " 合法吗? 我也来个例子吧,简单暴力
def isRight(s):
s = ''.join({}'])
while any(['()' in s, '[]' in s, '{}' in s]):
s = s.replace('()','').replace('[]','').replace('{}','')
return False if s else True
s = input('请输入测试字符串:')
print('合法 ^o^') if isRight(s) else print('非法 T_T')
for i in s1:
你可以把i 先理解成是s1的索引,一开始的时候,i=0,即s1 ,值是'{'。然后进入你的if 判断,被加入到s2列表,然后在s1列表中删除了。这个删除以后,s1 就会由'['顶上去啦。
那么for循环的下一步,就是i =1,也就是直接是s1了,所以'['(此时在s1位置)就会被跳过,被忽略了。{:10_298:} 抬头吧奔跑吧Q 发表于 2022-8-20 14:04
for i in s1:
你可以把i 先理解成是s1的索引,一开始的时候,i=0,即s1 ,值是'{'。然后进入你的if 判 ...
大佬nb,给你递茶{:10_298:} jackz007 发表于 2022-8-20 12:41
这种题用字典解决非常简单
好的,只是没学到
页:
[1]