鱼C论坛

 找回密码
 立即注册
查看: 1872|回复: 7

[已解决]第20讲最新课后作业的动动手问题,我这样打代码有隐藏问题吗?【题目如下】

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

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

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

x
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')
最佳答案
2024-2-11 21:07:22
在代码中,你需要给变量 `s` 赋值一个列表,而不是空的。

另外,你使用 `extend()` 方法将用户输入的字符串添加到列表中是正确的,但是注意这个方法没有返回值,所以你不能把它用在赋值语句中。

需要修改的代码如下:

  1. s = list(input('请输入测试字符串:'))
  2. isX = isY = isZ = 0

  3. while s:
  4.     if isX != 0 and s[-1] != '(':
  5.         break
  6.     if isY != 0 and s[-1] == '}':
  7.         break
  8.     if s[-1] == ")":
  9.         isX += 1
  10.     elif s[-1] == ']':
  11.         isY += 1
  12.     elif s[-1] == '}':
  13.         isZ += 1
  14.     elif s[-1] == '(':
  15.         isX -= 1
  16.     elif s[-1] == '[':
  17.         isY -= 1
  18.     elif s[-1] == '{':
  19.         isZ -= 1
  20.     s.pop()

  21. if isX == isY == isZ == 0:
  22.     print('合法^o^')
  23. else:
  24.     print('非法T_T')
复制代码


在这个修改后的代码中,我们使用 `list()` 函数将用户输入的字符串转换为一个字符列表,并将其赋值给变量 `s`。接着,我们对列表 `s` 进行操作,使用 `pop()` 函数去除列表的最后一个元素。通过修改索引的方式,将你之前写的代码进行了一定的调整。最后,我们使用 `is` 运算符比较变量的值,以判断字符串是否合法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
疑问3.png

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-2-11 21:07:22 | 显示全部楼层    本楼为最佳答案   
在代码中,你需要给变量 `s` 赋值一个列表,而不是空的。

另外,你使用 `extend()` 方法将用户输入的字符串添加到列表中是正确的,但是注意这个方法没有返回值,所以你不能把它用在赋值语句中。

需要修改的代码如下:

  1. s = list(input('请输入测试字符串:'))
  2. isX = isY = isZ = 0

  3. while s:
  4.     if isX != 0 and s[-1] != '(':
  5.         break
  6.     if isY != 0 and s[-1] == '}':
  7.         break
  8.     if s[-1] == ")":
  9.         isX += 1
  10.     elif s[-1] == ']':
  11.         isY += 1
  12.     elif s[-1] == '}':
  13.         isZ += 1
  14.     elif s[-1] == '(':
  15.         isX -= 1
  16.     elif s[-1] == '[':
  17.         isY -= 1
  18.     elif s[-1] == '{':
  19.         isZ -= 1
  20.     s.pop()

  21. if isX == isY == isZ == 0:
  22.     print('合法^o^')
  23. else:
  24.     print('非法T_T')
复制代码


在这个修改后的代码中,我们使用 `list()` 函数将用户输入的字符串转换为一个字符列表,并将其赋值给变量 `s`。接着,我们对列表 `s` 进行操作,使用 `pop()` 函数去除列表的最后一个元素。通过修改索引的方式,将你之前写的代码进行了一定的调整。最后,我们使用 `is` 运算符比较变量的值,以判断字符串是否合法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2024-2-11 21:13:06 | 显示全部楼层
前两个 if 语句好像错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-11 23:18:26 | 显示全部楼层
  1. #!/usr/bin/env python
  2. #coding=utf-8

  3. text = input('请输入测试字符串:')
  4. d = {')': '(', ']': '[', '}': '{'}
  5. stack = []
  6. for i in text:
  7.     k = i in d.keys()
  8.     v = i in d.values()
  9.     if not k and not v: continue
  10.     stack.append(i)
  11.     if k:
  12.         if len(stack) == 1: break
  13.         if d[stack[-1]] == stack[-2]:
  14.             stack = stack[:-2]

  15. if len(stack): print('非法T_T')
  16. else: print('合法^o^')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-12 10:02:08 | 显示全部楼层
本帖最后由 峥途 于 2024-2-12 10:04 编辑
tommyyu 发表于 2024-2-11 21:13
前两个 if 语句好像错了


我这个给的例子是可以过的,只是不知道up提供的例子以外是否可以过,请问为什么说if错了呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-12 10:04:18 | 显示全部楼层

谢谢,还没有学到后边的内容, 没太看懂,我再研究一下别的吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

能不能表述一下前两个 if 的逻辑?
如果输入 [{}] 和 (()) 就会出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

哦哦,原来是这样,十分感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 13:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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