Для простой проверки наличия используйте part in text. Метод find возвращает индекс, а не логическое значение, поэтому его результат нельзя проверять обычным if без сравнения. Вхождение в начале имеет индекс 0, который считается ложным, а отсутствие даёт -1, которое в логическом условии считается истинным.
Например, при text = 'кот спит' выражение text.find('кот') вернёт ноль. Правильные проверки: 'кот' in text или text.find('кот') != -1. Если нужна сама позиция, сохраните индекс и сравните его с минус единицей. Не прибавляйте единицу к результату только ради исправления условия: явное сравнение лучше показывает намерение.
Метод index тоже возвращает позицию, но при отсутствии фрагмента выбрасывает ValueError. Он удобен, когда отсутствие является ошибочной ситуацией и вы готовы её обработать. Для обычного поиска в пользовательском тексте in или find часто проще.
Учитывайте, что поиск чувствителен к регистру и точным символам. Латинская буква и похожая кириллическая — разные символы. Пробелы и переводы строк внутри искомого фрагмента тоже должны совпадать. Для проверки без регистра можно сравнить part.casefold() in text.casefold(), но позиции преобразованной строки не всегда соответствуют исходным.
Если требуется найти все вхождения, одного вызова find недостаточно: нужно продолжать поиск после найденной позиции. Заранее решите, учитывать ли перекрывающиеся совпадения. Пустая искомая строка является отдельным случаем и считается содержащейся в любой строке, поэтому при пользовательском поиске её обычно проверяют отдельно.
Лучший ответ
Датахакер
Датахакер
Как найти строку в строке python?
Если только проверить наличие, in читается проще и про минус один помнить не надо.