第20讲最新课后作业的动动手问题,我这样打代码有隐藏问题吗?【题目如下】
s = []s.extend(input('请输入测试字符串:'))
isX = isY = isZ = 0
while s != []:
if isX != 0 and s[(len(s)-1)] != '(':
break
if isY != 0 and s[(len(s)-1)] == '}':
break
if s[(len(s)-1)] == ")":
isX += 1
elif s[(len(s)-1)] == ']':
isY += 1
elif s[(len(s)-1)] == '}':
isZ += 1
elif s[(len(s)-1)] == '(':
isX -=1
elif s[(len(s)-1)] == '[':
isY -= 1
elif s[(len(s)-1)] == '{':
isZ -= 1
s.pop(len(s)-1)
if isX == isY == isZ == 0:
print('合法^o^')
else:
print('非法T_T')
在代码中,你需要给变量 `s` 赋值一个列表,而不是空的。
另外,你使用 `extend()` 方法将用户输入的字符串添加到列表中是正确的,但是注意这个方法没有返回值,所以你不能把它用在赋值语句中。
需要修改的代码如下:
s = list(input('请输入测试字符串:'))
isX = isY = isZ = 0
while s:
if isX != 0 and s[-1] != '(':
break
if isY != 0 and s[-1] == '}':
break
if s[-1] == ")":
isX += 1
elif s[-1] == ']':
isY += 1
elif s[-1] == '}':
isZ += 1
elif s[-1] == '(':
isX -= 1
elif s[-1] == '[':
isY -= 1
elif s[-1] == '{':
isZ -= 1
s.pop()
if isX == isY == isZ == 0:
print('合法^o^')
else:
print('非法T_T')
在这个修改后的代码中,我们使用 `list()` 函数将用户输入的字符串转换为一个字符列表,并将其赋值给变量 `s`。接着,我们对列表 `s` 进行操作,使用 `pop()` 函数去除列表的最后一个元素。通过修改索引的方式,将你之前写的代码进行了一定的调整。最后,我们使用 `is` 运算符比较变量的值,以判断字符串是否合法。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 前两个 if 语句好像错了 #!/usr/bin/env python
#coding=utf-8
text = input('请输入测试字符串:')
d = {')': '(', ']': '[', '}': '{'}
stack = []
for i in text:
k = i in d.keys()
v = i in d.values()
if not k and not v: continue
stack.append(i)
if k:
if len(stack) == 1: break
if d] == stack[-2]:
stack = stack[:-2]
if len(stack): print('非法T_T')
else: print('合法^o^')
本帖最后由 峥途 于 2024-2-12 10:04 编辑
tommyyu 发表于 2024-2-11 21:13
前两个 if 语句好像错了
我这个给的例子是可以过的,只是不知道up提供的例子以外是否可以过,请问为什么说if错了呢?{:7_113:} 人造人 发表于 2024-2-11 23:18
谢谢,还没有学到后边的内容, 没太看懂,我再研究一下别的吧{:5_100:} 峥途 发表于 2024-2-12 10:02
我这个给的例子是可以过的,只是不知道up提供的例子以外是否可以过,请问为什么说if错了呢?
能不能表述一下前两个 if 的逻辑?
如果输入 [{}] 和 (()) 就会出错。 tommyyu 发表于 2024-2-12 10:48
能不能表述一下前两个 if 的逻辑?
如果输入 [{}] 和 (()) 就会出错。
哦哦,原来是这样,十分感谢!
页:
[1]