Как найти подстроку строки в Python - PullRequest
0 голосов
/ 24 января 2020

Я только начал изучать рекурсию в python, и у меня возникают проблемы, когда возвращать вызов функции или просто возвращать условие. Можете ли вы помочь мне выяснить проблему, с которой я сталкиваюсь в этой программе, не вижу, что происходит не так.

def prefix(sub, a_string, i=1):
    '''Prefix looks for a substring by checking ex. if el is in hello by first
    checking h == el then he == el... hello == el. If not then cut out the first letter
    and start again. e == el then el == el and should then return'''
    if len(a_string) == i:
        is_substring(sub, a_string[1:])
    if sub == a_string[0:i]: # Then we have found a substring
       return True
    else:
       prefix(sub, a_string, i+1)

def is_substring(sub, a_string):
    #Checks for base condition
    if sub == "" or a_string == "":
        return False
    return prefix(sub, a_string)

#print(is_substring("el", "hello"))

Ответы [ 2 ]

1 голос
/ 24 января 2020

Вы звоните is_substring и prefix, но не возвращаете их результат, вам нужно добавить return

def prefix(sub, a_string, i=1):
    if len(a_string) == i:
        return is_substring(sub, a_string[1:])
    if sub == a_string[0:i]: # Then we have found a substring
       return True
    else:
       return prefix(sub, a_string, i+1)

Также добавьте базовое c условие равенства в is_substring

def is_substring(sub, a_string):
    if sub == "" or a_string == "":
        return False
    if sub == a_string:
      return True
    return prefix(sub, a_string)
0 голосов
/ 24 января 2020

У меня проблемы с возвратом вызова функции или просто возвратом условия.

В рекурсии вы просто «возвращаете условие», когда сразу можете узнать ответ. Это называется «базовый случай». Например, у вас есть

if sub == "" или a_string == "": return False

Здесь просто проверить, каким должно быть возвращаемое значение.

Точно так же вы можете проверить это очень легко:

if sub == a_string[0:i]: # Then we have found a substring
   return True

Я подозреваю, что проблема в порядке ваших if утверждений. Обычно мы ставим базовый регистр первым, потому что он немедленно вернется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...