2016-10-03 87 views
0

我正在为我的第一个编程类的这个python代码工作。昨天它有部分工作,但后来我改变了一些东西,现在只能通过1个测试用例。目标是将列表“xs”中的所有偶数乘以,如果没有偶数,则返回1。我做错了什么,我该如何解决它?Python乘以列表中的所有偶数

def evens_product(xs): 
    product = 2 
    for i in xs: 
     if i%2 == 0: 
      product *= i 
      return product 

    else: 
     return (1) 

编辑:Chepner的解决方案工作谢谢大家谁帮助

+0

当列表中有*号*偶数时,函数意味着返回什么? –

+2

我认为从产品= 2开始它是错误的?它不应该是产品= 1吗? – Jblasco

+0

当存在偶数时,程序应该将列表中的所有偶数乘以一起并返回最终值(例如,如果列表[2,4,6,8]应返回384)并返回1只有当偶数不存在时。编辑:产品= 1也不能确定它应该等于什么 – famguy74

回答

3

您需要初始化product = 1,原因有两个。一,简单地说,你会得到错误的答案。 evens_product([4])应该返回4,而不是8. 二,它可以节省您不必将没有偶数的列表作为特殊情况处理。如果没有偶数,则永不改变product的值并将其保持不变。

def evens_product(xs): 
    product = 1 
    for i in xs: 
     if i%2 == 0: 
      product *= i 
    return product 
+0

添加的递归版本让我重新考虑我的upvote :-)。我认为它在各方面都更糟...... –

+0

我接受了你的建议,但仍然存在问题。对于列表[1,2,3,4,5]它返回2,当列表为空时,返回“None”,当没有偶数时,返回“None”。这绝对是一个令人困惑的任务 – famguy74

+0

它绝对是更糟糕的Python。我可能应该把它作为伪代码。 – chepner

-1

这将是您的答案:

def evens_product(xs): 
    product = 1 
    for i in xs: 
     if i%2 == 0: 
      product *= i 
    return product 

没有必要return1因为该产品已经被分配1。 由于您在for循环内有return,它在识别第一个偶数后返回值。希望它有帮助。

+2

你的“其他”条款永远不会被达成,那么,对吧?我认为这是正确的,如果您删除else子句并将产品初始化为1 – Jblasco

+1

因为这只是一个语法错误。 – chepner