写一个函数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 03:13 编辑
错了。 因为 result 是一个全局变量,列表
小甲鱼 get_digits 函数里面 insert 修改了全局变量
所以 print 的话就获得的是修改后的全局变量 yuedong 发表于 2021-3-9 00:57
你的
等于无限次调用get_digits(54861)
不是很明白你这里说的无限次调用是什么{:10_245:}
题主这个函数压根就没有返回值的 本帖最后由 yuedong 于 2021-3-9 03:14 编辑
错了。
本帖最后由 yuedong 于 2021-3-9 03:14 编辑
。 yuedong 发表于 2021-3-9 01:02
而且结果result中的元素也是一直在循环增加的,
其实就是陷入了死循环
麻烦解释一下哪儿来的死循环
为什么我跑他的代码没有呢{:10_250:} yuedong 发表于 2021-3-9 01:01
这样你就知道原因了
这个代码你自己有跑一遍吗请问
7行符号写错了就放上来了
而且即使改正确了,也没看出来有什么不同啊,只是多打印了一行 '我执行了一次',仅此而已{:10_257:} 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) 就可以了 ....我理解有问题吧,
我认为print()里面的东西会先执行一次。。。
抱歉,我当时没有试,,我知道我错在哪里了
我把print(get_digits(54861))这一行语句看在了
def get_digits(n): 下了
当时想成了这样,所以考虑错了
result = []
def get_digits(n):
if n > 0:
result.insert(0, n%10)
get_digits(n//10)
print('我执行了一次')
print(get_digits(54861))
你看上面那位仁兄的解释就好了,抱歉 函数get_digits(n)是加工的过程,给列表添加元素的动作
result是加工后的结果,列表添加完元素后的结果
加工过程没有返回值return
所以打印函数 get_digits(n) 会显示None
打印列表result 能看到最终的结果
页:
[1]