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

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

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

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

Задача«SEO-оптимизация»

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

Ваша задача — написать программу, которая будет очищать исходную строку от этих стоп-слов и формировать из оставшихся "чистых" ключевиков новую строку, где они будут перечислены через запятую. Это поможет в дальнейшем использовать их для мета-тегов на сайте.

Техническое задание:

  1. Программа должна принять на вход одну строку, содержащую ключевые слова, разделенные пробелами.
  2. Внутри программы должен быть жёстко задан список стоп-слов (например: "купить", "цена", "сколько", "стоит", "в", "и", "с", "на").
  3. Программа должна разбить входную строку на отдельные слова.
  4. Используя цикл for, программа должна перебрать все слова.
  5. С помощью условия if, для каждого слова нужно проверить, не является ли оно стоп-словом. Проверка должна быть нечувствительна к регистру (т.е. "Купить" и "купить" — это одно и то же стоп-слово).
  6. "Чистые" слова (те, что не являются стоп-словами) нужно собрать в отдельный список.
  7. В конце, программа должна вывести одну строку, состоящую из чистых слов, соединенных через запятую и пробел (). Если чистых слов не осталось, программа должна вывести пустую строку.

Формат ввода

Строка (string) с ключевыми словами, разделенными пробелами.

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

Строка (string) с отфильтрованными ключевыми словами, разделенными запятой и пробелом.

Пример

Ввод

купить ноутбук asus цена в москве

Вывод

ноутбук, asus, москве

Подсказка

методы для работы со строками в питоне

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

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

Основные методы для работы со строками

1. upper() и lower()

Преобразуют все символы строки к верхнему или нижнему регистру соответственно.

string = "Hello, World!"
print(string.upper())  # Вывод: HELLO, WORLD!
print(string.lower())  # Вывод: hello, world!
print(string)          # Вывод: Hello, World! (исходная строка не изменилась)

Полезный совет: Эти методы незаменимы, когда нужно сравнить строки без учета регистра. Например, при проверке пользовательского ввода.

user_input = "Да"
if user_input.lower() == "да":
    print("Пользователь согласен.")

2. strip(), lstrip() и rstrip()

Удаляют пробельные символы (пробелы, табы, переносы строк) с начала и конца строки. lstrip() удаляет только слева, а rstrip() — только справа.

string = "  Hello, World!  "
print(string.strip())   # Вывод: Hello, World!
print(string.lstrip())  # Вывод: Hello, World!  
print(string.rstrip())  # Вывод:   Hello, World!

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

dirty_string = "!!!Hello, World!?! "
print(dirty_string.strip(" !?")) # Вывод: Hello, World

3. split() и join()

split() разделяет строку на список подстрок по указанному разделителю. join() собирает строку из элементов списка, вставляя между ними строку-разделитель.

string = "Hello, World!"
words = string.split(", ")
print(words)  # Вывод: ['Hello', 'World!']

# Обратная операция
joined_string = " | ".join(words)
print(joined_string)  # Вывод: Hello | World!

Полезный совет: split() — это стандартный способ для парсинга (разбора) данных, представленных в виде строки, например, CSV-файлов. join() является наиболее эффективным ("pythonic") способом собрать одну большую строку из множества мелких, он работает гораздо быстрее, чем сложение строк в цикле через +.

4. find() и replace()

find() ищет первое вхождение подстроки и возвращает ее индекс (позицию). Если подстрока не найдена, возвращает -1. replace() заменяет все вхождения одной подстроки на другую.

string = "Hello, World!"
index = string.find("World")
print(index)  # Вывод: 7

new_string = string.replace("World", "Python")
print(new_string)  # Вывод: Hello, Python!

Полезный совет: Существует аналог метода find()index(). Он делает то же самое, но если подстрока не найдена, он вызывает ошибку ValueError. Используйте find(), если отсутствие подстроки — нормальная ситуация, и index(), если это должно прервать выполнение программы. Метод replace() также может принимать третий аргумент — количество замен, которые нужно сделать.

5. startswith() и endswith()

Проверяют, начинается или заканчивается ли строка определенной подстрокой. Возвращают True или False.

string = "Hello, World!"
print(string.startswith("Hello"))  # Вывод: True
print(string.endswith("World!"))   # Вывод: True
print(string.startswith("Bye"))    # Вывод: False

Полезный совет: Очень удобно для быстрой проверки форматов файлов (filename.endswith(".txt")) или типов ссылок (url.startswith("https")).

6. isdigit(), isalpha() и isalnum()

