簡體   English   中英

Python中的TypeError-缺少1個必需的位置參數

[英]TypeError in python - missing 1 required positional argument

我被困在這里。 對於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)

您的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個參數: nk 兩者都必須提供。

您可以使用兩個參數來調用該函數,但麻煩的是對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM