Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的TypeError-缺少1个必需的位置参数_Python - Fatal编程技术网

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

python中的TypeError-缺少1个必需的位置参数,python,Python,我被困在这里了。对于n=5和k=3,答案应该是19。如果我将k=3单独设置为局部或全局变量,并运行wabbits(5),我得到19,但在下面的函数之后运行wabbits(5,3),我得到19 TypeError: wabbits() missing 1 required positional argument: 'k' 我做错了什么 def wabbits(n, k): if n == 1: return 1 if n == 2: return

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

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)
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
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

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

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

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

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

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

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

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

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

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

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)

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

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)

缺少参数k
wabbits
函数接受两个参数。第一个是
n
,第二个是
k
。但是在代码
wabbits(n-2)
中,表示您只传递一个参数。您不能运行
wabbits(5)
,因为这会给您带来相同的错误。您缺少参数k
wabbits
函数接受两个参数。第一个是
n
,第二个是
k
。但是在代码
wabbits(n-2)
中,wabbits(n-2)意味着你只传递一个参数。你不能运行
wabbits(5)
,因为那样会给你同样的错误。你简直是天才。:)你简直是天才