Проверяют, из чего состоит строка.

  • isdigit(): True, если все символы — цифры.
  • isalpha(): True, если все символы — буквы.
  • isalnum(): True, если все символы — буквы или цифры.
string1 = "12345"
string2 = "Hello"
string3 = "Hello123"

print(f"'{string1}' состоит из цифр? {string1.isdigit()}")   # Вывод: True
print(f"'{string2}' состоит из букв? {string2.isalpha()}")   # Вывод: True
print(f"'{string3}' состоит из букв и цифр? {string3.isalnum()}")  # Вывод: True
print(f"'{string2}' состоит из цифр? {string2.isdigit()}") # Вывод: False

Полезный совет: Эти методы идеально подходят для валидации (проверки корректности) пользовательского ввода перед тем, как пытаться преобразовать строку в число или использовать ее дальше в программе.

Полный справочник методов

Ниже представлена таблица с более полным списком строковых методов для быстрого ознакомления.

Метод Назначение
S.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1.
S.rfind(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или -1.
S.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError.
S.rindex(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError.
S.replace(шаблон, замена[, maxcount]) Замена шаблона на замену. maxcount ограничивает количество замен.
S.split(символ) Разбиение строки по разделителю.
S.isdigit() Состоит ли строка из цифр.
S.isalpha() Состоит ли строка из букв.
S.isalnum() Состоит ли строка из цифр или букв.
S.islower() Состоит ли строка из символов в нижнем регистре.
S.isupper() Состоит ли строка из символов в верхнем регистре.
S.isspace() Состоит ли строка из неотображаемых символов (пробел, \f, \n, \r, \t, \v).
S.istitle() Начинаются ли слова в строке с заглавной буквы.
S.upper() Преобразование строки к верхнему регистру.
S.lower() Преобразование строки к нижнему регистру.
S.startswith(str) Начинается ли строка S с шаблона str.
S.endswith(str) Заканчивается ли строка S шаблоном str.
S.join(список) Сборка строки из списка с разделителем S.
ord(символ) Преобразует символ в его код ASCII/Unicode.
chr(число) Преобразует код ASCII/Unicode в символ.
S.capitalize() Переводит первый символ строки в верхний регистр, а все остальные в нижний.
S.center(width, [fill]) Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию).
S.count(str, [start],[end]) Возвращает количество непересекающихся вхождений подстроки.
S.expandtabs([tabsize]) Заменяет символы табуляции \t пробелами.
S.lstrip([chars]) Удаление указанных символов (или пробельных) в начале строки.
S.rstrip([chars]) Удаление указанных символов (или пробельных) в конце строки.
S.strip([chars]) Удаление указанных символов (или пробельных) в начале и в конце строки.
S.partition(шаблон) Разделяет строку по первому вхождению разделителя на три части: до, сам разделитель, после.
S.rpartition(sep) Разделяет строку по последнему вхождению разделителя на три части: до, сам разделитель, после.
S.swapcase() Переводит символы нижнего регистра в верхний, а верхнего – в нижний.
S.title() Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний.
S.zfill(width) Дополняет строку нулями слева до длины width.
S.ljust(width, fillchar=" ") Выравнивает строку по левому краю, дополняя справа символами fillchar.
S.rjust(width, fillchar=" ") Выравнивает строку по правому краю, дополняя слева символами fillchar.
S.format(*args, **kwargs) Форматирование строки (более современная альтернатива %).
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Список стоп-слов, которые нужно удалить. Он задан прямо в коде.
stop_words = ["купить", "цена", "сколько", "стоит", "в", "и", "с", "на"]

# Получаем строку с ключевыми словами от пользователя
keywords_input = input()

# Разделяем полученную строку на отдельные слова по пробелу. Результатом будет список слов.
words = keywords_input.split()

# Создаем пустой список, куда будем складывать "чистые" ключевые слова
clean_words = []

# Запускаем цикл, который перебирает каждое слово в списке 'words'
for word in words:
    # Приводим слово к нижнему регистру для корректного сравнения со списком stop_words
    # и проверяем, НЕ содержится ли оно в списке стоп-слов.
    if word.lower() not in stop_words:
        # Если слово не является стоп-словом, добавляем его в наш список 'clean_words'
        clean_words.append(word)

# Используем метод join, чтобы объединить все элементы списка 'clean_words' в одну строку.
# В качестве разделителя указываем ", " (запятая и пробел).
result = ", ".join(clean_words)

# Выводим итоговую строку на экран
print(result)

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

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

AD

Реклама

red-snake blue-snake green-snake

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

Помощник ИИ

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