2016-08-10 3 views
-1

Этот вопрос кажется немного конкретным, и для этого я извиняюсь, но он меня озадачил. Я пишу себе генератор паролей, который берет строку (ака URL-адрес веб-сайта) и обрабатывает ее в безопасный пароль, который нельзя отменить на основе имени веб-сайта.Как вернуть значение из рекурсивной функции Python?

В части кода, я создал рекурсивную функцию, которая выглядит следующим образом:

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()) 

Я бы ожидать «Nums» для вывода в два раза, так как я печатаю это в блоке else и напечатать ответ позже. Но если он проходит через рекурсивный цикл, «nums» печатается из блока else, и функция возвращает «None». Если if len(nums) < num_length ошибочно в первый раз, то оно возвращает правильное значение.

Зачем ему возвращать «Нет», если я проверил, что объект, который он возвращает, на самом деле не является «Нет»?

Я немного новичок в Python, они обрабатывают рекурсии по-другому?

Спасибо за ваше время

Edit:

проблема исправлена. Забыл оператор возврата при рекурсивном вызове. Спасибо: D

ответ

2

Я думаю, что вам не хватает return перед вложенным get_number. Таким образом, он выполняется и возвращается, но вы ничего не делаете с рекурсивным значением.

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

Посмотрел прямо над этим. Большое спасибо –

+0

Добро пожаловать! Если ваша проблема исправлена, не могли бы вы отметить ответ как принятый? Это помогает фильтру для людей, которые ищут ответы на неотвеченные вопросы :) – Karin

Смежные вопросы