Множества

Базовые задачи

  1. Дана строка. Вернуть множество из всех его символов.
  2. Дана строка и множество символов. Удалите из строки все символы из множества. Например, если дана строка "hello world" и множество {'h', 'l', 'x'}, вы должны вернуть строку "eo word". Потому что символы 'h' и 'l' удаляются.
    • Алгоритм решения. Перебирайте все символы строки; создайте список, заполненный символами, которых нет в множестве; превратите список обратно в строку с помощью функции join.
  3. Дана строка, содержащая текст. Вернуть список из всех его слов. Слово — это последовательность из непробельных символов, в которых в начале и конце нет знаков препинания. Но они могут быть внутри слова, например, «сине-зеленый». Алгоритм:
    • Чтобы получить все знаки препинания, напишите в начале файла import string и используйте константу string.punctuation. Это строка, содержащая все знаки препинания.
    • Используйте функцию .strip, которая удаляет указанные символы из начала и конца строки.
    1. Даны две строки, каждая содержит текст. Вернуть множество слов, которые встречаются и в первом, и во втором предложении. Используйте предыдущую задачу для разделения текста на слова.
    2. Аналогично, но нужно искать совпадения слов, игнорируя регистр.

Проверка орфографии

Загрузите файл со списком английских слов, но пока не трогайте его: english_words.zip. А еще найдите какой-нибудь длинный английский текст, например, скопируйте его с любимого сайта.

  1. Дано имя файла с орфографическим словарем, фактически, вам будет дан загруженный ранее файл words_alpha. Он состоит только из орфографически корректных слов. Они сразу же даны в нижнем регистре, их не нужно преобразовывать. Верните множество слов из этого файла.
  2. Дано два имени файла. Файл со словарем, файл с текстом. Прочитайте из первого файла словарь с помощью предыдущей задачи. Прочитайте из второго файла список всех слов. Для этого вы тоже решали задачу выше. Распечатайте на экране все слова, которые не нашлись в орфографическом словаре. При проверке слова приводите его к нижнему регистру, но распечатывать неправильное слово надо в исходной форме, без приведения к нижнему регистру.
  3. Исправьте предыдущую задачу, чтобы в нее передавалось имя еще одного файла для вывода результата. Сделайте так, чтобы при распечатке слова на экран оно точно так же печаталось бы в файл. Соответственно, на экране и в файле с результатом должно быть распечатано одно и то же, с точностью до символа.

    Теперь будем пытаться исправлять ошибки

  4. Дано слово, верните множество слов, которые получаются из исходного удалением одной из букв. Например, слово ccat должно превратиться в множество {'cat', 'cct', 'cca'}.
  5. Дано слово, верните множество слов, которые получаются из исходного слова дописыванием одной буквы. Например, слово at должно превратиться в множество {'aat', 'bat', 'cat', 'dat', ... , 'abt', 'act', 'adt', 'aet', ..., 'ata', 'atb', atc', ...}. Чтобы это сделать, убедитесь, что в начале файла написано import string, после чего вам становится доступна константа string.ascii_lowercase, в которой находятся все буквы, и вы можете перебрать эти буквы в цикле.
  6. Дано слово, верните множество слов, которые получаются из исходного слова перестановкой двух соседних букв. Например, слово hello должно превратиться в множество {'ehllo', 'hlelo', 'hello', 'helol'}.
  7. Дано слово, и множество слов, являющееся орфографическим словарем. Верните множество слов, которые, во-первых, находятся в одном из множеств из трех предыдущих пунктов, а во-вторых, находятся в орфографическом словаре.
  8. Решите задачу 2 или 3 про проверку орфографии, но со следующим исправлением: в файл и на экран выводятся все слова из исходного текста, по слову на отдельной строке. Но если слова нет в орфографическом словаре, то перед ним выводится восклицательный знак, а после него в строке выводятся все варианты замены этого слова на правильные.