Why does my recursive function return None?

function, python, recursion, return

Solution

It is returning `None` because when you recursively call it:

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

..you don't return the value.

So while the recursion does happen, the return value gets discarded, and then you fall off the end of the function. Falling off the end of the function means that python implicitly returns `None`, just like this:

>>> def f(x):
...     pass
>>> print(f(20))
None

So, instead of just calling `get_input()` in your `if` statement, you need to `return` what the recursive call returns:

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

Problem

I have this function that calls itself: ``` 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()) ``` Now, if I input just "a" or "b", everything works fine: ``` Type "a" or "b": a got input: a ``` But, if I type something else and then "a" or "b", I get this: ``` Type "a" or "b": purple You didn't type "a" or "b". Try again. Type "a" or "b": a got input: None ``` I don't know why `get_input()` is returning `None` since it should only return `my_var`. Where is this `None` coming from and how do I fix my function?

Original source

Related problems