关于python中的TypeError:python中的TypeError – 缺少1个必需的位置参数

TypeError in python - missing 1 required positional argument

我被困在这里。对于n = 5k = 3来说,答案应该是19。如果我将k = 3单独设置为局部或全局变量,运行wabbits(5),我得到19,但是当我在下面的函数之后运行wabbits(5, 3)时,我得到

1
TypeError: wabbits() missing 1 required positional argument: 'k'

我做错什么了?

1
2
3
4
5
6
def wabbits(n, k):
    if n == 1:
        return 1
    if n == 2:
        return 1
    return wabbits(n-2)*k + wabbits(n-1)


您的wabbits()函数接受两个参数:

1
2
def wabbits(n, k):
#           1  2

但是您的代码只调用一个:

1
2
return wabbits(n-2)*k + wabbits(n-1)
#              ^^^              ^^^^

您还需要为k传递一个值。您只需输入k的当前值:

1
2
3
4
5
6
7
def wabbits(n, k):
    if n == 1:
        return 1
    if n == 2:
        return 1
    return wabbits(n-2, k)*k + wabbits(n-1, k)
    #              1    2              1    2

事实上,这产生了19个:

1
2
3
4
5
6
7
8
9
>>> def wabbits(n, k):
...     if n == 1:
...         return 1
...     if n == 2:
...         return 1
...     return wabbits(n-2, k)*k + wabbits(n-1, k)
...
>>> wabbits(5, 3)
19


几种解决方案,最简单的是:

1
2
3
4
5
6
7
8
def wabbits(n, k):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    return wabbits(n-2, k)*k + wabbits(n-1, k)

r = wabbits(5, 3)

但是,可以使用内部函数封装k

1
2
3
4
5
6
7
8
9
10
11
12
def wabbits(n, k):

    def bunnies(rn):
        if rn == 1:
            return 1
        elif rn == 2:
            return 1
        return bunnies(rn-2)*k + bunnies(rn-1)

    return bunnies(n)

r = wabbits(5, 3)


使用wabbits(5)调用函数将不起作用,因为该函数声明接受两个参数:nk。两者都必须提供。

您可以用两个参数调用函数,但问题是对wabbits()的递归调用只传递一个参数:

1
wabbits(n-2) * k + wabbits(n-1)

这是对wabbits()的两个调用,第一个调用有一个参数n-2,第二个调用也只有一个参数n-1。由于必须用两个参数调用wabbits(),因此正如您观察到的那样,会引发typeerror'异常。