python中的TypeError - 缺少1个必需的位置参数

时间:2016-07-08 06:32:58

标签: python

我被困在这里。对于n = 5k = 3,答案应为19。如果我将k = 3分别设置为本地变量或全局变量并运行wabbits(5),我会得到19,但是当我在下面的函数之后运行wabbits(5, 3)时,我得到了

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

我做错了什么?

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

3 个答案:

答案 0 :(得分:4)

您的wabbits()函数需要两个参数:

def wabbits(n, k):
#           1  2

但你的代码只用一个来调用它:

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

您还需要传入k的值。您只需传入k的当前值:

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:

>>> 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 :(得分:0)

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

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

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

这是对wabbits()的两次调用,第一次有一个参数n-2,第二次只有一个参数n-1。由于必须使用两个参数调用wabbits(),因此会引发TypeError`异常。

答案 2 :(得分:0)

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

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

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)