2016-10-03 10 views
0

Ich arbeite an diesem Python-Code für meine erste Programmierklasse. Gestern hat es teilweise geklappt, aber dann habe ich etwas geändert und jetzt gibt es nur noch 1 Testfall. Das Ziel ist, alle geraden Zahlen in der Liste "xs" zu multiplizieren und 1 zurückzugeben, wenn es keine geraden Zahlen gibt. Was mache ich falsch und wie kann ich es beheben?Python multipliziert alle geraden Zahlen in einer Liste

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

    else: 
     return (1) 

Edit: Chepner Lösung gearbeitet danke an alle, die

+0

Wenn * gerade Zahlen in der Liste sind, was soll die Funktion zurückgeben? –

+2

Ich denke, es bei Produkt = 2 zu starten ist falsch? Sollte es nicht Produkt = 1 sein? – Jblasco

+0

Wenn gerade Zahlen vorhanden sind, soll das Programm alle geraden Zahlen in der Liste zusammen multiplizieren und den endgültigen Wert zurückgeben (wenn die Liste z. B. [2,4,6,8] war, sollte es 384 zurückgeben) und 1 zurückgeben nur wenn keine geraden Zahlen vorhanden sind. Bearbeiten: Produkt = 1 funktioniert auch nicht nicht sicher, was es sein sollte – famguy74

Antwort

3

Sie müssen aus zwei Gründen product = 1 initialisieren. Einer, einfach gesagt, Sie erhalten die falsche Antwort. evens_product([4]) sollte 4, nicht 8 zurückgeben. Zwei, es erspart Ihnen, eine Liste mit geraden Zahlen als Sonderfall zu behandeln. Wenn keine geraden Zahlen vorhanden sind, ändern Sie niemals den Wert product und geben ihn unverändert zurück.

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

Die hinzugefügte rekursive Version lässt mich meinen upvote überdenken :-). Ich denke, es ist in jeder Hinsicht schlimmer .... –

+0

Ich nahm Ihren Rat, aber es hat immer noch Probleme. Für die Liste [1,2,3,4,5] wird 2 zurückgegeben, wenn die Liste leer ist, wird "None" zurückgegeben und wenn keine geraden Zahlen vorhanden sind, wird "None" zurückgegeben. Dies ist definitiv eine verwirrende Aufgabe – famguy74

+0

Es ist definitiv schlimmer Python. Ich hätte es wahrscheinlich als Pseudo-Code zurücklassen sollen. – chepner

-1

geholfen Dies wird Ihre Antwort:

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

Es gibt keine Notwendigkeit, return1, da das Produkt bereits 1 zugeordnet ist. Da Sie die return innerhalb der for Schleife hat, wurde der Wert zurückgegeben, nachdem die erste gerade Zahl identifiziert wurde. Hoffe es hat geholfen.

+2

Ihre 'else' Klausel wird nie erreicht werden, oder? Ich denke, es ist korrekt, wenn Sie die Else-Klausel entfernen und Produkt zu 1 – Jblasco

+1

initiieren. Dies ist nur ein Syntaxfehler. – chepner

Verwandte Themen