![](/img/trans.png)
[英]Python ERROR: TypeError: … missing 1 required positional argument:
[英]TypeError in python - missing 1 required positional argument
我被困在這里。 對於n = 5
和k = 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)
您的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)
調用該函數將不起作用,因為該函數被聲明為接受2個參數: 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.