Давайте вновь напишем небольшой компонент поисковой системы.
Формат ввода
Сначала вводится поисковый запрос.
Затем вводятся имена файлов, среди которых следует произвести поиск.
Формат вывода
Выведите все имена файлов, в которых есть поисковая строка без учета регистра и повторяющихся пробельных символов.
Если ни в одном файле информация не была найдена, выведите “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
Решение
В задании несколько “ловушек”.
Первое, нужно понимать, что могут встретиться конструкции когда между пробелами окажется ‘ ‘ или ‘\n‘ и их надо корректно отработать.
Второе, при чтении по строкам важно отрезать лидирующие и конечные пробелы с помощью метода strip().
Третье. Нельзя забывать и о том, что содержимое файлов и строку поиска надо привести к одному регистру, а вот имена файлов трогать нельзя – там могут быть буквы в любом регистре.
Четвертое. Если вы знаете как работает поиск, то понимаете, что он ищет слова в любом порядке и допускает наличие любых других слов между искомыми. Так вот. В этой задаче это не так. Слова должны быть ровно в том порядке что даны и наличие между ними других слов недопустимо.
В остальном достаточно заменить все вхождения ‘ ’ на пробел, а потом избавиться от знаков перевода строки и парных пробелов.
Посмотреть код
Решение
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())
## replace(' ', ' ') на самом деле это replace(' ', ' ')
if search_for.lower() in data:
print(file_name)
found = True
if not found:
print('404. Not Found')
В чём смысл replace(‘ ‘, ‘ ‘). ?
replace(‘ ‘, ‘ ‘) на самом деле это replace(‘ ’, ‘ ‘)
просто веб этот символ меняет на пробел
Здравствуйте, помогите понять почему не проходит проверку № 3 “WA”
from sys import stdin
search_query = input()
normal_search_query = search_query.lower()
Flag = False
for file_name in stdin.read().split():
with open(file_name, encoding=“UTF-8”) as file_in:
line = file_in.read()
normal_line = ” “.join(line.split()).lower()
result = all(word in normal_line for word in normal_search_query)
if result:
print(file_name)
Flag = True
if not Flag:
print(“404. Not Found”)
на мой взгляд основная проблема в этой строке:
по сути вы ищете буквы подстроки, а не подстроку.