v1.0.0

Python с нуля для ЕГЭ · Счётчики, накопители и границы цикла

Урок курсаPython 35 задачБесплатно

Счётчики, накопители и границы цикла

Разделим счётчик и накопитель, проследим их изменения и избежим лишней итерации.

Теория

Что хранит состояние цикла

Состояние цикла — это значения, которые переживают одну итерацию и используются на следующей. Счётчик отвечает на вопрос «сколько найдено», а накопитель — «какова сумма или другой собранный результат».

Оба значения обычно создаются до цикла. Счётчик количества начинается с нуля, сумма также начинается с нуля, а произведение — с единицы.

count = 0total = 0for number in [3, -2, 5]:    if number > 0:        count += 1        total += number

Обновляем только при совпадении

Условие внутри цикла решает, влияет ли текущий элемент на состояние. Если элемент не подходит, счётчик и накопитель должны сохранить прежние значения.

Для трассировки удобно держать три колонки: текущий элемент, результат условия и состояние после итерации.

Разберём на примере
Разберём три элемента
Цикл обрабатывает 3, -2 и 5, учитывая только положительные.
  1. Для 3 условие истинно: count становится 1, total — 3.
  2. Для -2 условие ложно: оба значения остаются прежними.
  3. Для 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 хранит максимум уже просмотренной части списка.

Начальное значение уже участвует

Если счётчик начать с единицы, программа как будто учтёт один элемент до начала перебора. Ошибка сохранится даже при полностью правильном условии внутри цикла.

Как проверять состояние

Сначала определите смысл каждой переменной одним предложением. Затем выберите нейтральное начальное значение и проверьте отдельно подходящий и неподходящий элементы.

Как действовать
Трассировка без путаницы
  1. Подпишите переменные. Например: count — число найденных, total — их сумма.
  2. Проверьте инициализацию. До цикла результат должен соответствовать пустому набору.
  3. Заполните таблицу шагов. Не пропускайте итерации, где условие ложно.
  4. Сверьте итог со смыслом. count должен быть количеством, а total — суммой, не наоборот.

Практика

Сколько чётных чисел в списке [2, 5, 8, 10]?

Подсказка
Счётчик увеличивается один раз для каждого числа, делящегося на 2.
Решение

Чётные значения — 2, 8 и 10. Счётчик увеличится три раза.

Найдите сумму подходящих значений

Цикл складывает только положительные числа из [3, -1, 4]. Какое значение получит накопитель?

Подсказка
Отрицательное число не добавляется.
Решение

Подходят 3 и 4. Накопитель изменяется 0 → 3 → 7.

Проверьте границы перебора

Сколько значений содержит range(1, 5)?

Подсказка
Правая граница не включается.
Решение

Последовательность содержит 1, 2, 3 и 4 — всего четыре значения.

Уберите лишний подсчёт

Счётчик количества подходящих элементов ошибочно начинается с count = 1. С какого значения он должен начинаться?

Подсказка
До просмотра элементов ещё ничего не найдено.
Решение

Счётчик хранит число уже найденных элементов. До первой проверки их ноль, поэтому начальное значение — 0.

Посчитайте ненулевые цифры

Программа перебирает строку "20305" и увеличивает count, если символ не равен "0". Каков итог?

Подсказка
Подходят символы 2, 3 и 5.
Решение

Нули пропускаются, а три ненулевые цифры увеличивают счётчик. Итог — 3.

Итог

Теперь вы можете выбирать и трассировать состояние цикла, не смешивая количество найденных элементов с их суммой.

Возьмите список с положительными, отрицательными числами и нулём. Предскажите количество положительных и их сумму, затем подтвердите оба результата программой.

Прогресс

0 / 5
x

Вы ещё не решали задания