Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2016 13:05:00

shpilliwilliams
Зарегистрирован: 2016-12-25
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Как полученный результат опять отправить на вычисление

Здравствуйте,
Помогите пожалуйста с решением. Дано:
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

Спасибо!

Офлайн

#2 Дек. 25, 2016 14:42:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

Как полученный результат опять отправить на вычисление

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
>>>



Отредактировано py.user.next (Дек. 25, 2016 14:52:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version