2013-11-22 112 views
1

我目前正在學習Python,並且在修改此函數時出現問題,無法正常工作。這是一個遞歸函數,可以從兩個整數中找到gcd。 data是一個具有兩個整數的元組。如何修改這個遞歸函數來處理一個參數?在遞歸函數中收集參數

def gcd(data): 
    a, b = data 
    if b == 0: return a 
    return gcd(b, a % b) 

如果我喜歡這個執行它,我得到

TypeError: checkio() takes 1 positional argument but 2 were given

如果我試圖通過定義def gcd(*data):收集論據,我得到

ValueError: need more than 1 value to unpack

這可能嗎?

回答

1

我覺得你就應該能夠把一個額外的對括號在你的論點,像這樣:

return gcd((b, a % b)) 

這將使你的兩個位置參數到作爲一個位置參數傳遞的元組。

或者,您可以放棄拆箱,只接受兩個位置參數,而不是首先放置單個元組。

2

你的函數需要一個單變量(一個元組),但你逝去的兩個變量,試試這個:

return gcd((b, a % b)) 
2

當然,你只需要保持一致。無論是定義gcd採取兩個參數:

def gcd(a, b): 

,或者當你把它包在一個元組的值:

return gcd((b, a % b)) 
1

傳遞一個字面元組作爲參數需要另一組括號做出明確規定它不是2個獨立的參數:

return gcd((b, a % b)) 

可替代地,該元組可被首先分配給一個單獨的名稱(帶或不帶括號內):

next_data = b, a % b 
return gcd(next_data) 

gcd(*data)會的工作,但你也需要改變你的初始呼叫傳遞各個參數爲好,無論是gcd(a, b)gcd(*data)的形式。