Задание 12 КЕГЭ: исполнитель с заменами в строке зацикливается — как симулировать в Python?
Задание 12: исполнитель с командами заменить (v, w) и нашлось (v) работает над строкой, пока возможны замены. Надо узнать итоговую строку или её длину. Руками я путаюсь, а если писать симуляцию на питоне — она у меня иногда зацикливается навсегда. Как правильно?
2 ответа
Команда заменить(v, w) меняет ПЕРВОЕ вхождение v на w (не все сразу!). В Python это s.replace(v, w, 1) — третий аргумент 1 критичен.
Типовой шаблон цикла "ПОКА нашлось(v)":
s = '...'
while '11' in s: # нашлось('11')
s = s.replace('11', '2', 1) # заменить первое '11' на '2'
print(len(s))
Почему у тебя зацикливается: либо ты используешь replace без , 1 и логика расходится с заданием, либо замена не уменьшает строку и условие while никогда не становится ложным. Проверь, что после каждой замены строка реально меняется так, что рано или поздно v исчезнет.
Если по условию команд несколько и они выполняются по порядку (первая применимая) — оберни их в проверки по очереди внутри while True с break, когда ни одна не сработала.
Защита от вечного цикла: если не уверен, что программа завершится, добавь счётчик шагов и ограничь, скажем, 100000 итерациями — если превысил, значит логика неверна (в задании она всегда конечна). И перечитай порядок: обычно "выполнять первую подходящую команду из списка, пока хоть одна применима". Это важно — не все сразу, а по приоритету сверху вниз.