第23课:递归。打印了五个 None...
题目:写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>
我的尝试,出错了,打印出连续五个 None。请帮我看看,哪里错了呀?估计又是基本功问题
def get_digit(n):
list1 = []
if n > 0:
list1 = list1.append("n%10")
n = n//10
get_digit(n)
print(list1)
get_digit(12345)
列表大多数方法没有返回值,例如你代码中的 append
因为 append 函数没有返回值,则 Python 默认返回一个 None
使得你 list1 = list1.append("n%10") 相当于 list1 = None
自然导致你每次 print(list1) 打印都一定是 None
本帖最后由 Peteryo01223 于 2021-1-13 17:43 编辑
Twilight6 发表于 2021-1-13 17:33
列表大多数方法没有返回值,例如你代码中的 append
因为 append 函数没有返回值,则 Python 默认返 ...
def get_digit(n):
list1 = []
if n > 0:
list1 = list1.append("n%10")
n = n//10
get_digit(n)
print(list1)
return list1
get_digit(12345)
那么,请问,我在哪里加个return,来返回这个值好?以上修改,没成功。
难道,我只能用 insert 么?append 这么没用,设立它,不是浪费么?append 给我的印象还挺深的。 Peteryo01223 发表于 2021-1-13 17:39
那么,请问,我在哪里加个return,来返回这个值好?以上修改,没成功。
呃,刚刚没太认真看代码,你的 append 参数不能加引号,否则加入列表的都是 'n%10' 这个字符串
代码你可以这样改,用 insert 比较方便:
list1 = []
def get_digit(n):
if n > 0:
list1.insert(0,n%10)
n = n//10
get_digit(n)
get_digit(12345)
print(list1) Twilight6 发表于 2021-1-13 17:43
呃,刚刚没太认真看代码,你的 append 参数不能加引号,否则加入列表的都是 'n%10' 这个字符串
代码 ...
难道,我只能用 insert 么?append 这么没用,设立它,不是浪费么?append 给我的印象还挺深的。 Peteryo01223 发表于 2021-1-13 17:46
难道,我只能用 insert 么?append 这么没用,设立它,不是浪费么?append 给我的印象还挺深的。
可以,直接把你的“”去掉就可以
但是会造成反序 昨非 发表于 2021-1-13 17:48
可以,直接把你的“”去掉就可以
但是会造成反序
去掉“”后,将结果没变,还是5个None。奇怪。 Peteryo01223 发表于 2021-1-13 17:46
难道,我只能用 insert 么?append 这么没用,设立它,不是浪费么?append 给我的印象还挺深的。
这样即可,进入递归不改变 n 原数值:
list1 = []
def get_digit(n):
if n > 0:
get_digit(n//10)
list1.append(n%10)
get_digit(12345)
print(list1) Twilight6 发表于 2021-1-13 17:51
这样即可,进入递归不改变 n 原数值:
另外如果需要加 return 可以直接这样加:
list1 = []
def get_digit(n):
if n > 0:
get_digit(n//10)
list1.append(n%10)
return list1
print(get_digit(12345))
Peteryo01223 发表于 2021-1-13 17:50
去掉“”后,将结果没变,还是5个None。奇怪。
list1 = []#放到外面,避免每层递归时,被覆盖掉
def get_digit(n):
if n > 0:
list1.append(n%10)#append没有返回值(none),而是直接对list1进行的操作,所以不能list1=...
n = n//10
get_digit(n)
#把这个打印去掉
return list1
print(get_digit(12345))#将返回值打印
测试结果:
昨非 发表于 2021-1-13 17:55
测试结果:
牛!刚我点快了,没给你最佳,抱歉。 def get_digit(n):
list1 = []
while n:
list1 . insert(0 , n % 10)
n //= 10
return list1
print(get_digit(12345)) Peteryo01223 发表于 2021-1-13 17:57
牛!刚我点快了,没给你最佳,抱歉。
加注释费了点儿时间
不过解决就好哈{:10_297:}
(twilight老哥很强的,大概率我还是抢不过他) 昨非 发表于 2021-1-13 17:55
测试结果:
list1 = []#放到外面,避免每层递归时,被覆盖掉
def get_digit(n):
if n > 0:
list1.append(n%10)#append没有返回值(none),而是直接对list1进行的操作,所以不能list1=...
n = n//10
get_digit(n)
#把这个打印去掉
list1.sort()
return list1
print(get_digit(12345))#将返回值打印
我加了一行,list1.sort(),顺序正过来了。虽然不简洁,但是自己的思路,比看答案有趣哈。 Peteryo01223 发表于 2021-1-13 18:01
我加了一行,list1.sort(),顺序正过来了。虽然不简洁,但是自己的思路,比看答案有趣哈。
确实,自己写出来东西感觉还是很不错的
页:
[1]