全视之眼 发表于 2021-3-9 00:28:03

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

我的答案:
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
求大神解救,如能解答,必有重谢

yuedong 发表于 2021-3-9 00:57:14

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

错了。

Daniel_Zhang 发表于 2021-3-9 00:57:21

因为 result 是一个全局变量,列表

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

所以 print 的话就获得的是修改后的全局变量

Daniel_Zhang 发表于 2021-3-9 00:59:10

yuedong 发表于 2021-3-9 00:57
你的

等于无限次调用get_digits(54861)


不是很明白你这里说的无限次调用是什么{:10_245:}

题主这个函数压根就没有返回值的

yuedong 发表于 2021-3-9 01:01:15

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

错了。

yuedong 发表于 2021-3-9 01:02:32

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

Daniel_Zhang 发表于 2021-3-9 01:14:55

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

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

为什么我跑他的代码没有呢{:10_250:}

Daniel_Zhang 发表于 2021-3-9 01:18:18

yuedong 发表于 2021-3-9 01:01
这样你就知道原因了

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

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

而且即使改正确了,也没看出来有什么不同啊,只是多打印了一行 '我执行了一次',仅此而已{:10_257:}

Daniel_Zhang 发表于 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) 就可以了

yuedong 发表于 2021-3-9 02:11:57

....我理解有问题吧,
我认为print()里面的东西会先执行一次。。。

yuedong 发表于 2021-3-9 02:29:45

抱歉,我当时没有试,,我知道我错在哪里了
我把print(get_digits(54861))这一行语句看在了
def get_digits(n): 下了

yuedong 发表于 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))

yuedong 发表于 2021-3-9 02:34:20

你看上面那位仁兄的解释就好了,抱歉

逃兵 发表于 2021-3-9 09:48:21

函数get_digits(n)是加工的过程,给列表添加元素的动作

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

加工过程没有返回值return

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

打印列表result 能看到最终的结果
页: [1]
查看完整版本: 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中