В этом модуле мы углубимся в работу со строками в Python и изучим методы поиска подстрок. Вы узнаете, как определить позицию символа или слова внутри строки, как подсчитать количество вхождений определенного фрагмента и чем отличаются похожие на первый взгляд методы.
Основные темы урока:
1. find(sub) — поиск индекса первого вхождения подстроки. Возвращает -1, если ничего не найдено.
2. index(sub) — аналогичен find, но вызывает ошибку (ValueError), если подстрока отсутствует.
3. count(sub) — подсчет количества непересекающихся вхождений подстроки.
Эти методы незаменимы при парсинге текста, валидации данных и обработке пользовательского ввода. Мы отработаем их использование на практических примерах, от простых поисков до работы с параметрами start и end.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Поиск позиции символа
Нам нужно узнать индекс первого вхождения символа "p" в слове "apple". Допишите код, используя метод, который находит позицию подстроки.
word = "apple"
position = word.input1S("p")
print(position)Результат поиска find
Проанализируйте код. В строке "banana" ищется буква "a". Укажите, какое число выведет этот код.
fruit = "banana"
print(fruit.find("a"))Подсчет количества вхождений
Необходимо узнать, сколько раз слово "код" встречается в предложении. Используйте соответствующий метод строки.
text = "Я пишу код, люблю код и читаю код."
amount = text.input1S("код")
print(amount)Сопоставьте методы и их поведение
Методы `find`, `index` и `count` ведут себя по-разному, особенно когда искомая подстрока отсутствует. Сопоставьте метод с его описанием.
.index().count().find()Поиск несуществующей подстроки
Что выведет этот код? Мы пытаемся найти слово "Java" в строке, где его нет, используя метод `find`.
langs = "Python, C++, Go"
result = langs.find("Java")
print(result)Классификация: find vs index
Распределите утверждения по двум категориям: относятся они к методу `.find()` или к методу `.index()`.
Поиск со смещением
В строке два слова "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)Исправьте ошибку в имени метода
В этом коде допущена ошибка: в Python у строк нет метода `search`, который возвращал бы индекс. Замените его на стандартный метод поиска, который возвращает -1, если ничего не найдено (чтобы код не упал с ошибкой).
text = "Learning Python is fun"ix = text.search("Java")if ix == -1: print("Not found")Извлечение домена из email
Соберите код, который находит символ "@" в email-адресе и выводит всё, что находится после него (домен). Используйте срезы и поиск.
at_pos = email.find("@")email = "user@example.com"print(email[at_pos + 1:])print(email[at_pos:])at_pos = email.count("@")