2017-01-29 1 views
-1

prim(n) ist eine Funktion, die ich schrieb, überprüft es, ob eine Nummer n prim ist. prim_2(n) gibt eine Liste aller Primzahlen bis n zurück.Warum funktioniert die Rückkehr nicht? Code funktioniert, aber der Test schlägt fehl. #Different zwischen print() und return

prim_liste = [] 
def prim_2(n): 
    if n == 1: 
     prim_liste.reverse() 
     print(prim_liste) # return prim_liste doesn't work. 
    elif n > 1: 
     if prim(n) == "Is prim": 
      prim_liste.append(n) 
      prim_2(n-1)     
     elif prim(n) == "Is not prim": 
      prim_2(n-1) 

Wenn ich ersetzen print(prim_liste) mit return prim_liste, nicht meine Tests sowieso.

prim_2 (5) == [2, 3, 5]

Es ist falsch zurückgeben, obwohl mein Code funktioniert.

Als ich mein Programm mit return prim_liste lief, passierte nichts. Mit print(prim_liste) gibt es das richtige Ergebnis "zurück".

Vielen Dank für Ihre Hilfe! :) Sorry für mein schlechtes Englisch und diesen verwirrenden Beitrag.

+0

Haben Sie die Primaliste ausgedruckt? Bist du sicher, dass prim (n) zurückgibt, was du erwartet hast? – Shiping

+0

Ja, ich sah es. Die Funktion funktioniert wie gewünscht, deswegen war ich verwirrt. – Mindy

Antwort

0

Sie müssen auch return prim_2(n-1) in der Rekursion verwenden, da sonst die Funktion nichts für irgendetwas anderes als 1.

Die einzige Rückkehr in einem Fall zurückkehrt nicht aus der ganzen Rekursion zurückkehren, nur aus, dass stage und alle anderen Aufrufe der Funktion müssen ebenfalls einen Wert zurückgeben.

+0

Vielen Dank! :) Ich verbringe so viel Zeit, um diesen Code zu schreiben und Es war so frustrierend, dass ich nicht herausfinden konnte, warum mein Test fehlschlägt. Ich bin sehr am Anfang der Codierung und Ihre Antwort hat mir geholfen zu verstehen, was das Problem war. Ich war oft unsicher, wann ich return und wie man es in Rekursion verwenden kann. Ich denke, ich verstehe es jetzt. :) – Mindy

0

Sie sollten die Prim-Liste in Ihren Codes ausgedruckt sehen. wenn nicht, muss prim() etwas falsch haben. Wenn Sie prim_2() benötigen, um die Primzahlliste zurückzugeben, müssen Sie Folgendes tun.

prim_liste = [] 

def prim_2(n): 
    if n == 1: 
     prim_liste.reverse() 
     return prim_liste 
    elif n > 1: 
     if prim(n) == "Is prim": 
      prim_liste.append(n) 
     # test for "Is not prim" is not necessary. 
     return prim_2(n-1) # be sure to return what prim_2() returns    
0

Mein Fehler war, dass ich in der Rekursion keine Rückkehr verwendet. So konnte es mir kein Ergebnis geben. Mit print() zeigte es mir das Ergebnis, aber der Test konnte nicht so funktionieren, denn ohne Rücksprung gibt die Funktion nur None zurück. Aus diesem Grund scheitern alle meine Tests, obwohl es der Code schien korrekt zu sein.

prim_liste = [] 
def prim_2(n): 
    if n == 1: 
     prim_liste.reverse() 
     return prim_liste  
    elif n > 1: 
     if prim(n) == "Is prim": 
      prim_liste.append(n) 
      return prim_2(n-1)     
    else: 
     return prim_2(n-1) 
Verwandte Themen