我有一个函数调用它自己:
def get_input():
my_var = input('Enter "a" or "b": ')
if my_var != "a" and my_var != "b":
print('You didn\'t type "a" or "b". Try again.')
get_input()
else:
return my_var
print('got input:', get_input())
现在,如果我只输入“a”或“b”,一切正常:
Type "a" or "b": a
got input: a
但是,如果我键入其他内容,然后键入“a”或“b”,我会得到:
Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None
我不知道为什么 get_input()
他回来了 None
因为它只会回来 my_var
. 这是哪里 None
从何而来,如何修复我的功能?
4条答案
按热度按时间mcvgt66p1#
它回来了
None
因为当你递归地调用它时:…不返回值。
因此,当递归确实发生时,返回值会被丢弃,然后从函数的末尾掉下来。落在函数末尾意味着python隐式返回
None
,就像这样:所以,与其打电话
get_input()
在你的if
声明,你需要return
信息技术:v64noz0r2#
要返回非none的值,需要使用return语句。
在您的例子中,if块只在执行一个分支时执行一个return。将返回移到if/else块之外,或者在两个选项中都有返回。
gjmwrych3#
vbkedwbf4#
我觉得这个代码更清楚