Сумма цифр суммы цифр числа, пока число не станет однозначным на питоне
На вход программа получает число, которое нужно сократить до одной цифры.
Например, сумма цифр числа 38578324323 равна 48. У 48 сумма цифр — 12, а у 12 — 3.
Как решить?
Начал решение как-то так:
num = int(input("Введите целое: "))
sum = 0
while (len(sum) >= 1)
while (num != 0):
sum = sum + num % 10
num = num // 10
Ответы (5 шт):
Вот простенькая рекурсивная функция:
def sum_digits(n):
r = sum(map(int, str(n)))
return sum_digits(r) if r > 9 else r
print(sum_digits(38578324323))
Малопонятный рекурсивный однострочник для извращенцев любителей прекрасного (работать будет только в Python 3.8+):
def sum_digits(n):
return sum_digits(n) if (n := sum(map(int, str(n)))) > 9 else n
Нерекурсивное решение с использованием моржового (walrus) оператора, появившегося в Python 3.8:
def sum_dig(n):
while (n := sum(map(int, str(n)))) > 9:
pass
return n
Или обычный вариант:
def sum_dig(n):
while n > 9:
n = sum(map(int, str(n)))
return n
есть еще "читерский" способ
The digital root (also repeated digital sum) of a natural number in a given radix is the (single digit) value obtained by an iterative process of summing digits, on each iteration using the result from the previous iteration to compute a digit sum. The process continues until a single-digit number is reached. In base 10, this is equivalent to taking the remainder upon division by 9 (except when the digital root is 9, where the remainder upon division by 9 will be 0).
то есть:
num = int(input("Введите целое: "))
sum_ = 9 if not num%9 else num%9
while (len(str(num)) > 1):
num = sum([int(i) for i in str(num)])
print(num)
Собственно, данный код исполняет вышеуказанное задание. Не сказал бы, что решение оптимизированное, так как идет довольно много преобразований типов данных, но как рабочий вариант - пойдёт.