@Onigire

Почему функция возвращает None?

Здравствуйте. Суть кода в том, что бы вернуть самый длинный отрывок текста без повторяющихся символов, но я не понимаю что не так.
a = 'pwwkew'
def longest_substring(string, substring_len):
    for i in range(len(a) - substring_len + 1):
        substring = list(a[i:i + substring_len])
        if sorted(substring) == sorted(set(substring)):
           # Условие выполняется
            return substring

    longest_substring(string, substring_len - 1)

ans = longest_substring(a, len(a))
print(ans)  # --> None
  • Вопрос задан
  • 232 просмотра
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Если условие не выполняется, то функция ничего не возвращает и в переменной ans оказывается None.
Ответ написан
Maksim_64
@Maksim_64
Data Analyst
а где return добавьте и функция начнет вам возвращать то что вы ожидаете.
return longest_substring(string, substring_len - 1)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@GofMan33333
Функция longest_substring никогда не возвращает результат в том случае, когда substring_len уменьшается. Вам нужно добавить финальный return в конце функции, чтобы вернуть результат в этом случае. Например:

def longest_substring(string, substring_len):
    for i in range(len(a) - substring_len + 1):
        substring = list(a[i:i + substring_len])
        if sorted(substring) == sorted(set(substring)):
            return substring

    return longest_substring(string, substring_len - 1)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы