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

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

我有一个叫做自己的函数:

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_varprint('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我是从哪里来的,我该如何修复我的功能?


呼如林
浏览 950回答 4
4回答

蝴蝶不菲

它又回来了None因为当您递归地调用它时:if my_var != "a" and my_var != "b":     print('You didn\'t type "a" or "b". Try again.')     get_input().你不归还价值因此,当递归确实发生时,返回值就会被丢弃,然后从函数的末尾掉下来。从函数末尾掉下来意味着python隐式返回。None就像这样:>>> def f(x):...     pass>>> print(f(20))None所以,而不是仅仅呼叫 get_input()在你的if声明,您需要return它:if my_var != "a" and my_var != "b":     print('You didn\'t type "a" or "b". Try again.')     return get_input()

汪汪一只猫

若要返回除None以外的值,需要使用RETURE语句。在您的示例中,if块只在执行一个分支时执行返回。要么将返回移到if/etc块之外,要么在这两个选项中都有返回。

慕丝7291255

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.')         return get_input()     else:         return my_varprint('got input:', get_input())

波斯汪

我觉得你应该用同时循环.if my_var != "a" and my_var != "b":     print('You didn\'t type "a" or "b". Try again.')     get_input()考虑到您键入的内容与“a”和“b”不同,当然,它会调用get_input但是它跳过了下一部分。即:else:     return my_var将直接进入:print('got input:', get_input())因此,如果您将while循环用作:while my_var!="a" and my_var!="b":     print('You didn\'t type "a" or "b". Try again.')     return get_input()这样我觉得你能处理好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python