Python 数字的乘积作为一个位数

Python 数字的乘积作为一个位数,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的初始值

我试图计算非零数字的乘积, 直到结果是一个位数。例如,数字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
    的初始值为0,因此任何后续乘法都将得到0。将其更改为1
  • 需要递归调用函数,直到函数的参数为一位数
  • 相乘时需要忽略0
  • 试试这个:

    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
    

    或者您可以使用
    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/o
    2
    @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