cch35 发表于 2020-6-2 18:44:25

第023、024讲:递归中的课后测试题求助

求助
第023、024讲:递归中的课后测试题如下,我编写的程序中有一点问题,希望大神能帮忙看一下,问题到底出在哪里了,谢谢

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

我的代码:

def get_digits(x):
    empty =[]
    if x // 10 < 1:
      empty.append(x)
    else:
      empty.insert(0,x % 10)
      empty.insert(0,get_digits(int(x / 10)))
    return empty
x = int(input('请输入数x:'))
result = get_digits(x)
print(result)

运行得到的结果如图所示,每次向空列表中插入的应该是元素,但是我得到的结果是插入了一个个列表,我不太知道问题出在哪里了

Stubborn 发表于 2020-6-2 19:02:18

每次递归过程中,会生成一个新的列表。

def get_digits(x, empty=None):
    if empty is None: empty = list()

Twilight6 发表于 2020-6-2 19:16:20

因为递归 get_digits(int(x / 10)) 时候是返回的一个列表 而不是元素

sunrise085 发表于 2020-6-2 19:20:03

else 中的第二句,insert插入的是get_digits的返回值,而函数的返回值就是列表,所以就出问题了。
应该用extend,将一个列表的所有元素追加到列表后面
手机编辑,代码可能会有缩进问题。
def get_digits(x):
    empty =[]
    if x // 10 < 1:
      empty.append(x)
    else:
      empty.extend(get_digits(int(x / 10)))
      empty.append(x % 10)
    return empty

初小白 发表于 2020-6-2 19:25:40

因为你每次递归的时候,都会重新创建一个empty空列表

cch35 发表于 2020-6-2 20:15:59

非常感谢的大家的解答, 已经明白了

cch35 发表于 2020-6-2 20:16:52

sunrise085 发表于 2020-6-2 19:20
else 中的第二句,insert插入的是get_digits的返回值,而函数的返回值就是列表,所以就出问题了。
应该用e ...

非常感谢大神,已经搞明白了
页: [1]
查看完整版本: 第023、024讲:递归中的课后测试题求助