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