Как перемножить некоторое количество чисел внутри числа

Функция принимает число N, и должна вернуть количество раз, которое вы должны умножить цифры между собой N, пока не получится одна цифра.


Пример:

9*9*9 = 729, 7*2*9 = 126, 1*2*6 = 12,  1*2 = 2

Мой код работает только в при вызове с двухзначным числом.

def persistence(n):
    count = 0
    while len(str(n)) > 1:
        n=int(str(n)[0])*int(str(n)[1])
        count+=1
    return count
   
print(persistence(999))

Как реализовать для неограниченного кол-ва чисел? Если можно, то интересует именно через цикл while


Ответы (3 шт):

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

Цифры числа можно складывать в list, для этого можно написать отдельную функцию. А потом пробегать циклом по цифрам и умножать.

# Функция возвращает list из цифр числа
def digits(n):
    digs =[]
    while n != 0:
        digs.append(n % 10)
        n = n // 10
    return digs

def persistence(n):
    count = 0
    while n > 9:
        digs = digits(n)
        mul = 1
        # Здесь пробежимся циклом по цифрам и перемножим их
        for digit in digs:
            mul = mul * digit
        n = mul
        print('*'.join(map(str, digs)) + '=' + str(mul))
        count+=1
    return count
   
print(persistence(999))
→ Ссылка
Автор решения: Виктор

Что делать если будет цифра "0" - я буду её пропускать

def persistence(n):
    
    def per(n, count):
        newc = 1
        if n < 10: 
            return (n, count)

        while n > 10:
            i = n % 10
            if i > 0 :
                print(f'{n % 10} * ', end='')
                newc *= n % 10
                count += 1
            n = n // 10
        
        print(f'{n}')
        return per(newc * n, count)

    (n,c) = per(n, 0)
    return c
   
print(f'Answer: {persistence(999)}')

9 * 9 * 9
9 * 2 * 7
6 * 2 * 1
2 * 1
Answer: 7

print(f'Answer: {persistence(909)}')

9 * 9
1 * 8
Answer: 2
→ Ссылка
Автор решения: splash58

можно воспользоваться функцией reduce и преобразованием числа в строку цифр

from functools import reduce

def persistence(n):
    count = 0
    while n > 9:
        n = reduce(lambda x, y: x*int(y), str(n), 1)
        count += 1
    return count

print(persistence(999))
→ Ссылка