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