предложение по улучшению моего длинного python кода более короткой и правильной версией - PullRequest
0 голосов
/ 29 мая 2020

В рамках онлайн-упражнения я хочу написать функцию, постоянство, которая принимает положительный параметр num и возвращает его мультипликативную стойкость, то есть количество раз, которое вы должны умножить цифры в num, пока не достигнете одиночный ди git. Например:

постоянство (39) => 3 # Потому что 3 * 9 = 27, 2 * 7 = 14, 1 * 4 = 4 # и 4 имеет только один di git.

настойчивость (999) => 4 # Потому что 9 * 9 * 9 = 729, 7 * 2 * 9 = 126, # 1 * 2 * 6 = 12 и, наконец, 1 * 2 = 2.

persistence (4) => 0 # Поскольку 4 уже является числом с одним ди git.

Это мой код:

def persistence(n):
    count=0
    if n<10:
        return(count)
    else:
        count+=1
        a=([int(d) for d in str(n)])
        result = 1
        for i in a:
            result=result*i
        if result<10:
            return(count)
        else:
            count+=1
            a=([int(d) for d in str(result)])
            result1 = 1
            for i in a:
                result1=result1*i
                if result1<10:
                    return(count)
                else:
                    count+=1
                    a=([int(d) for d in str(result1)])
                    result2=1
                    for i in a:
                        result2=result2*i
                        if result2<10:
                            return(count)
                        else:
                            count+=1
                            a=([int(d) for d in str(result1)])
                            result3=1
                            for i in a:
                                result3=result3*i
                                if result3<10:
                                    return(count)

но когда я пробую n = 999, он дает мне 2, что неверно. Также он ограничен всего 4 мультипликативной персистентностью. Как я могу улучшить этот код. Tnx заранее!

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я тоже нашел этот короткий ответ:

import operator
def persistence(n):
    i = 0
    while n>=10:
        n=reduce(operator.mul,[int(x) for x in str(n)],1)
        i+=1
    return i
1 голос
/ 29 мая 2020

Ваш код не работает, потому что вы не знаете, сколько раз вам нужно выполнить операцию, чтобы получить одно число di git. Что вы можете сделать в этой ситуации, так это создать al oop и позволить ему работать, пока число больше 10. Вы можете попробовать что-то вроде этого:

from functools import reduce
from operator import mul

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

И причина, по которой этого не происходит. работа для 999 связана с тем, что оператор if во втором for l oop. Вы проверяете, меньше ли result1 10 внутри l oop.

...