Рекурсивно обратный список ошибок Python throws - PullRequest
0 голосов
/ 09 июля 2019

Я хочу понять, почему код 1 выдает ошибку нижета же логика работает, если "s" - это строка

2

s="hello"
def reverse(s): 
    if len(s) == 1: 
        return s 
    else: 
        return reverse(s[1:]) + s[0] 

Может кто-нибудь помочь мне понять это?

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

В первом фрагменте кода вы берете список строк, удаляете первый элемент и добавляете его в конец. Таким образом, вы добавляете строку в список, создавая None Type. Наименьшее изменение кода было бы приведение строки к списку строк:

s = ["h", "e", "l", "l", "o"]
def reverse(s):
    if len(s) == 1:
        return s
    else:
        return reverse(s[1:]) + list(s[0])
2 голосов
/ 09 июля 2019

Вы возвращаете оператор добавления, который возвращает None, а не список.

print(a.append('o'))

, при этом None

изменит ваш код на:

s = ["h", "e", "l", "l", "o"]
def reverse(s):
    if len(s) == 1:
        return s
    else:
        ret = reverse(s[1:])    # 'ret' needs to be returned
        ret.append(s[0])        # here 'ret' is updated but append returns a 'None'
        return ret              # returning the updated 'ret'
...