Python 为什么我的代码在执行while循环时不工作
代码如下Python 为什么我的代码在执行while循环时不工作,python,for-loop,while-loop,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
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']
是否有任何替代方法来执行此操作,如对范围内的i执行
(len(masterstring))
当前位置
和结束位置
始终设置为相同的值,因此while条件始终为真
实际上,分配给它们的第一个值是current_pos=2
和end_pos=0
,这将导致在结果中附加相同的空列表
以下是输出日志:
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循环停止。此外,每次结果都会追加主字符串[2:0]
,即空字符串 这里,您基于代码的方法:
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")
在我看来,这是一个简单的解决办法。时间复杂度O(n^2)
您从不修改当前位置,因此循环将永远不会结束。首先,此逻辑似乎存在一些问题,在第三行中您找到了位置的位置,然后在第五行中找到了endchar的位置,但实际上您没有检查end\u pos是否大于当前位置,您需要确保end_pos始终大于current_pos,否则第6行上指示的字符串将不会返回itI的子字符串。如果您希望一步一步地了解代码在做什么(或学习调试器!),则建议您使用regex轻松解决此问题,而且效率更高!!
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"))