wzk_python 发表于 2020-5-19 15:07:26

举例:get_digits(12345) ==> [1, 2, 3, 4, 5]

#1、 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。
#举例:get_digits(12345) ==>
result = []

def get_digits(num):
   

    if num:
      result.insert(0, num%10)
      return get_digits(num//10)
    else:
      return result
            
print(get_digits(12345))



#2、 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。
#举例:get_digits(12345) ==>
def get_digits(num):

    result = []

    if num:
      result.insert(0, num%10)
      return get_digits(num//10)
    else:
      return result
            
print(get_digits(12345))


这两组代码有什么不同,为什么结果不一样

Twilight6 发表于 2020-5-19 15:08:53

本帖最后由 Twilight6 于 2020-5-19 15:12 编辑


第一个result 是全局变量第二个 result 是局部变量

第二个每次递归都会重新被赋值 result = [] 导致你直接返回result 为空

递归那每次记得加上每次递归的result即可

Twilight6 发表于 2020-5-19 15:11:10

def get_digits(num):

    result = []

    if num:
      result.insert(0, num%10)
      return get_digits(num//10)+result# 这里要加回result因为每次递归 result 都会 =[] 所以导致你这种方法返回的是 []
    else:
      return result

print(get_digits(12345))

wp231957 发表于 2020-5-19 15:14:42

>>> s
123456
>>> t=list(str(s))
>>> t
['1', '2', '3', '4', '5', '6']

永恒的蓝色梦想 发表于 2020-5-19 15:17:54

wp231957 发表于 2020-5-19 15:14
>>> s
123456
>>> t=list(str(s))


t=

wp231957 发表于 2020-5-19 15:18:35

Twilight6 发表于 2020-5-19 15:08
第一个result 是全局变量第二个 result 是局部变量

第二个每次递归都会重新被赋值 result = [] 导 ...

还真是4000   谢谢了

Twilight6 发表于 2020-5-19 15:18:54

wp231957 发表于 2020-5-19 15:18
还真是4000   谢谢了

啊啊啊 4001了 不行

wp231957 发表于 2020-5-19 15:20:06

永恒的蓝色梦想 发表于 2020-5-19 15:17
t=

应该是一样的东东吧,list()内部机制 估计也和这个差不多

永恒的蓝色梦想 发表于 2020-5-19 15:24:52

wp231957 发表于 2020-5-19 15:20
应该是一样的东东吧,list()内部机制 估计也和这个差不多

哈,确实是差不多

_2_ 发表于 2020-5-19 18:00:36

永恒的蓝色梦想 发表于 2020-5-19 15:17
t=

初级列表推导式……
页: [1]
查看完整版本: 举例:get_digits(12345) ==> [1, 2, 3, 4, 5]