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