|
1鱼币
小白求问各位大神,以下是论坛里一个Python的课后作业题
写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(123) ==> [1, 2, 3,]
#1
list1=[]
def digits(n):
length = len(str(n))
if n >= 10:
a = n // 10**(length-1)#求首位数
list1.append(a)
b = n % 10**(length-1)#减去首位数,余下的数字
return digits(b)+list1
else:
list1.append(n)
return list1
digits(123)
print(list1)
#2
def digits(n):
length = len(str(n))
list1 = []
if n >= 10:
a = n // 10**(length-1)#求首位数
list1.append(a)
b = n % 10**(length-1)#减去首位数,余下的数字
return digits(b)+list1
else:
list1.append(n)
return list1
digits(123)
print(list1)
#1得到的是【1,2,3】,而#2得到的是【3,2,1】,我被搞糊涂了,第二种的运算逻辑是怎样的?为什么会倒过来?谢谢各位大神了!
本帖最后由 倒戈卸甲 于 2020-4-12 23:43 编辑
因为list1声明的位置不一样,list声明在函数外部,那么递归从外层开始,就可以依次把百位数、十位数、个位数加入列表。但如果list是递归函数的一部分,每次运行到更深一层的逻辑时都会新建列表,且把该层产生的数字放入新列表,然后才把外层列表的元素追加到新列表后面。我觉得我这个解释应该算清楚吧 
|
最佳答案
查看完整内容
因为list1声明的位置不一样,list声明在函数外部,那么递归从外层开始,就可以依次把百位数、十位数、个位数加入列表。但如果list是递归函数的一部分,每次运行到更深一层的逻辑时都会新建列表,且把该层产生的数字放入新列表,然后才把外层列表的元素追加到新列表后面。我觉得我这个解释应该算清楚吧
|