峥途 发表于 2024-2-11 21:07:06

第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')

FishC 发表于 2024-2-11 21:07:22

在代码中,你需要给变量 `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 小助理,如未能正确解答您的问题,请继续追问。

tommyyu 发表于 2024-2-11 21:13:06

前两个 if 语句好像错了

人造人 发表于 2024-2-11 23:18:26

#!/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:02:08

本帖最后由 峥途 于 2024-2-12 10:04 编辑

tommyyu 发表于 2024-2-11 21:13
前两个 if 语句好像错了

我这个给的例子是可以过的,只是不知道up提供的例子以外是否可以过,请问为什么说if错了呢?{:7_113:}

峥途 发表于 2024-2-12 10:04:18

人造人 发表于 2024-2-11 23:18


谢谢,还没有学到后边的内容, 没太看懂,我再研究一下别的吧{:5_100:}

tommyyu 发表于 2024-2-12 10:48:01

峥途 发表于 2024-2-12 10:02
我这个给的例子是可以过的,只是不知道up提供的例子以外是否可以过,请问为什么说if错了呢?

能不能表述一下前两个 if 的逻辑?
如果输入 [{}] 和 (()) 就会出错。

峥途 发表于 2024-2-12 12:07:42

tommyyu 发表于 2024-2-12 10:48
能不能表述一下前两个 if 的逻辑?
如果输入 [{}] 和 (()) 就会出错。

哦哦,原来是这样,十分感谢!
页: [1]
查看完整版本: 第20讲最新课后作业的动动手问题,我这样打代码有隐藏问题吗?【题目如下】