Теория
Условие проверяется до шага
Цикл while подходит, когда число повторений заранее неизвестно, но известно условие продолжения. Перед каждой итерацией Python вычисляет условие. Если оно ложно уже в начале, тело не выполнится ни разу.
Внутри тела должно меняться значение, от которого зависит условие. Это изменение постепенно приближает программу к состоянию остановки.
number = 1while number < 20: number *= 2print(number)Как найти момент остановки
Трассировка while чередует две операции: проверку условия и выполнение тела. Итоговым может стать значение, которое уже вышло за границу, потому что изменение произошло внутри последней выполненной итерации.
Важно не выполнять тело после первой ложной проверки. Именно в этот момент цикл завершён.
- Проверки для 1, 2, 4, 8 и 16 истинны, после них выполняется удвоение.
- После шага с 16 переменная становится равной 32.
- Проверка 32 < 20 ложна, тело больше не выполняется, итог равен 32.
Откуда берётся бесконечный цикл
Если условие зависит от счётчика, но счётчик не меняется, результат проверки остаётся прежним. Программа продолжает повторять одно и то же действие и самостоятельно к остановке не приближается.
Как доказать остановку
Перед запуском сформулируйте меру прогресса: число уменьшается, счётчик растёт, строка становится короче или ввод меняется. Затем проверьте, что каждый проход действительно изменяет эту меру в нужную сторону.
- Назовите условие продолжения. Сформулируйте его обычными словами.
- Найдите изменяемое состояние. Укажите строку тела, которая влияет на следующую проверку.
- Проследите несколько шагов. Запишите состояние перед проверкой и после тела.
- Проверьте крайние случаи. Рассмотрите ноль итераций и последнюю истинную проверку.
Практика
Проследите изменение состояния
x принимает 3, затем 5, затем 7. После этого условие 7 <= 5 ложно, и цикл останавливается.
Найдите значение после цикла
После трёх итераций x становится 1. Проверка 1 > 3 ложна, поэтому это итоговое значение.
Выберите условие продолжения
Оператор `!=` даёт True, пока строки различаются. Когда введено `python`, условие становится ложным.
Остановите бесконечный цикл
Команда `i += 1` увеличивает i. Тогда цикл печатает 0, 1, 2 и останавливается.
Проверьте накопление в while
Накопитель получает 1, затем 3, 6 и 10. После увеличения n до 5 условие становится ложным.
Итог
Теперь вы можете связать условие while с изменением состояния и обосновать, почему цикл остановится.
Напишите цикл, который уменьшает число на 3 до тех пор, пока оно положительно. Проследите вручную два начальных значения, включая число, не кратное трём.
Прогресс
0 / 5Вы ещё не решали задания