Я пытаюсь разбить строку произвольной длины на куски из 3 символов. Я знаю, что этот вопрос задан ранее (How do you split a list into evenly sized chunks?), но этот ответ решает проблему с пониманием списка; Я пытаюсь решить проблему, используя вызов рекурсивной функции, поэтому мой вопрос связан скорее с вызовами рекурсивных функций в Python.Разбиение строки на куски с использованием рекурсии
Моя функция отлично работает до «базового футляра», самой последней строки из 3 или менее символов. Я получаю TypeError: can only concatenate list (not "NoneType") to list
.
Почему основной корпус возвращает None
вместо list
? Я явно создаю список с именем final_value
в базовом футляре и верну его. У меня даже есть отладочная заявка на печать, которая показывает мне, что возвращаемое базовое значение имеет тип <class 'list'>
.
Мой код ниже.
three_char_strings = []
def split3(str):
if len(str) <= 3:
final_value = []
final_value.append(str)
print('Final value: %s\nFinal value type: %s\n' % (final_value, type(final_value))) #For debugging
return final_value
else:
beginning = str[0:3]
three_char_strings.append(beginning)
remaining = str[3:]
three_char_strings + split3(remaining)
Ваша рекурсивная функция только на самом деле 'return' в базовом случае - это нужно сделать в обоих. – jonrsharpe
Да, я вижу это сейчас, и мне нужно это исправить. Спасибо. Но это все еще не устраняет проблему, почему базовый случай возвращает «NoneType». – LeonardShelby
В базовом случае нет, ** другой случай - ** (без явного «возврата» вы по умолчанию получаете «Нет»). – jonrsharpe