Суммирование числовых значений – распространенная задача в программировании.
Дано число, например 345
Нужно найти сумму цифр числа в Python, то есть: 3 + 4 + 5 = 12
☒ ИСПОЛЬЗОВАНИЕ ЦИКЛА While
❗Важно: алгоритм работает с числами, а не со строками или другими типами переменных. То есть на вход алгоритма должно поступать целое число (int). Для корректного отображения ответа лучше использовать именно целый тип чисел (int), без запятых.
Цикл while - используется для многократного выполнения блока кода, пока заданное условие остаётся истинным
⇨ 1. ДАНО ИСХОДНОЕ ЧИСЛО, СУММУ ЦИФР КОТОРОГО НЕОБХОДИМО НАЙТИ
digit = 12345
⇨ 2. ВВОДИМ ПЕРЕМЕННУЮ ДЛЯ СУММЫ (S) И ОБНУЛЯЕМ ЕЁ
sum1 = 0
⇨ 3. ЗАПУСКАЕМ ЦИКЛ WHILE
while digit > 0:
Данный цикл работает до тех пор, пока выполняется условие (digit > 0). Если переменная (digit) становится меньше или равна 0, то цикл while перестаёт работать, то есть выполнять алгоритм внутри него.
⇨ 4. ОТДЕЛЯЕМ ПОСЛЕДНЮЮ НА ДАННЫЙ МОМЕНТ ЦИФРУ ЧИСЛА И ПРИБАВЛЯЕМ ЕЁ К ПЕРЕМЕННОЙ СУММЫ
Для этого используем операцию остаток от деления (mod) в Python - (%)
sum1 = sum1 + (digit % 10)
[более короткая запись] sum1 += digit % 10
оператор % – остаток от деления в Python
⇨ 5. УМЕНЬШАЕМ ИСХОДНОЕ ЧИСЛО НА ОДИН РАЗРЯД
Для этого используем операцию целочисленного деления в Python - (//)
digit = digit // 10 (digit //= 10)
Для чего нужен данный шаг? ⇨ Чтобы перейти к следующей цифре числа
За первый проход алгоритма мы отделяем («отщипываем») последнюю цифру числа, потом прибавляем её к сумме. Далее необходимо прибавить следующую цифру числа, поэтому мы отбрасываем последнюю цифру и получаем доступ к заветной цифре.
оператор // – целочисленное деление в Python
Операция схожа с обыкновенным делением. Необходимо взять целое число и остаток отбросить.
❗ВАЖНО
Шаги 4 и 5 выполняем внутри цикла while. Чтобы каждый шаг выполнялся в автоматическом режиме и для всего числа, а не только для первой цифры. Также, алгоритм получится универсальным и сможет работать для любых чисел: двухзначных, трёхзначных и так далее.
⇨ 6. ВЫВОДИМ РЕЗУЛЬТАТ НА ЭКРАН
print("Сумма цифр числа:", sum1)
⚡Полный алгоритм для вычисления суммы цифр числа через цикл while:
Текст программы:
digit = 12345
sum1 = 0
while digit > 0:
sum1 = sum1 + (digit % 10)
digit = digit // 10
print("Сумма цифр числа:", sum1)
👇В конце статьи подробное описание работы алгоритма
☒ ИСПОЛЬЗОВАНИЕ РЕКУРСИИ
Рекурсивная функция — это функция, которая вызывает саму себя. Рекурсивная функция будет находить сумму цифр числа, путем разделения числа на цифры и вызова функции для каждой цифры. На каждом уровне рекурсии будет добавляться текущая цифра к сумме, а затем вызывать функцию с оставшейся частью числа.
Рекурсивная функция — это функция, которая вызывает саму себя
Текст программы:
def f(n):
if n < 10:
return n
else:
return n % 10 + f(n // 10)
print(f(123))
☒ ЕСЛИ ЧИСЛО В ВИДЕ СТРОКИ (Str)
Подходит для случаев, когда исходная строка состоит только из символов чисел ('123', '53', '8901'). Если в строке есть недопустимые символы ('1a23', 'h<2!3'), то данный метод не сработает.
На вход программы поступает строка типа (str), а не число (int)
s = '123' (s – str)
🆘Как найти сумму цифр числа, если число дано в виде строки?
В языке Python строки — это тип данных, который используется для
представления текста. В Python вы можете создать строку, используя двойные или одинарные кавычки.
- Перевести строку в число: str ➡ int (строка ➡ число)
- Воспользоваться предыдущим алгоритмом: "Нахождение суммы цифр целого числа"
Как преобразовать строку в число?
С помощью команды int(), где в скобках указывается строка, которую нужно перевести.
✅ Когда в строке только символы чисел ('0123456789') :
❌ Когда строка содержит недопустимые символы:
Функция int() пытается преобразовать переданную ей строку в десятичное целое число, но строка содержит недопустимые символы (в данном случае это «а» и «!»), которые не могут быть частью числа в системе счисления с основанием 10.
type — это атрибут в Python, который используется для определения типа переменной или объекта.
В Python в переменную типа int может быть записано число неограниченной длины. Единственное ограничение длины — это размер оперативной памяти.
Например, возможно даже такое число в Python:
с = 123453485632952439856234875624378546235
Полный алгоритм для вычисления суммы цифр числа, если число в виде строки:
Текст программы:
digit_str = '12345'
digit = int(digit_str)
sum1 = 0
while digit > 0:
sum1 = sum1 + (digit % 10)
digit = digit // 10
print("Сумма цифр числа:", sum1)
☒ МЕТОД Count()
С помощью данного метода можно вычислить сумму цифр в строке (str). То есть если дана строка, содержащая в себе символы чисел. Для целых чисел данный метод не подходит (int).
Метод count() в Python используется для подсчёта количества вхождений подстроки (или символа) в строку.
Метод count в Python помогает узнать, сколько раз встречается какой-либо символ внутри строки или другого набора данных.
❗Для целых чисел метод count() не применим.
Чтобы понять как использовать count() для подсчёта суммы цифр в строке, рассмотрим следующий пример:
В строке находятся только символы 2, других символов нет. Подсчитаем сумму цифр строки вручную: 2 + 2 + 2 = 6.
Подсчитаем сумму с помощью count() : s.count('2') * 2 = 6
❗ПРАВИЛО:
Чтобы подсчитать сумму цифр строки с помощью метода count(), нужно количество символов умножить на сам символ.
Ещё один пример для понимания работы метода count():
В строке находятся только символы цифр 3 и 8, других символов нет. Подсчитаем сумму цифр строки вручную: 3 + 3 + 3 = 9 и 8 + 8 = 16
Общая сумма: 9 + 16 = 25
Подсчитаем сумму с помощью count() : s.count('3') * 3 + s.count('8') * 8 = 25
Если умножить количество цифр в строке на саму цифру, то получится сумма цифр строки
Примеры:
Метод count() применим к следующим типам последовательностей в Python:
- Строки (str) — возвращает количество вхождений подстроки в строку
- Списки (list) — возвращает количество элементов с заданным значением
- Кортежи (tuple) — работает аналогично спискам
- Байтовые объекты (bytes) — считает количество вхождений значения value, которое должно быть целым числом или объектом, который можно преобразовать в целое число
- Множества (set) — подсчитывает количество элементов в множестве.
☒ list + map + sum
❗Для продвинутых программистов
Сумму цифр в строке можно найти с помощью встроенной функции (map), встроенной функции (sum) и с использованием списка (list)
Текст программы:
Подробный разбор алгоритма:
- На вход программе подаётся строка (str):
с = '12345' - Создаётся новый список (list), которому присваивается имя (my)
my = list(map(int, c)) - Внутри списка выполняется функция (map).
Данная функция применяется к каждому отдельному элементу строки (с).
То есть (map) выполнится отдельно для первого элемента строки ('1'), для второго элемента строки ('2') и так далее.
Что делает функция (map)?
Она преобразует каждый элемент строки из строкового типа (str) в целый (int).
- ('1') (str) => 1 (int)
- ('2') (str) => 2 (int)
- ('3') (str) => 3 (int)
- ('4') (str) => 4 (int)
- ('5') (str) => 5 (int)
Для чего нужен данный шаг? ⇨ Чтобы применить функцию (sum) к списку (list)
Почему нельзя применить функцию (sum) к исходному списку?
Функция sum() в Python — это встроенная функция, которая возвращает сумму всех числовых элементов в итерируемом объекте (например, списке или кортеже).
❗ВАЖНО
(sum) работает только с целым типом данных. То есть в списке (list) должны быть элементы целого типа (int)
🚫Ниже приведён пример кода, когда список состоит из символов (str), а не чисел (int). IDLE выдаст ошибку, так как операция sum не может выполнить сложение строк.
Объяснение метода (list + sum + map) в общих чертах:
функция (map) берёт каждый элемент строки (с) и преобразует его в число. После этого записывает данное число в список (my). На выходе получается новый список (my), состоящий из числовых элементов строки.
print(my) # >>> [1, 2, 3, 4, 5]
- 4. Выводится результат на экран
print(sum(my)) # >>> 15
Для удобства обозначим переменные следующим образом:
digit ⇨ с = 12345
sum1 ⇨ s = 0
- 1 шаг. Условие цикла (while c > 0):
c = 12345 (12345 > 0) – верно, значит переходим к следующему шагу в алгоритме
s = s + (c % 10) | s = 0 + (12345 %10) | s = 0 + 5 | s = 5
c = c // 10 | c = 12345 // 10 | c = 1234
Значения переменных после выполнения 1 шага: с = 1234 | s = 5
- 2 шаг ⇨ Условие цикла while: c = 1234 (1234 > 0) – ВЕРНО
s = 5 + (1234 % 10) | s = s + 4 | s = 9
c = 1234 // 10 | c = 123
Значения переменных после выполнения 2 шага: с = 123 | s = 9
- 3 шаг ⇨ Условие цикла while: c = 123 (123 > 0) – ВЕРНО
s = 9 + (123 % 10) | s = 9 + 3 | s = 12
c = 123 // 10 | c = 12
Значения переменных после выполнения 3 шага: с = 12 | s = 12
- 4 шаг ⇨ Условие цикла while: c = 12 (12 > 0) – ВЕРНО
s = 12 + (12 % 10) | s = 12 + 2 | s = 14
c = 12 // 10 | c = 1
Значения переменных после выполнения 4 шага: с = 1 | s = 14
- 5 шаг ⇨ Условие цикла while: c = 1 (1 > 0) – ВЕРНО
s = 14 + (1 % 10) | s = 14 + 1 | s = 15
c = 1 // 10 | c = 0
Значения переменных после выполнения 5 шага: с = 0 | s = 15
- 6 шаг ⇨ Условие цикла while: c = 0 (0 > 0) – НЕВЕРНО
Цикл while завершит свою работу так как перестанет выполнятся условие.
❗ВАЖНО
ЦИКЛ WHILE РАБОТАЕТ ДО ТЕХ ПОР, ПОКА ВЫПОЛНЯЕТСЯ УСЛОВИЕ
Далее алгоритм перейдёт к следующей строке в программе:
print("Сумма цифр числа =", s)
После запуска программы появится надпись:
>>> Сумма цифр числа = 15