Форум сайта python.su
Доброго времени суток! помогите с задачкой на Питоне пожалуйста…
Суть задачи в том, что есть два текстовых файла, состоящие из нескольких строк (слова разделены пробелами и табуляциями, которые не являются словами, т.е. слово не может быть нулевой длины). Нужно написать скрипт, который сравнивает эти два файла независимо от порядка слов, и выводит сообщение что файлы либо идентичны (т.е. в них одни и те же слова), либо нет. в случае если они не идентичны, вывести те слова что есть в первом, и нет во втором… и те, которые есть во втором, но нет в первом.
Реализовать нужно не сравнением строк, а как массив… т.е. использовать библиотеки.
файлы которые нужно сравнить лежат тут http://files.mail.ru/1EFLEZ (там три возможных варианта, с учетом равенства или неравенства файлов.
начала писать код, дошла до вывода элементов словарей и тут же начались проблемы… выводит не по русски в в виде символов.
# -*- coding: utf-8 -*-
import os;
import codecs;
dict1 = {}
with open ('01.txt','r') as f:
for str in f:
dict1[str.rstrip()] = 1
print dict1
dict2 = {}
with open ('02.txt','r') as f:
for str in f:
dict2[str.rstrip()] = 1
print dict2
Офлайн
Посмотрите на множества – set.
Офлайн
а без set это воплотить не реально? у меня не получается даже вывести по-русски словари… :(
я так поняла что нужно сравнивать каждую букву как элемент массива и искать пробелы как разделители слов… каким-то образом.
Офлайн
s1 = set(open('01.txt').read().split())
s2 = set(open('02.txt').read().split())
if s1==s2:
print 'equal'
else:
print " ".join(s1-s2)
print " ".join(s2-s1)
Офлайн
спасибо огромное!!! работает!
но все-таки вариант без использования set придется додумывать… будет громоздко конечно, но хотят чтобы не было встроенных функций… :(
Офлайн
murusэто не функция - это ТИП (type) данных
хотят чтобы не было встроенных функций…
>>> `set`
"<type 'set'>"
>>> `map`
'<built-in function map>'
>>>
Отредактировано (Янв. 26, 2011 20:43:08)
Офлайн
попробую доказать))) хотя split и join это ведь уже функции (или методы)?
в общем хочется узнать как это можно сделать в том числе и простым перебором))
Офлайн
set не просто входит в стандартную библиотеку питона, но и является встроенным типом, так же как dict, list и прочие. Т.е. если нельзя юзать set, то либо должно быть прямое указание на то, что можно юзать, либо это полный бред, ибо эти типы равнозначны с точки зрения “чтобы не было встроенных функций”.
Офлайн
join и split это не функции, а методы. Так что можешь не волноваться. :D
Офлайн
тогда уже и open на file заменить придется :)
Офлайн