鱼C论坛

 找回密码
 立即注册
查看: 886|回复: 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()` 方法将用户输入的字符串添加到列表中是正确的,但是注意这个方法没有返回值,所以你不能把它用在赋值语句中。

需要修改的代码如下:
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 小助理,如未能正确解答您的问题,请继续追问。
疑问3.png

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2024-2-11 21:13:06 | 显示全部楼层
前两个 if 语句好像错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[-1]] == stack[-2]:
            stack = stack[:-2]

if len(stack): print('非法T_T')
else: print('合法^o^')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


我这个给的例子是可以过的,只是不知道up提供的例子以外是否可以过,请问为什么说if错了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,还没有学到后边的内容, 没太看懂,我再研究一下别的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

能不能表述一下前两个 if 的逻辑?
如果输入 [{}] 和 (()) 就会出错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

哦哦,原来是这样,十分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 07:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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