Python变量不变

时间:2018-10-09 16:44:39

标签: python

我有一个简单的for循环,该循环遍历int列表的内容,并将每个非零的int乘以。我将此值存储在变量mult中。但是,mult不变。怎么了?

def answer(l):
    mult = 0
    for i in l:
        if i != 0:
            if mult == 0:
                mult *= i
    return mult

print (answer([3,4,5]))

6 个答案:

答案 0 :(得分:3)

如果将mult设置为0,则mult * =始终为0。请尝试将其初始值设置为1

答案 1 :(得分:2)

您代码中的错误探测语句为 mult = 0 ,对于任何输入,最终结果均为0...。使用 mult = 1

def answer(l):
    mult = 1
    for i in l:
        if i != 0:
            mult *= i
    return mult

print (answer([3,4,5]))

输出:60

答案 2 :(得分:2)

正如@yourPublicDisplayName已经指出的,任何时候0都是0。 您已经习惯了使用0来求和。但是,这是一个正在运行的产品。总而言之,您从加性标识元素0开始;对于产品,您必须从 multiplicative 标识元素1开始。

检查您的变量是否仍在初始值(mult == 0):这只会使进度停留在一个元素上:一旦更改了该值,您将不再包含任何其他非零数字。更简单:

def answer(l):
    mult = 1
    for i in l:
        if i != 0:
            mult *= i
    return mult

print (answer([3,4,5]))

输出:

60

答案 3 :(得分:1)

据我了解,您正在尝试弄清变量mult为何没有变化。它被声明为0,在任何计算中都保持不变。您可以将其更改为0以外的任何其他值。

您的代码必须类似于:

def answer(l):
    mult = a # a as given value
    for i in l:
        if i != 0:
            if mult == a:
                mult *= i
    return mult

print (answer([3,4,5]))    

答案 4 :(得分:0)

以上代码有两项更改。  1.第一个多变量应为= 1  2.如果mult == 1,则此条件不会更改您的值;如果第一个值不为1,则在第一个乘法条件之后将永远无法满足

上面的修改

>>> def answer(l):
...     mult = 1
 ..     for i in l:
...         if i != 0:
...             mult *= i
...     return mult
...
>>> print (answer([3,4,5]))

答案 5 :(得分:0)

当然0与任何东西的乘积将为零。以下是您尝试使用accumulate

进行操作的简短版本
from operator import add, mul
from toolz.itertoolz import accumulate
import numpy as np
a=np.array([3,4,5])
list(accumulate(mul, a[np.nonzero(a)]))[-1] #60