|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
023024课后习题 第二题
写一个函数 将参数n 分解出每个位的数字并按顺序存放在列表中,如 f(1234) = [1,2,3,4,5]
答案给的参考代码是
result = []
def get_digits(n):
if n > 0:
result.insert(0, n%10)
get_digits(n//10)
get_digits(12345)
print(result)
我写的是
def fun(x):
result = []
if x:
result = result.insert(0,x%10)
return fun(x//10)
else:
return result
print(fun(12345))
为什么我的代码运行后显示结果是一个空的列表 []
请问问题出在了哪里?应该怎么改?
不知道楼主注意到没,你的代码中是result = []放在函数中,这样在递归中,每次调用函数都会造成result变量的赋空值,所以在最后会造成得到空列表.将result = []放在函数体外面则得到正确答案.
验证如下,在你的原始代码里添加几行打印代码印证:
>>> def fun(x):
result = [] //每次调用都会重新赋予空值
print(result) //打印每次调用下的result初始值
if x:
result.insert(0,x%10)
print(result) //打印在本次调用中result的值
return fun(x//10)
else:
return result
>>> fun(12345)
[] //第一次为空
[5] //第一次if后result = [5]
[] //第二次又重新把result变为空
[4] //第二次if后result = [4]
[]
[3]
[]
[2]
[]
[1] //第五次得到result = [1]
[] //第六次result重新赋值为空
[] //第六次判断if为false,触发else,return result所以为空
放于外面后验证如下
>>> result = []
>>> def fun(x):
if x:
result.insert(0,x%10)
return fun(x//10)
else:
return result
>>> fun(12345)
[1, 2, 3, 4, 5]
>>> def fun(x):
print(result)
if x:
result.insert(0,x%10)
print(result)
return fun(x//10)
else:
return result
>>> result = []
>>> fun(12345)
[]
[5]
[5]
[4, 5]
[4, 5]
[3, 4, 5]
[3, 4, 5]
[2, 3, 4, 5]
[2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
>>>
|
-
|