为什么我的递归函数返回none?

qcuzuvrc  于 2021-07-14  发布在  Java
关注(0)|答案(4)|浏览(480)

我有一个函数调用它自己:

  1. def get_input():
  2. my_var = input('Enter "a" or "b": ')
  3. if my_var != "a" and my_var != "b":
  4. print('You didn\'t type "a" or "b". Try again.')
  5. get_input()
  6. else:
  7. return my_var
  8. print('got input:', get_input())

现在,如果我只输入“a”或“b”,一切正常:

  1. Type "a" or "b": a
  2. got input: a

但是,如果我键入其他内容,然后键入“a”或“b”,我会得到:

  1. Type "a" or "b": purple
  2. You didn't type "a" or "b". Try again.
  3. Type "a" or "b": a
  4. got input: None

我不知道为什么 get_input() 他回来了 None 因为它只会回来 my_var . 这是哪里 None 从何而来,如何修复我的功能?

mcvgt66p

mcvgt66p1#

它回来了 None 因为当你递归地调用它时:

  1. if my_var != "a" and my_var != "b":
  2. print('You didn\'t type "a" or "b". Try again.')
  3. get_input()

…不返回值。
因此,当递归确实发生时,返回值会被丢弃,然后从函数的末尾掉下来。落在函数末尾意味着python隐式返回 None ,就像这样:

  1. >>> def f(x):
  2. ... pass
  3. >>> print(f(20))
  4. None

所以,与其打电话 get_input() 在你的 if 声明,你需要 return 信息技术:

  1. if my_var != "a" and my_var != "b":
  2. print('You didn\'t type "a" or "b". Try again.')
  3. return get_input()
展开查看全部
v64noz0r

v64noz0r2#

要返回非none的值,需要使用return语句。
在您的例子中,if块只在执行一个分支时执行一个return。将返回移到if/else块之外,或者在两个选项中都有返回。

gjmwrych

gjmwrych3#

  1. def get_input():
  2. my_var = input('Enter "a" or "b": ')
  3. if my_var != "a" and my_var != "b":
  4. print('You didn\'t type "a" or "b". Try again.')
  5. return get_input()
  6. else:
  7. return my_var
  8. print('got input:', get_input())
vbkedwbf

vbkedwbf4#

我觉得这个代码更清楚

  1. def get_input():
  2. my_var = str(input('Enter "a" or "b": '))
  3. if my_var == "a" or my_var == "b":
  4. print('got input:', my_var)
  5. return my_var
  6. else:
  7. print('You didn\'t type "a" or "b". Try again.')
  8. return get_input()
  9. get_input()

相关问题