在递归函数中输入数字

时间:2017-11-21 02:14:26

标签: python python-3.x

def sum_all(n):

    number = input("number pls ")
    if n > 1:
        return n + sum_all(n-1)
    elif n == 1: 
        return 1
    else:
        raise Exception("negative number")

print(sum_all(number))

我无法弄清楚如何让我接受我在python 3中输入数字

2 个答案:

答案 0 :(得分:1)

您不在方法的任何位置使用数字变量。我想你想要做的就是这样>

def sum_all(n):

    if n > 1:
        return n + sum_all(n-1)
    elif n == 1: 
        return 1
    else:
        raise Exception("negative number")

number = int(input("number pls "))

print(sum_all(number))

答案 1 :(得分:1)

目前正在发生的事情是被称为sum_all(number)的第一件事。 number中的值将作为参数sum_all传递到n。但是,number未在函数sum_all之外定义,因此代码将抛出类似于以下内容的错误:

NameError: name 'number' is not defined

现在,问题变成了你真正想做的事情?您想继续获取用户输入并将这些输入添加到一起吗?如果是这种情况,那么你不需要递归。你可以使用一个简单的循环。

如果你想获得一次输入然后获得该输入的总和,那么你需要递归。但是如果您只需要输入一次 - 那么您应该只调用一次 - 而不是每次都通过该功能。让我们通过调用sum_all(5)

来说明这一点
sum_all(5):
| sum_all(4):
| | sum_all(3):
| | | sum_all(2):
| | | | sum_all(1):
| | | | | return 1
| | | | return 2 + 1
| | | return 3 + 3
| | return 4 + 6
| return 5 + 10

这表示输入5sum_all会返回15。如果您打算这样做,那么您应该只在函数input之外获取sum_all一次,并将用户输入的值传递给sum_all