Почему этот код оказывается бесконечным циклом? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь написать код, который находит позицию подстроки по заданной строке. Я полагаю, что есть какая-то проблема в цикле, это оказывается бесконечный цикл.

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

1 Ответ

0 голосов
/ 03 октября 2019

Вы перезаписываете «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
...