2016-10-03 88 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