← Все вопросы

Задание 12 КЕГЭ: исполнитель с заменами в строке зацикливается — как симулировать в Python?

Задан 26 месяцев назад1.3к просмотров2 ответа
6

Задание 12: исполнитель с командами заменить (v, w) и нашлось (v) работает над строкой, пока возможны замены. Надо узнать итоговую строку или её длину. Руками я путаюсь, а если писать симуляцию на питоне — она у меня иногда зацикливается навсегда. Как правильно?

2 ответа

12
✓ Принятый ответ — помог автору

Команда заменить(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, когда ни одна не сработала.

4

Защита от вечного цикла: если не уверен, что программа завершится, добавь счётчик шагов и ограничь, скажем, 100000 итерациями — если превысил, значит логика неверна (в задании она всегда конечна). И перечитай порядок: обычно "выполнять первую подходящую команду из списка, пока хоть одна применима". Это важно — не все сразу, а по приоритету сверху вниз.

Ваш ответ

Войдите, чтобы ответить на вопрос.