Методы поиска (find, index, count)

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

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

Основные темы урока:
1. find(sub) — поиск индекса первого вхождения подстроки. Возвращает -1, если ничего не найдено.
2. index(sub) — аналогичен find, но вызывает ошибку (ValueError), если подстрока отсутствует.
3. count(sub) — подсчет количества непересекающихся вхождений подстроки.

Эти методы незаменимы при парсинге текста, валидации данных и обработке пользовательского ввода. Мы отработаем их использование на практических примерах, от простых поисков до работы с параметрами start и end.

Список тем

Поиск позиции символа

id: 39995_task_str_1

Нам нужно узнать индекс первого вхождения символа "p" в слове "apple". Допишите код, используя метод, который находит позицию подстроки.

Заполните пропуски
word = "apple"
position = word.input1S("p")
print(position)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат поиска find

id: 39995_task_str_2

Проанализируйте код. В строке "banana" ищется буква "a". Укажите, какое число выведет этот код.

Что должно получиться?
fruit = "banana"
print(fruit.find("a"))
Сообщения
Проверить
Показать подсказку

Подсчет количества вхождений

id: 39995_task_str_3

Необходимо узнать, сколько раз слово "код" встречается в предложении. Используйте соответствующий метод строки.

Заполните пропуски
text = "Я пишу код, люблю код и читаю код."
amount = text.input1S("код")
print(amount)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте методы и их поведение

id: 39995_task_str_4

Методы `find`, `index` и `count` ведут себя по-разному, особенно когда искомая подстрока отсутствует. Сопоставьте метод с его описанием.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Возвращает индекс или -1, если не найдено
Возвращает индекс или вызывает ошибку ValueError
Возвращает количество вхождений подстроки
.index()
.count()
.find()
Сообщения
Проверить
Показать подсказку

Поиск несуществующей подстроки

id: 39995_task_str_5

Что выведет этот код? Мы пытаемся найти слово "Java" в строке, где его нет, используя метод `find`.

Выберите правильный вариант ответа
langs = "Python, C++, Go"
result = langs.find("Java")
print(result)
Сообщения
Проверить
Показать подсказку

Классификация: find vs index

id: 39995_task_str_6

Распределите утверждения по двум категориям: относятся они к методу `.find()` или к методу `.index()`.

Перетяните элементы в соответствующие блоки
Метод .find()
Метод .index()
Возвращает -1 при неудаче
Вызывает ValueError при неудаче
Безопасен для проверки наличия
Требует try-except для безопасности
Сообщения
Проверить
Показать подсказку

Поиск со смещением

id: 39995_task_str_7

В строке два слова "hello". Нам нужно найти индекс **второго** вхождения. Заполните пропуски так, чтобы поиск начался после первого вхождения. Первое "hello" заканчивается на индексе 4.

Нужно правильно расставить в пропуски предложенные варианты
msg = "hello hello"
# Первое hello: индексы 0-4. Пробел: 5.
first_pos = msg.find("hello") 
# Ищем второе, начиная с input1S
second_pos = msg.find("hello", input2S)
print(second_pos)
5
6
start=
0
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте ошибку в имени метода

id: 39995_task_str_8

В этом коде допущена ошибка: в Python у строк нет метода `search`, который возвращал бы индекс. Замените его на стандартный метод поиска, который возвращает -1, если ничего не найдено (чтобы код не упал с ошибкой).

Найдите ошибку и исправьте
text = "Learning Python is fun"
ix = text.search("Java")
if ix == -1:
    print("Not found")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Извлечение домена из email

id: 39995_task_str_9

Соберите код, который находит символ "@" в email-адресе и выводит всё, что находится после него (домен). Используйте срезы и поиск.

Перетяните в правильном порядке строки из одного блока в другой
at_pos = email.find("@")
email = "user@example.com"
print(email[at_pos + 1:])
print(email[at_pos:])
at_pos = email.count("@")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру