为什么这个代码会变成一个无限循环?

2024-06-10 12:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个代码,找到子字符串的位置,给定一个字符串。我相信在循环中有一些问题,它是一个无限循环

string="ABCDCDC"
sub_str="CDC"
i=0
while i<len(string):
    if sub_str in string:
        i=string.find(sub_str,i)
        print("Position is {}".format(i))
    else:
        break
    i+=1

我得到的实际输出:

Position is 2
Position is 4
Position is -1
Position is 2
Position is 4
Position is -1
Position is 2
Position is 4
Position is -1

预期产量:

Position is 2
Position is 4

Tags: 字符串代码informatstringlenifis
1条回答
网友
1楼 · 发布于 2024-06-10 12:25:47

你正在覆盖“i”,因此它就变成了一个无限循环。其次,您可以使用一个列表来保存索引的引用(满足您的成功标准),以避免重新打印索引以及-1

string = "ABCDCDC"
sub_str = "CDC"
i = 0
list = []
size = len(string)
while i < size:
    if sub_str in string:
        pos = string.find(sub_str, i, size)
        if pos != -1 and pos not in list:
            print("Position is {}".format(pos))
            list.append(pos)
    else:
        break
    i += 1

相关问题 更多 >