2013-12-16 93 views
1

我正在嘗試編寫一個模塊,用於搜索目標字符串中的鍵字符串並輸出任何匹配的起始點。我可以編寫一個迭代模塊來實現這一點,但我試圖用遞歸來實現它(我使用的教程處理本課中的遞歸和迭代,所以我想我應該嘗試這兩種)並遇到一些麻煩。Python:slice:TypeError:無法連接'str'和'int'對象

def substringmatchrecursive(target, key): 
"""returns a tuple of the starting points of matches of the key string in the target string using a recursive function""" 
from string import find 
position = find(target, key) #position of the match 
answer=() #will be outputted 
if position == -1: 
    return 'No match' 
else: 
    while position != 1: 
     answer = answer + (position,) 
     position = substringmatchrecursive(target[position+1: ], key) 
return answer 

加載模塊,並進入

substringmatchrecursive("fjdkakfjdslkfajfksja", "a") 

應該給我一個長度爲3的元組,而不是給我一個錯誤

Traceback (most recent call last): 
..... 
position = substringmatchrecursive(target[position+1: ], key) 

TypeError: cannot concatenate 'str' and 'int' objects 

我認爲find()會輸出一個整數,所以position+1應該工作。這裏發生了什麼?

回答

3

根據以下代碼,如果substringmatchrecursive對象('No match')未找到密鑰,則返回str

if position == -1: 
    return 'No match' 

str對象被分配到position

position = substringmatchrecursive(target[position+1: ], key) 

使函數返回元組一致。 (在while循環中使用的謂詞應該相應地進行調整,或者如果要遞歸,則應該消失while ...)。

並使用不同的名稱作爲position以避免名稱衝突。

+0

感謝您的迅速回復。 爲什麼我不應該在遞歸中使用while循環? 當你談到名稱衝突時,你是什麼意思?我無法看到我已將「位置」分配給兩個不同的事物。 – user3106040

+0

@ user3106040,'position = find(target,key)'< - 'int','position = substringmatchrecursive(target [position + 1:],key)'< - 'tuple'或'string'。 – falsetru

+1

@ user3106040,您可以使用while循環。但它會涉及不必要的重複操作。 – falsetru

相關問題