为什么我的代码在执行while循环时不起作用

时间:2020-06-14 04:35:00

标签: python for-loop while-loop

代码在下面

def stringtofind(masterstring, startchar, endchar):
    result = []
    current_pos = masterstring.find(startchar) 
    while current_pos != -1:     
        end_pos = masterstring.find(endchar)
        result.append(masterstring[current_pos:end_pos]) 
    return result
stringtofind("ABCDEABA", "C", "A")

代码无限循环且不抛出任何输出

预期为['CDEA', 'CDEABA']

是否有其他替代方法可以执行此操作,例如for i in range(len(masterstring))

3 个答案:

答案 0 :(得分:1)

current_posend_pos始终设置为相同的值,因此while条件始终为True

实际上,分配给它们的第一个值是current_pos=2end_pos=0,这导致将相同的空列表附加到result

以下是输出的日志:

current_pos=2, end_pos = 0
result=['']
current_pos=2, end_pos = 0
result=['', '']
current_pos=2, end_pos = 0
result=['', '', '']
current_pos=2, end_pos = 0
result=['', '', '', '']
current_pos=2, end_pos = 0
result=['', '', '', '', '']
...

查看值如何不变,它们将永远不会使while循环停止。此外,结果每次都附加masterstring[2:0],这是空字符串。

答案 1 :(得分:1)

在这里,您基于代码的方法:

def stringtofind(masterstring, startchar, endchar):
    result = []
    current_pos = masterstring.find(startchar) 
    for i in range(current_pos,len(masterstring)+1):
        if(masterstring[i] != endchar): return
        result.append(masterstring[current_pos:i]) 
    return result
stringtofind("ABCDEABA", "C", "A")

答案 2 :(得分:1)

在我心中一个简单的解决方案。时间复杂度O(n ^ 2)。

def stringtofind(masterstring, startchar, endchar):
    result = []
    start_ids = []
    n = len(masterstring)
    for i in range(n):
        if masterstring[i] == startchar:
            start_ids.append(i)
        if masterstring[i] == endchar:
            for j in start_ids:
                result.append(masterstring[j:i+1])
    return(result)

print(stringtofind("ABCDEABA", "C", "A"))