Билеты
Критерии оценки.
6 баллов и выше:
- решение выполняет задачу, описанную в условиях
- решение работает
8 баллов и выше:
- решение выложено в репозиторий homework на bitbucket
9 баллов и выше:
- код оформлен правильно:
- у всех сущностей грамотные, понятные, содержательные названия
- понятная (однородная) схема именования каждого рода сущностей
- все функции не длиннее 10 строк
- ни одна функция не делает более одного дела, и это дело указано в названии функции
- нет строк длиннее 75 символов
- понятная (однородная) схема расстановки пробелов внутри строк
- функции и классы отделены друг от друга пустой строкой
- если программе необходимы глобальные переменные, программа использует необходимый минимум переменных, слово global в каждой функции, использующей их, стоит первой строкой
части кода расположены стандартным образом: импорты -> константы -> определения функций и классов -> if __name__ == '__main__'
- нет дублирующихся частей кода
- модуль, все классы, все функции сопровождаются документацией docstring
- все функции, для которых это возможно, сопровождаются примерами, которые проходят проверку doctest
- в программе предусмотрен вызов doctest
Тема 1. Графические интерфейсы
Варианты:
- Напишите графическую программу для подсчёта числа строк в файле. Интерфейс программы состоит из кнопки для вызова диалога выбора файла и поля вывода ответа. Если пользователь выбрал файл, то поле вывода ответа заполняется сразу, если пользователь не выбрал файл, в поле вывода ответа заполняется прочерк.
Напишите графическую программу для тестирования регулярных выражений. Интерфейс программы состоит из текстового поля (Text), двух строковых полей: для ввода регулярного выражения и строки подстановки, и кнопки "замена". При нажатии на кнопку программа заменяет в тексте все вхождения регулярного выражения на строку подстановки.
- Напишите графическую программу для рисования многоугольников. Интерфейс программы состоит из полотна и кнопки "next". Программа может находиться в двух состояниях: в процессе рисования многоугольника и в начале рисования. Если программа находится в начале рисования, то в ответ на клик пользователя по полотну программа рисует в месте клика жирную точку, запоминает её координаты как координаты первой точки многоугольника и как координаты последней точки многоугольника, и переходит в состояние рисования. Если программа находится в процессе рисования, то в ответ на клик пользователя программа соединяет линией последнюю поставленную пользователем точку с местом клика и запоминает текущие координаты клика. При нажатии на кнопку "next" программа завершает многоугольник (т.е. соединяет последнюю точку многоугольника с первой линией) и переходит в состояние начала рисования.
Тема 2. Добывание данных из сети
Варианты:
Напишите программу для получения списка ссылок. В теле программы указан адрес сайта. Программа проверяет возможность скачивания сайта по адресу. Если скачивать запрещено, программа сообщает об этом пользователю и выходит. Программа скачивает страницу по заданному адресу, извлекает из её тела все тэги <a>, из них извлекает значение атрибута href и печатает получившийся список адресов.
Напишите программу для получения списка заголовков сайтов. В теле программы указан список адресов сайтов. Для каждого адреса из списка программа проверяет возможность скачивания сайта по адресу, и если это возможно, скачивает сайт, извлекает из него содержимое первого тэга <title> и выводит на экран вместе с адресом сайта.
Тема 3. Классы и исключения
Варианты:
Напишите графическую программу, которая позволяет перетаскивать кружочки. Интерфейс программы состоит из одного полотна, на котором изначально нарисовано 10 кружочков разных цветов. При нажатии мышью (<B1-ButtonPress>) на кружок программа запоминает его как активный. При движении мышью (<B1-Motion>) программа перерисовывает его с центром в точке, указываемой мышью. При отпускании кружка (<B1-ButtonRelease>) программа перестаёт считать кружок активным. Если пользователь нажал на стопку из нескольких кружков, программа помечает активным только один из них.
Напишите программу, которая транспонирует матрицу, т.е. выводит её по столбцам. Матрица задана в тексте программы в виде списка списков (построчно). Программа должна корректно работать в случае, если в разных строках входной матрицы задано разное количество ячеек. Пустые ячейки программа должна заменять нулями. Допустимо предположение, что первая строка самая длинная. Программа не должна содержать оператор if.
Тема 4. Алгоритмы
Варианты:
Дан текст, разбитый на токены. Для каждого токена дан список возможных лемм, которые могут этот токен породить. Напишите программу, которая построит все возможные последовательности лемм, которые порождали бы такой текст. В теле программы задан список позиций, где каждая позиция представлена списком лемм, порождающих эту позицию. (Пример: text = [[u'мама', u'мам'], [u'мыло', u'мыть'], [u'рама', u'рам']])
- Дан набор биграмм, построенных по корпусу. Нужно ответить на вопрос: есть ли в корпусе слова, которые никогда не могут встретиться в предложении несколько слов спустя после слова "дядя". Для этого нужно представить биграммы в виде ориентированного графа, построить компоненту связности в этом графе, начинающуюся со слова "дядя", и ответить на вопрос: есть ли вершины, не вошедшие в эту компоненту связности. Набор биграмм представлен в виде файла, в котором на каждой строке указаны два слова.