建议使用较短且正确的版本来改进我的长python代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建议使用较短且正确的版本来改进我的长python代码相关的知识,希望对你有一定的参考价值。

作为在线练习的一部分,我想编写一个持久性函数,该函数接受一个正参数num并返回其乘法持续性,即您必须将num中的数字相乘直到达到一位数字的次数。例如:

persistence(39)=> 3#因为3 * 9 = 27,2 * 7 = 14,1 * 4 = 4#和4只有一位。

persistence(999)=> 4#因为9 * 9 * 9 = 729,7 * 2 * 9 = 126,#1 * 2 * 6 = 12,最后是1 * 2 = 2。

persistence(4)=> 0#因为4已经是一位数字。

这是我的代码:

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!

答案
您的代码不起作用,因为您不知道执行该操作需要多少次才能获得一个数字。在这种情况下,您可以做的是创建一个循环,并允许循环运行,直到数字大于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语句。您正在检查result1是否小于10 

inside循环。

另一答案
我也找到了这个简短答案:

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

以上是关于建议使用较短且正确的版本来改进我的长python代码的主要内容,如果未能解决你的问题,请参考以下文章

算法(algorithm) Python技能树的「使用体验」「改进建议」

按顺序寻找主题

支持使用 \\?\ 前缀的长路径

为自定义 Barrier 设计测试类

JVM GC算法 CMS 详解(转)

嵌入式实时系统—软实时和硬实时系统的定义和区别