丿autistic 发表于 2020-6-6 11:28:25

Python 23讲动动手1

题目:写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==>
请问 为什么我下面这个代码print结果是None?
result = []
def get_digits(n):
    if n:      
      result.insert(0, n%10)
      get_digits(n//10)
    else:
      return result
n = int(input('请输入你要转换的数:'))
answer = get_digits(n)
print(answer)

Twilight6 发表于 2020-6-6 11:30:17

因为你没有设置if 代码块里面的返回值第一次输入时候进入递归的是 if 代码块

Twilight6 发表于 2020-6-6 11:34:07

result = []
def get_digits(n):
    if n:
      result.insert(0, str(n%10))
      returnget_digits(n//10) + result
    else:
      return []
n = int(input('请输入你要转换的数:'))
answer = get_digits(n)
print(''.join(answer))

丿autistic 发表于 2020-6-6 11:36:19

Twilight6 发表于 2020-6-6 11:30
因为你没有设置if 代码块里面的返回值第一次输入时候进入递归的是 if 代码块

不好意思没太弄明白,我看答案写的if里好像也没有return值,答案如下result = []
def get_digits(n):
      if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)

Twilight6 发表于 2020-6-6 11:38:38

丿autistic 发表于 2020-6-6 11:36
不好意思没太弄明白,我看答案写的if里好像也没有return值,答案如下

他没设返回值没错,是因为你的代码打印的是函数结果而甲鱼老师的代码打印的是原本的列表

Twilight6 发表于 2020-6-6 11:41:44

丿autistic 发表于 2020-6-6 11:36
不好意思没太弄明白,我看答案写的if里好像也没有return值,答案如下

你的 print(answer) 而answer = get_digits(n) 等于 print(get_digits(n))而 函数 get_digits(n) 当 n != 0 时候没用返回值 所以就会返回None

而甲鱼老师打印的是 print(result)是原本的列表

gayandmo123 发表于 2020-6-16 21:34:33

你把print(answer)改成print(result)就行了吧
页: [1]
查看完整版本: Python 23讲动动手1