Теория
Что хранит состояние цикла
Состояние цикла — это значения, которые переживают одну итерацию и используются на следующей. Счётчик отвечает на вопрос «сколько найдено», а накопитель — «какова сумма или другой собранный результат».
Оба значения обычно создаются до цикла. Счётчик количества начинается с нуля, сумма также начинается с нуля, а произведение — с единицы.
count = 0total = 0for number in [3, -2, 5]: if number > 0: count += 1 total += numberОбновляем только при совпадении
Условие внутри цикла решает, влияет ли текущий элемент на состояние. Если элемент не подходит, счётчик и накопитель должны сохранить прежние значения.
Для трассировки удобно держать три колонки: текущий элемент, результат условия и состояние после итерации.
- Для 3 условие истинно: count становится 1, total — 3.
- Для -2 условие ложно: оба значения остаются прежними.
- Для 5 условие истинно: count становится 2, total — 8.
Состояние хранит не только сумму
Иногда после цикла нужно знать, встретился ли подходящий элемент, или сохранить лучший из просмотренных. Для первого вопроса подходит логический флаг. Для максимума безопасно взять первый элемент, если список точно не пуст, а не придумывать «очень маленькое» число.
numbers = [-4, -2, -7]found_positive = Falsebest = numbers[0] for number in numbers: if number > 0: found_positive = True if number > best: best = numberЗначение каждой переменной по-прежнему можно описать одной фразой: found_positive отвечает на вопрос, а best хранит максимум уже просмотренной части списка.
Начальное значение уже участвует
Если счётчик начать с единицы, программа как будто учтёт один элемент до начала перебора. Ошибка сохранится даже при полностью правильном условии внутри цикла.
Как проверять состояние
Сначала определите смысл каждой переменной одним предложением. Затем выберите нейтральное начальное значение и проверьте отдельно подходящий и неподходящий элементы.
- Подпишите переменные. Например: count — число найденных, total — их сумма.
- Проверьте инициализацию. До цикла результат должен соответствовать пустому набору.
- Заполните таблицу шагов. Не пропускайте итерации, где условие ложно.
- Сверьте итог со смыслом. count должен быть количеством, а total — суммой, не наоборот.
Практика
Отделите счётчик
Чётные значения — 2, 8 и 10. Счётчик увеличится три раза.
Найдите сумму подходящих значений
Подходят 3 и 4. Накопитель изменяется 0 → 3 → 7.
Проверьте границы перебора
Последовательность содержит 1, 2, 3 и 4 — всего четыре значения.
Уберите лишний подсчёт
Счётчик хранит число уже найденных элементов. До первой проверки их ноль, поэтому начальное значение — 0.
Посчитайте ненулевые цифры
Нули пропускаются, а три ненулевые цифры увеличивают счётчик. Итог — 3.
Итог
Теперь вы можете выбирать и трассировать состояние цикла, не смешивая количество найденных элементов с их суммой.
Возьмите список с положительными, отрицательными числами и нулём. Предскажите количество положительных и их сумму, затем подтвердите оба результата программой.
Прогресс
0 / 5Вы ещё не решали задания