Johnvery 发表于 2021-2-5 15:10:34

求各位帮慢看看这个简单的问题,数字转列表!

写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>
result = []
def get_digits(n):
        if n:
                get_digits(n//10)
                result.append(n%10)


get_digits(12345)
print(result)
数字改成列表这道题我这么写的逻辑上不通啊,结果怎么对呢,麻烦各位大神帮看看!

qiuyouzhi 发表于 2021-2-5 15:17:31

?逻辑上为什么不通呢
每次把n去除一位,直到没有,然后依次添加去除的数。

昨非 发表于 2021-2-5 15:18:22

result = []
def get_digits(n):
    if n:   #参数不为0的时候判断为true(等价于:if n!=0:)
      get_digits(n//10)#地板除10,相当于去掉最后一位数(递归,直到n为0)
      result.append(n%10) #取余10,得到最后一位数,调用append加入列表
get_digits(12345)
print(result)

Twilight6 发表于 2021-2-5 15:39:27


用 get_digits(123) 举个例子,get_digits(12345) 同理,如下:

get_digits(123) --> n = 123 --> if 123: 符合条件执行 if 代码块 --> get_digits(123//10) --> get_digits(12) 进入第一次递归

        get_digits(12) --> n = 12 --> if 12: 符合条件执行 if 代码块 --> get_digits(12//10) --> get_digits(1) 进入第二次递归

                get_digits(1)--> n = 1 --> if 1: 符合条件执行 if 代码块 --> get_digits(1//10) --> get_digits(0) 进入第三次递归

                        get_digits(0)--> n = 0 --> if 0: 不符合条件执行 if 代码块 --> 开始返回 --> get_digits(1) 返回第三次递归

                get_digits(1) --> result.append(1%10) --> result = --> get_digits(12) 返回第二次递归

        get_digits(12) --> result.append(12%10) --> result = --> get_digits(123) 返回第一次递归

get_digits(123) --> result.append(123%10) --> result =

kogawananari 发表于 2021-2-5 16:48:22

你的get_digits不是纯函数 所以逻辑更难理解可以改成依靠return的函数

maotou4 发表于 2021-2-6 09:28:14

def change(n):
    for i in n:
      list1.append(i)
    return(list1)
list1=[]
num=123456
change(str(num))
print(list1)
页: [1]
查看完整版本: 求各位帮慢看看这个简单的问题,数字转列表!