我正在尝试计算非零数字的乘积, 直到结果是一位数字。例如,数字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)
答案 0 :(得分:1)
试试这个:
def 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
答案 1 :(得分:0)
您的代码存在多个问题
a
的初始值为0,因此任何后续乘法都会给出0.将其更改为1. 答案 2 :(得分:0)
或者您可以使用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))
输出:
2