我正在尝试编写一个模块,用于搜索目标字符串中的键字符串并输出任何匹配项的起始点。我可以写一个实现这个的迭代模块,但是我试图用递归来做(我在本课中使用的教程处理递归和迭代,所以我想我应该尝试两者)并遇到麻烦。
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
应该有效。这是怎么回事?
答案 0 :(得分:3)
根据以下代码,如果找不到密钥,则substringmatchrecursive
会返回str
个对象('No match'
)。
if position == -1:
return 'No match'
并且str
对象已分配给position
:
position = substringmatchrecursive(target[position+1: ], key)
使函数一致地返回一个元组。 (应该相应地调整while
循环中使用的谓词,或者如果你想要递归,则while
应该消失,...)。
为position
使用不同的名称以避免名称冲突。