Python 数字的乘积作为一个位数
我试图计算非零数字的乘积, 直到结果是一个位数。例如,数字512983是2,因为5×1×2×9×8×3=2160和2×1×6=12(注意省略零位)和1×2=2。但是每次我运行这个,我只得到0Python 数字的乘积作为一个位数,python,python-2.7,numpy,Python,Python 2.7,Numpy,我试图计算非零数字的乘积, 直到结果是一个位数。例如,数字512983是2,因为5×1×2×9×8×3=2160和2×1×6=12(注意省略零位)和1×2=2。但是每次我运行这个,我只得到0 def prod_digits(n): a = 1 for each in str(n): a = a * int(each) return a prod_digits(123) 您的代码存在多个问题 由于a的初始值
def prod_digits(n):
a = 1
for each in str(n):
a = a * int(each)
return a
prod_digits(123)
您的代码存在多个问题
a
的初始值为0,因此任何后续乘法都将得到0。将其更改为1def prod_digits(n):
a = 1
for each in str(n):
if each is not '0':
a = a * int(each)
return a
a = 123
while (a > 10):
a = prod_digits(a)
print a
或者您可以使用
functools
中的reduce函数:
from functools import reduce
def compute_nz_product(n):
digits = [int(c) for c in str(n) if c is not '0']
result = reduce(lambda x, y: x*y, digits)
if result < 10:
return result
else:
return compute_nz_product(result)
print(compute_nz_product(512983))
如果在循环中
打印一个
和打印每个
,会发生什么?我希望它返回答案而不是打印是。打印它将帮助您进行调试。错误在于您正在设置a=0
,因此任何与0相乘的值都是0。所以设置一个类似于@Stack所说的1。调试(通过检查值)可能会向您显示这一点;-)我怎么做第二部分@kaustubh@kerj74-如果这是您对递归的第一次介绍,我建议您寻找一些关于递归的基本问题,如阶乘、斐波那契序列等。但是,如果您对迭代更熟悉,也可以这样做。使用嵌套循环,并在外部循环中,不断检查中间字符串/数组的长度。对于a=12011210345003
,它将返回4
i/o2
@ReblochonMasque:但是…它是4?1x2x2xx1x1x1x3x4x5x3=720,7x2=14,1x4=4。2x2=4*3=12=2*4=8*5=40=4*3=12=2
hahahahaha。。。结果因操作顺序而异!:D:D@ReblochonMasque我理解他的问题是,处理所有数字,得到一个结果,然后再处理所有数字,等等。不要不断地将>10个结果减少到一位数。很好。这实际上比我的递归函数使用reduce
更快。如果结果<10,则使用。
2