Python: Почему переменная обрабатывается как NoneType, несмотря на то, что она определена как целое число? - PullRequest
1 голос
/ 20 марта 2020

Я делаю простой скрипт в Python как упражнение, которое оценивает функцию Аккермана . Сначала скрипт запрашивает ввод у пользователя, а затем пытается вычислить остальное. Вот код:

m = int(input('Please input m.\n'))
n = int(input('Please input n.\n'))


def compute(m, n):
    if m == 0:
        print(n + 1)
    elif m > 0 and n == 0:
        compute(m - 1, 1)
    else:
        compute(m - 1, compute(m, n - 1))


compute(m, n)

Часть, которая запутала меня, это когда он возвращает TypeError , особенно для строк в вычислениях (m, n), где я пытаюсь добавьте или вычтите 1 из n и m.

print(n + 1)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

Я понимаю, что Python принимает все входные данные в виде строки, поэтому я специально преобразовал входные данные с использованием int () в самом начале сценарий. И все же, TypeError, кажется, подразумевает, что в compute (m, n) m и n не являются int, а скорее NoneType, поэтому они не могут быть добавлены или вычтены. Почему это так и как я могу это исправить?

1 Ответ

6 голосов
/ 20 марта 2020

Рекурсивная функция должна иметь один или несколько операторов возврата. См. это .

m = int(input('Please input m.\n'))
n = int(input('Please input n.\n'))

def compute(m, n):
    if m == 0:
        return n + 1
    elif m > 0 and n == 0:
        return compute(m - 1, 1)
    else:
        return compute(m - 1, compute(m, n - 1))


print(compute(m, n))

должно работать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...