建议使用较短且正确的版本来改进我的长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!
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
是否小于10inside循环。
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代码的主要内容,如果未能解决你的问题,请参考以下文章