自制查找函数运行但没有返回任何内容

时间:2015-11-04 20:45:23

标签: python find

我是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

2 个答案:

答案 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 的第一个索引匹配项并将其作为列表返回。