2015-03-28 2 views
-4

Я пытаюсь реализовать функцию, которая находит текст в строке рекурсивно.Найти строку в строке - Python

Я пробовал это, но я не знаю, почему он не работает. Обратите внимание, что я новичок в кодировании.

def find(text, substring): 
    if len(text) == 0: 
    return 0 
    while substring[0] in text: 
    return find(text, substring[1:]) 

Спасибо! :)

Пример:

find("mississippi", "sip") 
True 
find("to be or not to be", "be") 
True 
find("mississippi", "sup") 
False 
+0

Каков ожидаемый результат и какой результат вы получаете? – KSFT

+0

У вас есть базовый футляр, когда конец строки достигнут, но вам также нужен базовый регистр, когда совпадение найдено. –

+0

@GregPrisament Вы имеете в виду «когда матч не был найден»? – KSFT

ответ

0

Вам нужен базовый вариант для вашей рекурсивной функции, которая будет в конечном итоге вернуться без рекурсивно. Ваш базовый футляр len(text)==0 никогда не выполняется, если text=='' в первый раз.

+0

Существует базовый корпус. Если функция не запускает оператор 'return', то возвращается' None'. – KSFT

+0

@KSFT, да. OP должен заархивировать желаемый результат; эта функция никогда не возвращает True. –

0

Существует гораздо более простой способ сделать это. Например, вы можете цикл по индексам строки и проверить, если подстрока в этом месте, как уже упоминалось here:

[i for i in range(len(string)) if s.startswith(substr,i)] 

Это будет оценивать в список индексов всех вхождений substr в string ,

0

Если я правильно понял ваш вопрос, вы хотите реализовать рекурсивную функцию, где find(text, substring), учитывая две строки, возвращает тот же результат, что и простое выражение Python substring in text. Рекурсивная разбивка этой проблемы была бы:

  • начать ли text с substring? Если да, верните True. (Базовый корпус 1)
  • text пустой? Если да, верните False. (Базовый блок 2).
  • В противном случае верните результат find(text[1:], substring) – рекурсивный случай, когда мы вызываем ту же функцию по меньшей задаче.

Посмотрите, сможете ли вы это реализовать! Для базового случая один, у вас будет хорошее применение метода String Python startswith (google it!).

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