Python变量未更改

Python变量未更改,python,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])) 如果将mult设置为0,则mult*=任何值

我有一个简单的
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]))

如果将mult设置为0,则mult*=任何值都将始终为0。试着给它一个初始值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]))    

代码中的错误探测语句是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正如@yourPublicDisplayName已经指出的,任何乘以0的值都是0。 您习惯于从运行求和中使用
0
。然而,这是一个正在运行的产品。对于求和,从加法标识元素0开始;对于产品,必须从乘法标识元素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
上述代码中有两处更改。 1.第一个mult变量应为=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]))

当然,0乘以任何东西都是零。下面是您试图使用的简短版本


“max没有改变”。。。这里的“max”是什么??
如果mult==0
-您将乘以零-这就是您想要的吗?请参阅如何创建一个应将第一个mult=0替换为mult=1的函数。应该删除第二个if语句。我们是否应该将mult初始化为1而不是0?是的,先生@Stephen Quan。这就是我所做的,如果代码中还有任何问题,请告诉我
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