2016-08-10 1 views
-1

Diese Frage scheint ein wenig spezifisch, und dafür tut es mir leid, aber es hat mich ratlos. Ich schreibe mir selbst einen Passwortgenerator, der eine Zeichenfolge (die URL einer Website) annimmt und diese in ein sicheres Passwort umwandelt, das nicht anhand des Namens der Website zurückverfolgt werden kann.Wie gibt man einen Wert von einer rekursiven Python-Funktion zurück?

In Teil des Codes, habe ich eine rekursive Funktion, die wie folgt aussieht:

def get_number(n = 0, nums = ''): 
    for i in range(0, len(url)): 
     #both n and nums are changed 
    if len(nums) < num_length: 
     get_number(n, nums) 
    else: 
     print(nums) 
     return(nums) 

...

print(get_number()) 

Ich würde erwarten, 'nums' zur Ausgabe zweimal, da ich drucke es im else Block und drucken Sie die Rückkehr später. Wenn es jedoch eine rekursive Schleife durchläuft, wird 'nums' aus dem Else-Block gedruckt und die Funktion gibt 'None' zurück. Wenn if len(nums) < num_length beim ersten Mal falsch ist, gibt es den richtigen Wert zurück.

Warum würde es "None" zurückgeben, wenn ich verifiziert habe, dass das Objekt, das es zurückgibt, tatsächlich nicht "None" ist?

Ich bin ein wenig neu in Python, behandeln sie Rekursionen anders?

Vielen Dank für Ihre Zeit

Edit:

Problem behoben. Eine Rückgabeanweisung für den rekursiven Aufruf wurde vergessen. Danke: D

Antwort

2

Ich denke, Sie vermissen ein return vor dem verschachtelten get_number. Es wird also ausgeführt und zurückgegeben, aber Sie tun nichts mit dem rekursierten Wert.

def get_number(n = 0, nums = ''): 
    for i in range(0, len(url)): 
     #both n and nums are changed 
    if len(nums) < num_length: 
     return get_number(n, nums) 

    print(nums) 
    return nums 
+0

Sah genau darüber aus. Vielen Dank –

+0

Gern geschehen! Wenn Ihr Problem behoben ist, würde es Ihnen etwas ausmachen, die Antwort als akzeptiert zu markieren? Dies hilft dem Filter für Leute, die nach unbeantworteten Fragen suchen :) – Karin

Verwandte Themen