IninsaY
@IninsaY

Почему не так? (while)?

Я не могу понять как писать программы такого типа:

persistence(39) => 3 # Because 3*9 = 27, 2*7 = 14, 1*4=4
# and 4 has only one digit.

persistence(999) => 4 # Because 9*9*9 = 729, 7*2*9 = 126,
# 1*2*6 = 12, and finally 1*2 = 2.

persistence(4) => 0 # Because 4 is already a one-digit number.

Если не понятно, то нужно множить цифры числа, пока число не станет простым.

Вроде понятно, что тут while нужен, но написать код не могу.
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
adugin
@adugin Куратор тега Python
from functools import reduce
from operator import mul

def persistence(n):
    i = 0
    while n > 9:
        n = reduce(mul, map(int, str(n)), 1)
        i += 1
    return i

Вариант без дополнительных импортов:
def persistence(n):
    i = 0
    while n > 9:
        n = eval('*'.join(f'{n}'))
        i += 1
    return i

Вариант без while:
from functools import reduce
from operator import mul
from itertools import count

def persistence(n):
    for i in count(0):
        if n > 9:
            n = reduce(mul, map(int, str(n)), 1)
        else:
            return i

Проверки корректности результата:
assert persistence(39) == 3
assert persistence(999) == 4
assert persistence(4) == 0
Ответ написан
kshnkvn
@kshnkvn Куратор тега Python
t.me/kshnkvn
Как вариант без использования дополнительных импортов:
def persistence(num):
    temp = 1
    while num > 9:
        for n in map(int, list(str(num))):
            temp = temp * n
        num, temp = temp, 1
    return num
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы