我是python的新手,一直致力于解决问题,尝试学习一些编程。我的问题在于该程序的第二个功能。我希望程序返回的是要查找的子字符串在input_string中的每个位置。
即。
multifind("Ni! Ni! Ni! Ni!", "Ni", 0, 20)
应该返回"0,4,8,12"
但是,当我在IDE中运行它时,程序会运行,但不会返回任何内容。我想知道是否有人可以告诉我程序中的哪个/什么导致这个? 优选地以初学者可以理解的方式。
def find(input_string, substring, start, end):
x = (len(substring))
for i in range(0, len(input_string)):
if input_string[i:(i+x)] == substring:
return i
else:
i += 1
return -1
def multi_find(input_string, substring, start, end):
loop = True
nulist = ""
r = start - 1
while loop:
r = find(input_string,substring, r + 1, end)
if r != -1:
if nulist == "":
nulist += str(r)
else:
nulist += "," + str(r)
else:
loop = False
return nulist
答案 0 :(得分:0)
您没有在find中使用start,请尝试:
def find(input_string, substring, start):
x = (len(substring))
for i in range(start, len(input_string)):
if input_string[i:(i+x)] == substring:
return i
else:
i += 1
return -1
def multi_find(input_string, substring, start):
loop = True
nulist = ""
r = start - 1
while loop:
r = find(input_string,substring, r + 1)
if r != -1:
if nulist == "":
nulist += str(r)
else:
nulist += "," + str(r)
else:
loop = False
return nulist
print multi_find("Ni! Ni! Ni! Ni!", "Ni", 0)
答案 1 :(得分:0)
我知道这不是你想要的,但我会使用常规表达式为此发布一个班轮函数
def multifind(input_string, substring):
return [m.start() for m in re.finditer(input_string, substring)]
这会在 substring 中找到所有 input_string 的第一个索引匹配项并将其作为列表返回。