Сумма цифр суммы цифр числа, пока число не станет однозначным на питоне

На вход программа получает число, которое нужно сократить до одной цифры.

Например, сумма цифр числа 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 шт):

Автор решения: MaxU

Вот простенькая рекурсивная функция:

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
→ Ссылка
Автор решения: MaxU

Нерекурсивное решение с использованием моржового (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
→ Ссылка
Автор решения: SergFSM

есть еще "читерский" способ

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

отсюда https://en.wikipedia.org/wiki/Digital_root

→ Ссылка
Автор решения: ArmyCyber
def sum_digits(n):
    return (n - 1) % 9 + 1
→ Ссылка
Автор решения: Александр Афанасьев

while (len(str(num)) > 1):
    num = sum([int(i) for i in str(num)])

print(num)

Собственно, данный код исполняет вышеуказанное задание. Не сказал бы, что решение оптимизированное, так как идет довольно много преобразований типов данных, но как рабочий вариант - пойдёт.

→ Ссылка