План этого занятия

  • импорт модулей стандартной библиотеки
  • пример использования функций
  • формат TSV

Импорт модулей

Питон включает в себя обширную библиотеку модулей, в которых реализовано множество полезных функций. В домашнем задании к прошлому семинару вы уже встречались с использованием модуля random, в котором содержаться функции для работы со случайными числами. Кроме того, далее в этом курсе мы будем применять и другие полезные модули: re для регулярных выражений, collections, содержащий множество удобных структур данных, os и shutil для управления файлами и папками.

Для использования модуля его нужно импортировать — попросить питон загрузить его и сделать его функции доступными для использования. Импорт осуществляется с помощью оператора import.

>>> import random
>>> # Теперь мы можем вызывать функции из модуля random, указав их имя после "random."
>>> random.randint(0, 5)  # выводит случайное целое число между 0 и 5 включительно
2
>>> random.choice('abcdef')  # выберает случайный элемент коллекции
'c'
>>> random.random()  # Выводит случайное число на полуинтервале [0, 1)
0.9131300358342321

Ещё один пример: модуль math, содержащий различные математические функции и константы

>>> math.cos(0)  # ошибка, модуль ещё не импортирован
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-4-9cdcc157d079> in <module>()
----> 1 math.cos(0)

NameError: name 'math' is not defined
>>> import math
>>> math.cos(0)
1.0
>>> math.asin(1)
1.5707963267948966
>>> math.e
2.718281828459045

Правило хорошего тона — импортировать модули вначале вашей программы, до любого другого кода и функций.

Задача: составление анаграмм

В качестве примера использования функций и модуля стандартной библиотеки random рассмотрим задачу составления анаграмм. В качестве входного файла будем использовать любой текст, из которого мы выберем слова. Пусть текст находится в файле text.txt и имеет следующее содержание (из Яндекс.Рефератов):

Субъект вызывает мелодический импульс. Пласт параллельно понимает понимающий
эриксоновский гипноз, следовательно тенденция к конформизму связана с менее
низким интеллектом. Дифференциация, по определению, дает звукорядный
бихевиоризм.

Задача состоит в том, что необходимо составить файл формата TSV, состоящий из 4 колонок: слово из файла и три его случайных анаграммы. Для простоты анаграммы могут совпадать с самим словом или друг с другом. В итоге требуется получить файл table.tsv, который будет начинаться следующим образом:

субъект	ъсукебт	кутесъб	кеубътс
вызывает	езтавыыв	аыезыввт	ывеаывзт
мелодический	скйчмеелидио	диимечеслйок	мкееийлчосид
импульс	млсупьи	уьмипсл	льмпиус
пласт	сатпл	таслп	тпалс
...

Полный код для решения этой задачи может выглядеть следующим образом:

"""Эта программа собирает слова из text.txt и составляет список анаграмм из
них в таблице table.tsv"""

# Здесь мы импортируем модуль стандартной библиотеки random, в котором
# содержаться функции для работы с псевдослучайными числами.
# Правило хорошего тона — делать все импорты в начале вашей программы.
import random


def words_from_file(filename):
    """Принимает имя файла, а точнее его системный путь, и возвращает
    список слов в нем
    """
    with open(filename, encoding='utf-8') as f:  # открвываем файл
        text = f.read()  # прочитываем весь файл в строковую переменную
    text = text.replace('-', '')  # удаляем дефисы
    text = text.replace(',', '').replace('.', '')  # удаляем запятые и точки
    # Тут можно было почистить текст еще лучше
    text = text.lower()  # заменяем все заглавные на строчные
    words = text.split()  # получаем список слов
    return words  # возвращаем список слов


def anа(word):
    """Возвращает случайную анаграмму word"""
    # Функция random.sample(sequence, count) возвращает список из count
    # уникальных элементов последовательности (например списка или строки)
    # взятых в случайном порядке. Заметим, что каждый элемент не может быть
    # больше одного раза, а также напомним, что элементами строки являются
    # односимвольные строки.
    a = random.sample(word, len(word))  # получаем список перемешанных букв
    new_word = ''.join(a)  # объединяем элементы списка из букв в одну строку
    return new_word  # возвращаем анаграмму


def create_tsv_table(table_filename, words, n_anа):
    """Создает TSV-файл с именем table_filename со строками типа
    слово→анаграмма→анаграмма,...
    где список слов задается аргументом words, а число анаграмм — n_ana
    """
    with open(table_filename, 'w', encoding='utf-8') as f:  # открываем файл для записи
        for x in words:  # перебираем слова в переменной x
            f.write(x)  # запишем слово в файл
            for i in range(n_ana):  # n_ana раз создадим и запишем анаграмму
                f.write('\t')  # запишем разделитель
                f.write(ana(x))  # запишем случайную анаграмму
            f.write('\n')  # не забудем поставить символ конца строки перед следующей строкой

def main():
    words = words_from_file('text.txt')  # получаем список слов
    create_tsv_table('table.tsv', words, 3)  # создаем таблицу с тремя анаграммами в каждой строке


if __name__ == '__main__':
    main()

Домашнее задание

Смотри предыдущий семинар


Улучшить эту страницу