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