Напишите программу, которая определяет, какие слова есть только в одном из файлов.
Формат ввода
Пользователь вводит три имени файлов.
Каждый из входных файлов содержит произвольное количество слов, разделённых пробелами и символами перевода строки.
Формат вывода
В третий файл выведите в алфавитном порядке без повторений список слов, которые есть только в одном из файлов.
Пример
Ввод
# Пользовательский ввод:
first.txt
second.txt
answer.txt
# Содержимое файла first.txt
кофе молоко
чай печенье
велосипед
# Содержимое файла second.txt
кофе велосипед
пряник жвачка весло
Вывод
# Содержимое файла answer.txt
весло
жвачка
молоко
печенье
пряник
чай
Решение
Читаем первые два файла, получаем множество слов. Вспоминаем операции с множествами и получаем симметрическую разность двух множеств. Записываем ответ в файл.
Посмотреть код
Решение
Python
file_1 = input()
file_2 = input()
file_out = input()
with open(file_1, encoding='UTF-8') as file_in:
items_1 = set([item for item in file_in.read().split()])
with open(file_2, encoding='UTF-8') as file_in:
items_2 = set([item for item in file_in.read().split()])
unique = items_1 ^ items_2
with open(file_out, 'w', encoding='UTF-8') as file_name:
print('\n'.join(sorted(unique)), file=file_name)
Добрый день, подскажите, пожалуйста, а символы переноса строки есть в исходных файлах, а то Вы не используете rstrip и всё равно всё ок.
Сложно предугадать как конкретно решали эту задачу вы, поэтому расскажу абстрактно.
Все дело в том, как читать файлы. Их можно читать посимвольно, построчно, а можно целиком
Когда читаете посимвольно, вы получаете абсолютно все символы, включая ‘\n’ одним потоком. Вы можете накапливать слово по признаку “встретил пробельный символ” и как только такой символ найден или закончился файл записывать все накопленное в список слов, если накопленное не пустое. пробельные символя, это знакомые вам табуляция, перевод строки, пробел и несколько спецсимволов. Примерно таким образом устроен алгоритм функции split, если вызвать его без параметров.
Можно прочитать весь файл одной очень длинной строкой (как это сделано у меня) и тогда строка может выглядеть так –
Далее, с помощью функции split() (обязательно без параметров) вы делите эту строку на части именно по признаку “пробельных символов”. После того как отработает split, вы получаете на выходе просто список слов и знаков, которые были разделены любыми типами и пробельных символов. В нашем примере это будет [‘Это’, ‘текст.’ ‘С’, ‘переносом’, ‘строки’, ‘и’, ‘табуляцией’].
Можно прочитать файл построчно. Тогда каждая строка будет заканчиваться ‘\n’. В этом сценарии, если вы пользуетесь split без параметров избавляться в каждой строке от ‘\n’ так же нет необходимости – split обо все позаботится.
Спасибо за исчерпывающий ответ!