P. Найдётся всё 3.0

Давайте вновь напишем небольшой компонент поисковой системы.

Формат ввода

Сначала вводится поисковый запрос.
Затем вводятся имена файлов, среди которых следует произвести поиск.

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

Выведите все имена файлов, в которых есть поисковая строка без учета регистра и повторяющихся пробельных символов.
Если ни в одном файле информация не была найдена, выведите “404. Not Found“.

Примечание

Система поиска должна обрабатывать строки "a    b""a b" и "a\nb" как одинаковые.

Пример

Ввод

# Пользовательский ввод:
Мама мыла РАМУ
first.txt
second.txt

# Содержимое файла first.txt
В этом файле говорится    о том что МАМА   

мылА
Раму

# Содержимое файла second.txt
А в этом не говорится

Вывод

first.txt

Ввод

# Пользовательский ввод:
Python
only_one_file.txt

# Содержимое файла only_one_file.txt
Тут нет никаких змей

Вывод

404. Not Found

Решение

В задании несколько “ловушек”.

Первое, нужно понимать, что могут встретиться конструкции когда между пробелами окажется ‘&nbsp‘ или ‘\n‘ и их надо корректно отработать.
Второе, при чтении по строкам важно отрезать лидирующие и конечные пробелы с помощью метода strip().
Третье. Нельзя забывать и о том, что содержимое файлов и строку поиска надо привести к одному регистру, а вот имена файлов трогать нельзя – там могут быть буквы в любом регистре.
Четвертое. Если вы знаете как работает поиск, то понимаете, что он ищет слова в любом порядке и допускает наличие любых других слов между искомыми. Так вот. В этой задаче это не так. Слова должны быть ровно в том порядке что даны и наличие между ними других слов недопустимо.

В остальном достаточно заменить все вхождения ‘&nbsp’ на пробел, а потом избавиться от знаков перевода строки и парных пробелов.

Посмотреть код

Решение

Python
from sys import stdin

search_for, *file_names = [string.strip() for string in stdin]

found = False

for file_name in file_names:
    with open(file_name, encoding='UTF-8') as file:
        data = ' '.join(file.read().replace(' ', ' ').lower().split())

        if search_for.lower() in data:
            print(file_name)
            found = True

if not found:
    print('404. Not Found')
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии