• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 4. строки

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Текст для блога»

Ты — начинающий блогер. Ты написал свою первую большую статью и хочешь убедиться, что не забыл упомянуть в ней главное ключевое слово для поисковых систем (например, "Python"). Чтобы не перечитывать весь текст глазами, ты решил написать небольшую программу-помощника.

Твоя программа должна запрашивать у тебя полный текст статьи, а затем — ключевое слово, которое нужно найти. После проверки программа должна выдать простой ответ: найдено слово в тексте или нет.

Задача:
Напиши программу, которая принимает на вход две строки: основной текст и подстроку для поиска. Программа должна определить, содержится ли подстрока в основном тексте.

Формат ввода

Основной текст для анализа (строка)
Ключевое слово для поиска (строка)

Формат Вывода

Результат поиска (строка)

Пример

Ввод

Привет, мир! Это моя первая программа.
программа

Вывод

Слово найдено

Подсказка

Всё о строках в Python: от основ до полезных трюков

Строка в Python — это упорядоченная последовательность символов. Для создания строки её необходимо заключить в одинарные ('...'), двойные ("...") или даже тройные кавычки ("""...""" или '''...'''), которые особенно полезны для многострочных текстов.

Ключевая особенность строк в Python — их неизменяемость (immutability). Это означает, что после создания строки вы не можете изменить её отдельные символы. Любая операция, которая "изменяет" строку, на самом деле создает новую.

string1 = "Hello, World!"
string2 = 'Python is fun'
# Пример многострочной строки
multiline_string = """Это строка,
которая занимает
несколько строк кода."""

Индексация строк

Каждый символ в строке имеет свой уникальный номер, или индекс. Индексация позволяет нам получить доступ к любому отдельному символу.

Важно помнить: Индексация в Python всегда начинается с 0, а не с 1. Попытка обратиться к несуществующему индексу вызовет ошибку IndexError.

w = "Python"
print(w[0])  # Вывод: P
print(w[1])  # Вывод: y
print(w[2])  # Вывод: t
print(w[3])  # Вывод: h
print(w[4])  # Вывод: o (а не 0, как в исходном примере)

Также существует отрицательная индексация, которая очень удобна для доступа к символам с конца строки, где -1 — это последний символ, -2 — предпоследний и так далее.

print(w[-1]) # Вывод: n (последний символ)
print(w[-2]) # Вывод: o (предпоследний символ)

Срезы строк (Slicing)

Срезы — это мощный инструмент для извлечения части строки (подстроки). Они позволяют получить не один символ, а целый диапазон.

Общий синтаксис: строка[начало : конец : шаг]

  • начало : индекс, с которого начинается срез (этот символ включается в результат).
  • конец : индекс, на котором срез заканчивается (этот символ не включается в результат).
  • шаг : определяет, с каким интервалом извлекать символы (по умолчанию равен 1).

Примеры срезов

Извлечение подстроки

string = "Hello, World!"
substring = string[0:5] # Символы с 0 по 4 включительно
print(substring)  # Вывод: Hello

Отсутствие начального или конечного индекса Если опустить начальный индекс, срез начнется с самого начала строки. Если опустить конечный — продолжится до самого конца.

string = "Hello, World!"
substring1 = string[:5]   # С начала до индекса 5 (не включительно)
substring2 = string[7:]   # С индекса 7 и до конца строки
print(substring1)   # Вывод: Hello
print(substring2)   # Вывод: World!

Использование шага Шаг позволяет "перепрыгивать" через символы. Например, шаг 2 берет каждый второй символ.

string = "Hello, World!"
substring = string[::2] # Каждый второй символ от начала до конца
print(substring)  # Вывод: Hlo ol!

Отрицательные индексы в срезах Их можно комбинировать для получения частей строки с конца.

string = "Hello, World!"
substring = string[-6:-1] # Начинаем с 6-го символа с конца и идем до 1-го с конца
print(substring)  # Вывод: World

Полезный трюк: переворот строки Самый простой и популярный способ перевернуть строку — это использовать срез с шагом -1.

string = "Hello, World!"
reversed_string = string[::-1]
print(reversed_string)  # Вывод: !dlroW ,olleH

Сложение и умножение строк

Сложение (конкатенация) выполняется с помощью оператора +. Он "склеивает" строки в одну новую.

