Накопитель суммы в Python: как складывать много чисел
Автор: Казачкин Даниил Михайлович · Обновлено
Накопитель — переменная, которая хранит результат уже обработанной части последовательности. Для суммы нейтральное начальное значение равно нулю. На каждой итерации новое число прибавляется к прежнему total, и инвариант остаётся понятным: total равен сумме просмотренных элементов.
Сумма квадратов
limit = 4
total = 0
for number in range(1, limit + 1):
total += number ** 2
print(number, total)
print('Ответ:', total)Вывод трассировки:
1 1
2 5
3 14
4 30
Ответ: 30Строка total += value является сокращением total = total + value. Печать внутри цикла показывает промежуточное состояние; в готовом решении её можно убрать.
Где должен находиться ноль
Если присваивать total = 0 внутри цикла, предыдущая сумма будет стираться на каждой итерации и в конце останется только последний вклад. Если переменную вообще не создать до первого +=, возникнет NameError. Инициализация должна выполняться ровно один раз перед циклом.
Начальное значение зависит от операции: для произведения это 1, для сборки строки — пустая строка, для списка — пустой список. Механическое использование нуля иногда создаёт неверный результат.
Контроль ручным расчётом
Прочитайте n и найдите сумму всех чисел от 1 до n, которые делятся на 3. Для n = 10 ответ равен 18, потому что подходят 3, 6 и 9. Проверьте n = 2 и n = 3. Добавьте временный print после прибавления и сравните трассировку с ручной таблицей «число — текущая сумма». Затем уберите диагностическую печать, оставив только итог.
Нейтральный элемент операции
Сравните три накопителя: сумму с нулём, произведение с единицей и сборку слов в пустой список. Для одного набора чисел проведите параллельную трассировку всех переменных. Затем намеренно начните произведение с нуля и объясните, почему дальнейшие данные уже не влияют на результат. Проверьте пустой список: сумма равна нулю, произведение по выбранному контракту может быть единицей, а среднее не определено. Начальное значение — часть математического смысла, поэтому его следует выбирать до цикла и подтверждать отдельным тестом без элементов.
Практикум: сумма и среднее с пустым набором
Прочитайте n чисел, накопите сумму и вычислите среднее. Проверьте n = 1, смешанные знаки и n = 0. Для нуля заранее выберите контракт: сообщить, что среднего нет, или отклонить ввод; деление выполнять нельзя. Сверяйте после каждого шага, что сумма равна сумме уже прочитанных значений. Затем расширьте программу подсчётом положительных чисел, не меняя знаменатель среднего случайно. Имена total_count и positive_count должны различать эти величины.
Контрольная точка
Каким значением инициализируется сумма и почему? Сравните нейтральный элемент сложения с попыткой начать максимум с нуля — у этих шаблонов разные требования.
Частые вопросы
Можно ли использовать встроенную sum?
Да, если данные уже находятся в коллекции. Ручной накопитель полезен для понимания цикла и потокового ввода. В обоих случаях отдельно обрабатывается пустой набор, если дальше требуется деление на количество.