Найти - Пользователи
Полная версия: Как полученный результат опять отправить на вычисление
Начало » Python для новичков » Как полученный результат опять отправить на вычисление
1
shpilliwilliams
Здравствуйте,
Помогите пожалуйста с решением. Дано:
Write a function, persistence, that takes in a positive parameter num and returns its multiplicative persistence, which is the number of times you must multiply the digits in num until you reach a single digit.

For example:

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


Мой код, в котором у меня удалось умножить числа аргумента функции, но только один раз. Не знаю как сделать, чтоб полученный результат снова умножался и так до того момента пока в resultat не будет содержать только 1 цифру.

PythonВыделить код
1
2
3
4
5
6
7
8
9
10
11
 def persistence(n):
    # your code
    num = str(n)
    resultat = []
    for i in num:
        resultat.append(int(i))
            
    resultat = reduce(lambda x, y: x * y, resultat)
    
    
    return resultat

Спасибо!
py.user.next
shpilliwilliams
 num = str(n)
Так обычно числа не раскладывают. Строки медленно работают. Для каждой строки требуется больше памяти, чем для каждого числа. И там ещё знак минус тоже преобразуется в символ и его надо обрабатывать.

С числами всегда только через числовые операции работают.

  
>>> import functools
>>> 
>>> def to_digits(number):
...     number = abs(number)
...     out = []
...     while True:
...         out.insert(0, number % 10)
...         number //= 10
...         if number == 0:
...             break
...     return out
... 
>>> def persistence(number):
...     out = 1
...     while True:
...         number = functools.reduce(
...             int.__mul__, to_digits(number))
...         if number < 10:
...             break
...         out += 1
...     return out
... 
>>> persistence(39)
3
>>> persistence(123)
1
>>> persistence(0)
1
>>>

Вариант с рекурсией
  
>>> import functools
>>> 
>>> def to_digits(number):
...     number = abs(number)
...     out = []
...     while True:
...         out.insert(0, number % 10)
...         number //= 10
...         if number == 0:
...             break
...     return out
... 
>>> def persistence(number):
...     number = functools.reduce(int.__mul__, to_digits(number))
...     if number >= 10:
...         return 1 + persistence(number)
...     return 1
... 
>>> persistence(39)
3
>>> persistence(123)
1
>>> persistence(0)
1
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB