Программирование (осень 2011)

Задания

К 14 сентября 2011 (последний срок сдачи 28 сентября):

  • Научиться работать с Python и писать простые программы.
  • Пользователем задаётся строка. Перевести все маленькие буквы (нижнего регистра) в соответствующие большие буквы (верхнего регистра), а большие в маленькие. Вывести результирующую строку.
  • Решите третью, девятую и двадцатую задачи с Project Euler. Там можно зарегистрироваться и проверить ответ.

К 28 сентября 2011 (последний срок сдачи 5 октября):

  • Задан словарь d и именами и оценками, например d = {'Kolya': 2, 'Vasya': 5}. Вывести имя ученика с максимальной оценкой (если таких много, то любого одного).
  • Напишите функцию, которая принимает в качестве аргумента словарь, а возвращает "перевёрнутый" словарь. То есть, меняет местами ключ и значение. В случае неоднозначности можно выбрать любое значение. Таким образом, словарь {'Kolya': 2, 'Vasya': 5, 'Petya': 5} станет, например, словарём {2: 'Kolya', 5: 'Petya'}.
  • Решите сорок пятую, двадцать восьмую и восемнадцатую задачи с Project Euler. Там можно зарегистрироваться и проверить ответ.

21 сентября занятий не будет (только у моей подргуппы)! Просьба распространить информацию одноподгруппникам!

Темы докладов:

  • 19 октября: Котельников - numpy, scipy +
  • 19 октября: Шкуратов - matplotlib +
  • 02 октября: Котельников - scipy +
  • 02 октября: Безинова - re +
  • 02 октября: Искандерова - PIL +
  • 09 ноября: Квашина - pygame, PyOpenGL +
  • 09 ноября: Тихонова - PyQt, PyGTK +
  • 16 ноября: Дудырев - sqllite, databases with Python +
  • 16 ноября: Николаев - urllib, httplib, socket +
  • 25 ноября: Севостьянов - django +

К 5 октября 2011 (последний срок сдачи 19 октября):

  • Решите шестьдесят судьмую задачу с Project Euler. Там можно зарегистрироваться и проверить ответ.
  • В файле input.txt задана некоторая таблица в формате CSV. Необходимо отсортировать данные, содержащиеся в ней, по первой колонке и вывести в файл output.txt.

К 19 октября 2011 (последний срок сдачи 2 ноября):

  • Реализовать функцию binary_search(ls, x), возвращающую позицию найденного элемента или None, если такого элемента нет в списке.
  • Реализовать функцию quick_sort(ls).
  • Реализовать функцию merge_sort(ls).

26 октября занятий не будет, так как у вас медосмотр.

К 26 октября 2011 (последний срок сдачи 9 ноября):

  • В первой строке файла задано число N, в последующих N строках задано по N чисел. Таким образом, во входном файле содержится квадратная матрица N*N (и её размер первой строкой). Необходимо вычислить и вывести на экран определитель матрицы. Пример ввода:
    3
    1 0 0 
    0 1 0
    0 0 1
  • Реализовать структуру данных "хеш-таблица", функции insert(key, value), find(key), erase(key).
  • Реализовать класс Node бинарного дерева с выделенным корнем.

К 16 ноября 2011 (последний срок сдачи 23 ноября):

  • К реализованному классу Node добавить функции dfs() и bfs(), печатающие дерево соответствующим обходом в глубину или в ширину (+ вершина печатается всегда раньше своих детей).
  • Реализовать класс Search_Tree_Node, аналогичный классу Node, конструирующийся дерево поиска для переданного (в конструктор) списка. Реализовать в этом классе метод find(x), возвращающий True/False в зависимости от наличия элемента x в данном дереве. Перед тем, как делать это задание, почитайте про наследование в Python (мы поговорим об этом на занятии 2-ого ноября).
  • Реализовать класс queue с методами pop_left(), push_right() и empty(). Его следует реализовывать на основе списка (циклического).

16 ноября 2011 состоится письменная контрольная на 40 минут на 2-ой паре на листочках. По всему изученному материалу (синтаксис Python, структуры данных, алгоритмы, ООП).

К 16 ноября 2011 (последний срок сдачи 23 ноября):

  • Написать функцию проверки строки на соответствие телефонному номеру в России (с кодом страны и города, т.е. как в сотовых телефонах). Учтите разные (все возможные) форматы написания телефонов.
  • Написать функцию, создающую миниатюры для всех изображений (png, gif, jpg) в текущей папке (где запущен скрипт), размером 100х100 пикселей. Например, был большой pic.jpg, появится pic_small.jpg размером 100х100. Используйте библиотеки os (для получения списка файлов) и PIL (для работы с изображениями).
  • Пройти http://www.pythonchallenge.com/ до 4-ого уровня включительно (и показать на занятии код, как это было сделано).

К 30 ноября 2011 (последний срок сдачи 30 ноября):

  • Написать браузер со строкой ввода URL, кнопкой "Перейти" и полем, где показывается содержимое страницы (просто в текстовом виде, без визуализации HTML разметки). В качестве библиотеки для окон можно использовать Tkinter, PyGTK, PyQt.

К 7 декабря 2011:

  • Добавить в браузер сохранение истории посещённых страниц (в sqlite3, файл на диске) и отображение этой истории в интерфейсе. При последующем открытии программы можно перейти на ранее посещённые страницы.
  • При открытии страницы изменять заголовок окна в соответствии с содержимом тега <title>...</title> открытой страницы.

К 14 декабря 2011:

  • Добавить в браузер возможность перехода по ссылкам <a href="http://example.com">go there</a>
  • ...

21 декабря 2011 (последнее занятие) состоится письменная контрольная на 1.5 часа на 2-ой паре на листочках. По всему изученному материалу.