str1 = "Hello"
str2 = "World"
result = str1 + ", " + str2 + "!"
print(result)  # Вывод: Hello, World!

Важный совет: Нельзя складывать строку с числом напрямую. Чтобы это сделать, число нужно сначала преобразовать в строку с помощью функции str().

# print("Age: " + 25) # Вызовет TypeError
print("Age: " + str(25)) # Правильно! Вывод: Age: 25

Умножение выполняется с помощью оператора *, который повторяет строку заданное количество раз. Это удобно для создания разделителей или форматирования.

string = "Go"
result = string * 3
print(result)  # Вывод: GoGoGo
print("-" * 20) # Вывод: --------------------

Полезные операции со строками

Длина строки Встроенная функция len() возвращает количество символов в строке.

my_string = "Hello"
print(len(my_string))  # Выведет: 5

Проверка на вхождение подстроки Операторы in и not in позволяют проверить, содержится ли одна строка внутри другой. Результатом будет True или False.

Помните: эта проверка чувствительна к регистру! 'd' и 'D' — это разные символы.

name = "Daniil"
password = "Qwerty2000!"
print('D' in name)      # Выведет: True
print('d' in name)      # Выведет: False
print('3' not in password) # Выведет: True

Перебор символов в строке

Строку можно перебрать в цикле for. Есть два основных способа, и выбор зависит от задачи.

Способ 1: Простой перебор (более "питоничный") Этот способ используется, когда вам нужны только сами символы строки. Он проще и читабельнее.

a = "1516 the best"
for char in a: # Переменная char последовательно принимает значение каждого символа
    if char in "1234567890":
        print(char)

Способ 2: Перебор по индексам Этот способ нужен, когда вам важен не только сам символ, но и его позиция (индекс).

a = "1516 the best"
for i in range(len(a)): # i будет принимать значения от 0 до len(a)-1
    if a[i] in "1234567890":
        print(f"Найден символ '{a[i]}' на позиции {i}")

Заключение и что дальше?

Мы рассмотрели базовые, но очень важные операции:

  • Индексация для доступа к отдельным символам.
  • Срезы для извлечения подстрок — невероятно гибкий инструмент.
  • Конкатенация (+) и повторение (*) для создания новых строк.

Это основа, на которой строится вся работа с текстом в Python. Чтобы двигаться дальше, изучите методы строк. Это встроенные функции, которые позволяют делать со строками еще больше полезных вещей, например:

  • .lower() / .upper() — привести всю строку к нижнему или верхнему регистру.
  • .strip() — убрать пробелы и переносы строк в начале и в конце.
  • .replace('старое', 'новое') — заменить все вхождения одной подстроки на другую.
  • .split() — разбить строку на список по разделителю (например, по пробелу).
  • .startswith('префикс') / .endswith('суффикс') — проверить, начинается или заканчивается ли строка на определенную последовательность символов.
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Получаем основной текст от пользователя
main_text = input()

# Получаем слово, которое нужно найти
keyword = input()

# Инициализируем флаг, который покажет, найдено ли слово.
# Изначально считаем, что слово не найдено (False).
is_found = False

# Проверяем, не длиннее ли искомое слово, чем сам текст.
# Если длиннее, то его там точно нет, и цикл запускать бессмысленно.
if len(keyword) <= len(main_text):
    # Запускаем цикл, который перебирает все возможные начальные позиции для нашего слова в тексте.
    # Он идет от 0 до (длина текста - длина слова + 1).
    # +1 нужен, чтобы проверить и самый последний возможный фрагмент.
    for i in range(len(main_text) - len(keyword) + 1):
        # Внутри цикла мы "вырезаем" из основного текста фрагмент (слайс)
        # такой же длины, как и наше ключевое слово, начиная с позиции i.
        fragment = main_text[i : i + len(keyword)]
        
        # Сравниваем вырезанный фрагмент с ключевым словом.
        if fragment == keyword:
            # Если они совпали, меняем значение флага на True (слово найдено).
            is_found = True
            # И сразу же выходим из цикла, так как дальнейший поиск не имеет смысла.
            break

# После завершения цикла проверяем значение нашего флага.
if is_found:
    # Если флаг равен True, значит, слово было найдено.
    print("Слово найдено")
else:
    # Если флаг остался False, значит, цикл прошел до конца, но совпадений не было.
    print("Слово не найдено")

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

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