Задачи: Списки, множества, словари
- Множества
- Дана строка. Вернуть множество из всех его символов.
- Дана строка (предложение). Вернуть множество из всех его слов (слова — это последовательность из непробельных символов).
- Даны две строки (два предложения). Вернуть список слов, которые встречаются и в первом, и во втором предложении.
- ищите совпадения слов, игнорируя регистр.
- [expr for x in list if condition].
Задачи этого раздела нужно решать только с помощью list comprehensions
- Дан список чисел, верните новый список, где все элементы возведены в квадрат.
- Дан список чисел, верните новый список, в котором из исходного списка удалены все четные элементы.
- Дан список строк, верните новый список, в котором все строки превращены в целые числа (используйте функцию
int
), но нужно проигнорировать те строки, которые не являеются числами. Например,['1', 'a', '42']
должно превратиться в[1, 42]
. Используйте методisdigit()
для строк, чтобы проверить, что строка состоит только из цифр. - Дан список, верните новый список, в котором каждый элемент повторен дважды. Например,
[1, 2, 'x']
->[1, 1, 2, 2, 'x', 'x']
- Решето эратосфена (простой, но не самый эффективный способ).
- Напишите функцию, которая по числу \(k\) и списку возвращает новый список, в котором удалены все элементы, делящиеся на \(k\).
- Дано \(n\). Создайте список
ints
чисел от 2 до \(n\) (оберните range в list). Пока список не пуст, доставайте из него первый элемент \(p\). Сохраните этот элемент в списокprimes
. Вызывайте предыдущую функцию:ints = filter_k(ints, p)
. Верните списокprimes
и проверьте, что это получились простые числа. Для реализации алгоритма вам понадобится циклwhile
.
- Дано число \(n\), создайте список из всех его положительных делителей. Для этого переберите все числа от 1 до \(n\).
- Эффективней перебирать числа от 1 до \(\sqrt{n}\), при этом, если получился делитель \(d\), то \(\frac{n}{d}\) это тоже делитель. Найдите список всех делителей этим способом.
- Проверьте число на простоту
- Проверка орфографии
Загрузите файл со списком английских слов, но пока не трогайте его: english_words.zip. А еще найдите (например, на сайте lib.ru) какой-нибудь длинный английский текст.
- Дано множество строк (орфографический словарь), это слова, которые мы будем считать орфографически правильными. Считаем, что эти слова все указаны в нижнем регистре. И дан список слов, которые надо проверить. Верните список слов, которые не нашлись в словаре. Например,
orpho_check({'a', 'b', 'c'}, ['a', 'bb', 'c', 'cc', 'bb']
должно вернуть['bb', 'cc', 'bb]
. - Дана строка, это текст на английском. Верните список слов в этом тексте. Используйте
split
без аргументов, чтобы разбить текст на слова по пробелам, переводам строк и другим пробельным символам, а потом используйтеstrip
, чтобы удалить все знаки препинания из конца и начала каждого слова. Эту функцию назовитеtokenize
. - Дано имя файла, это файл с орфографическим словарем. Верните список слов в этом файле. Каждое слово находится в отдельной строке. Убедитесь, что в списке у слов из словаря нет на конце символов переводра строк, и что все слова приведены к нижнему регистру. Назовите функцию
read_orpho_dict
. - Дано имя файла, прочитайте из него весь текст и верните список слов этого текста. Пользуйтесь уже реализованными функциями. Эту функцию назовите
tokenize_file
. -
Дано три имени файла. Имя файла со словарем, имя файла с текстом, имя файла для вывода результата. Прочитайте из первого файла словрь, из второго — слова. Распечатайте на экране все слова, которые не нашлись в орфографическом словаре, и выведите их же в файл с результатом. Т.е. на экране и в файле с результатом должен быть один и тот же список слов.
Теперь будем пытаться исправлять ошибки
- Дано слово, верните множество слов, которые получаются из исходного удалением одной из букв. Например, слово
ccat
должно превратиться в множество{'cat', 'cct', 'cca'}
. - Дано слово, верните множество слов, которые получаются из исходного слова дописыванием одной буквы. Например, слово
at
должно превратиться в множество{'aat', 'bat', 'cat', 'dat', ... , 'abt', 'act', 'adt', 'aet', ..., 'ata', 'atb', atc', ...}
. Чтобы это сделать, напишите в начале файлаfrom string import ascii_lowercase
, после чего вам становится доступна переменнаяascii_lowercase
, в которой находятся все буквы, и вы можете перебрать эти буквы в цикле. - Дано слово, верните можество слов, которые получаются из исходного слова перестановкой двух соседних букв. Например, слово
hello
должно превратиться в множество{'ehllo', 'hlelo
, ‘hello, 'jelol'}
. - Дано слово, и множество слов, являющееся орфографическим словарем. Верните множство слов, которые, во-первых, находятся в одном из множеств из трех предыдущих пунктов, а во-вторых, находятся в орфгорафическом словаре.
- Переделайте задачу 6 (дано три имени файла…) так: в файл и на экран выводятся все слова из исходного текста, по слову на отдельной строке. Но если слова нет в орфографическом словаре, то перед ним выводится восклицательный знак, а после него в строке выводятся все варианты замены этого слова на правильные.
- Дано множество строк (орфографический словарь), это слова, которые мы будем считать орфографически правильными. Считаем, что эти слова все указаны в нижнем регистре. И дан список слов, которые надо проверить. Верните список слов, которые не нашлись в словаре. Например,
- Словари
- Дан словарь, который сопоставляет некоторым символам некоторые строки. Например,
{'a': 'xyz', 'b': '123'}
. Кроме того, дана строка. Замените каждый символ строки на то, что указано для него в словаре, либо оставьте его, каким он был. Например,'abc'
должно замениться на'xyz123c'
. Попробуйте решить не очень длинно, как-нибудь через list comprehension. - Дана строка, верните словарь, в котором для каждого символа строки указано, сколько раз он встретился в строке. Например,
banana
должно превратиться в {‘b’: 1, ‘a’: 3, ‘n’: 2} - Дан текст, верните словарь, в котором для каждого слова текста (используйте реализованную вами ранее функцию
tokenize
) указано, сколько раз оно встретилось в тексте. -
Дано два имени файла. Из первого файла прочитайте текст, приведите его к нижнему регистру, и с помощью предущей функции получите частотный словрь слов. Выведите этот словарь во второй файл следующим образом. Кодировку используйте cp1251, в каждой строке пишите сначла слово, потом точку с запятой, потом частоту. Например
кот;10 коза;20 кабан;5
Если у выходного файла будет расширение csv, его можно будет открыть в Excel.
- Дан словарь, который сопоставляет некоторым символам некоторые строки. Например,