吃鲸不放辣 发表于 2020-6-4 18:13:45

第23讲第二题关于列表值返回的问题

写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>
各位大佬,代码如下,感谢各位大佬解答!

list1=[]

def get_digits(n):
    if n<0:
            print("请重新输入大于等零的整数!")
    elif n<10:
            list1.append(n)
            return n
    else:
            list1.append(n%10)
            return get_digits(n//10)
    list1.reverse()                                                #第一个问题:为什么list1中元素没有翻转   
                                                                     #第二个问题:如果加上 return list1
while 1:                                                                               while 1:
    number=int(input('输入数值:'))                                       number=int(input('输入数值:'))                                       
    result=get_digits(number)                                                result=get_digits(number)
    print(list1)                           
    list1.clear()                                                                        为何返回值是1

输出结果:
输入数值:123456

Twilight6 发表于 2020-6-4 18:23:46

#第一个问题:为什么list1中元素没有翻转   
因为执行不到list1.reverse()    你前面的条件语句都有设置 return ,当代码运行到return 后就不在执行 该函数的代码了
#第二个问题:如果加上 return list1 为什么返回值是 1
因为你没有递归 只加入了第一次 list1.append(n%10) 的值进入列表 导致你只返回一个值

吃鲸不放辣 发表于 2020-6-4 18:28:44

Twilight6 发表于 2020-6-4 18:23
因为执行不到list1.reverse()    你前面的条件语句都有设置 return ,当代码运行到return 后就不在执行 ...

感谢大佬!

Twilight6 发表于 2020-6-4 18:29:18

吃鲸不放辣 发表于 2020-6-4 18:28
感谢大佬!

客气了~

吃鲸不放辣 发表于 2020-6-4 18:48:49

Twilight6 发表于 2020-6-4 18:29
客气了~

list1=[]

def get_digits(n):
    if n<0:
            print("请重新输入大于等零的整数!")
    elif n<10:
            list1.append(n)
            return n
    else:
            list1.append(n%10)
            return get_digits(n//10)
    return list1      #大佬,还是没搞懂。应该是返回最后一个 return get_digits(n//10)才执行return list1啊

while 1:
    number=int(input('输入数值:'))
    result=get_digits(number)
    print(result)
    list1.clear()

Twilight6 发表于 2020-6-4 18:53:25

吃鲸不放辣 发表于 2020-6-4 18:48
list1=[]

def get_digits(n):


函数 只要遇到 return 就不会继续执行下面的代码 ,不可能执行了return get_digits(n//10) 又执行了return list1
页: [1]
查看完整版本: 第23讲第二题关于列表值返回的问题