鱼C论坛

 找回密码
 立即注册
查看: 762|回复: 3

[已解决]第24讲第二题

[复制链接]
发表于 2020-6-7 22:42:03 | 显示全部楼层 |阅读模式

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

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

x
各位大佬,代码如下:
def get_digits(n):
        result=[]
        if n>0:
                get_digits(n//10)                          #为什么递归时 result 没有重新被赋值成空集?!
                return result.insert(0,n%10)
        else:
                return result

print(get_digits(123456))

输出结果:
[1, 2, 3, 4, 5, 6]
最佳答案
2020-6-8 19:57:43
吃鲸不放辣 发表于 2020-6-8 19:54
大佬你再看下,这次用字符串为什么  return get_digits(n//10)+str(n%10) 时result 没有被重新被赋值为空 ...

不  他每次递归确实被重新赋值成空字符串了,只是递归返回时候用 + 号拼接上之前的结果一起返回
所以每次递归的结果都拼接上返回最后的完整字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-7 23:09:36 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-7 23:12 编辑

代码错了吧,要改成这样,而且输出结果是倒叙的列表,不是 1,2,3,4,5,6 哦

你返回的是  result.insert(0, n % 10) ,而列表的方法大部分都没有返回值,也就是只会返回一个None
result = []
def get_digits(n):

    if n > 0:
        get_digits(n // 10) 
        result.insert(0, n % 10)
        return result
    else:
        return result

print(get_digits(123456))

容器类的值只要不对容器本身进行改变,可以直接将元素加入容器内

但是注意不能对本身进行改变,如函数内对result重新赋值为一个列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-8 19:54:47 | 显示全部楼层
Twilight6 发表于 2020-6-7 23:09
代码错了吧,要改成这样,而且输出结果是倒叙的列表,不是 1,2,3,4,5,6 哦

你返回的是  result.insert(0 ...

大佬你再看下,这次用字符串为什么  return get_digits(n//10)+str(n%10) 时result 没有被重新被赋值为空字符串
>>> def get_digits(n):
        result=''
        if n>0:
               return get_digits(n//10)+str(n%10)
        else:
                return result

        
>>> get_digits(123456)
'123456'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-8 19:57:43 | 显示全部楼层    本楼为最佳答案   
吃鲸不放辣 发表于 2020-6-8 19:54
大佬你再看下,这次用字符串为什么  return get_digits(n//10)+str(n%10) 时result 没有被重新被赋值为空 ...

不  他每次递归确实被重新赋值成空字符串了,只是递归返回时候用 + 号拼接上之前的结果一起返回
所以每次递归的结果都拼接上返回最后的完整字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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