鱼C论坛

 找回密码
 立即注册
查看: 2405|回复: 13

写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中

[复制链接]
发表于 2021-3-9 00:28:03 | 显示全部楼层 |阅读模式

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

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

x
我的答案:
result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

print(get_digits(54861))

输出结果为none,说明函数没有返回值


小甲鱼答案:

result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)

就能输出正确答案,可他的函数也没有返回值啊o(╥﹏╥)o
求大神解救,如能解答,必有重谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-9 00:57:14 | 显示全部楼层

回帖奖励 +1 鱼币

本帖最后由 yuedong 于 2021-3-9 03:13 编辑

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

使用道具 举报

发表于 2021-3-9 00:57:21 | 显示全部楼层
因为 result 是一个全局变量,列表

小甲鱼 get_digits 函数里面 insert 修改了全局变量

所以 print 的话就获得的是修改后的全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 00:59:10 | 显示全部楼层
yuedong 发表于 2021-3-9 00:57
你的

等于无限次调用get_digits(54861)

不是很明白你这里说的无限次调用是什么

题主这个函数压根就没有返回值的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 01:01:15 | 显示全部楼层
本帖最后由 yuedong 于 2021-3-9 03:14 编辑

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

使用道具 举报

发表于 2021-3-9 01:02:32 | 显示全部楼层
本帖最后由 yuedong 于 2021-3-9 03:14 编辑

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

使用道具 举报

发表于 2021-3-9 01:14:55 | 显示全部楼层
yuedong 发表于 2021-3-9 01:02
而且结果result中的元素也是一直在循环增加的,
其实就是陷入了死循环

麻烦解释一下哪儿来的死循环

为什么我跑他的代码没有呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 01:18:18 | 显示全部楼层
yuedong 发表于 2021-3-9 01:01
这样你就知道原因了

这个代码你自己有跑一遍吗请问

7行符号写错了就放上来了

而且即使改正确了,也没看出来有什么不同啊,只是多打印了一行 '我执行了一次',仅此而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 01:23:38 | 显示全部楼层
print(get_digits(54861))

里面执行了 get_digits(54861) 之后,尝试打印,但是 get_digits(54861) 实际上并没有返回值

强行打印返回值只会是 None

但是实际上 get_digits(54861) 是已经被执行了

你在最后一行加上一个 print(result) 就可以发现

并没有什么玄乎的,又是死循环又是无限次调用的

小甲鱼无非就是在 函数里直接修改了全局变量 result

get_digits(54861) 就相当于调用 get_digits(num) 函数对 result 进行修改

全局变量在这个问题里并不需要考虑作用域的问题,所以在函数的调用之后直接 print(result) 就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 02:11:57 From FishC Mobile | 显示全部楼层
....我理解有问题吧,
我认为print()里面的东西会先执行一次。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 02:29:45 | 显示全部楼层
抱歉,我当时没有试,,我知道我错在哪里了
我把print(get_digits(54861))这一行语句看在了
def get_digits(n): 下了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 02:32:57 | 显示全部楼层
当时想成了这样,所以考虑错了
result = []
def get_digits(n):
    if n > 0:
        result.insert(0, n%10)
        get_digits(n//10)
       
    print('我执行了一次')
    print(get_digits(54861))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 02:34:20 | 显示全部楼层
你看上面那位仁兄的解释就好了,抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 09:48:21 | 显示全部楼层
函数get_digits(n)是加工的过程,给列表添加元素的动作

result是加工后的结果,列表添加完元素后的结果

加工过程没有返回值return

所以打印函数 get_digits(n) 会显示None

打印列表result 能看到最终的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 09:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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