Вопросы для зачёта
- какая область применения питона. (e.g. для малых программ, для средних программ, для больших программ; для подножного программирования, для параллельного программирования, для тематического (e.g. molbiol) программирования).
Ещё задачки
Проверка наличия выравнивания. Дано: выравнивание, матрица соответствий -> вес, порог что считается выравниванием. Ответ: да / нет.
- Дано PDB файл, спецификация подмножества (e.g. список диапазонов resn+chain). Выдача: урезанный PDB файл.
- select hbonds (selection) для pymol
Полезные задачи
- из серии "учимся программировать":
найти максимальный элемент в списка, посчитать сумму элементов списка, ..., то же только для элементов с чётными номерами, с нечётными номерами, для чётных элементов; найти сумму элементов массива, расположенных между первым и вторым отрицательным элементом; сделать из списка l новый список, в котором сначала идут все элементы l < 0, потом >= 0; сдвинуть в списке элементы по циклу на n
- проверить связность графа
- численное интегрирование + пример использования: полукруг, число пи через полукруг, фрагмент синусоиды, прямоугольник
- посчитать НОД двух чисел алгоритмом Евклида
- заданы параметры квадратного уравнения, вернуть список его корней
- посчитать факториал
- посчитать список всех делителей числа; список всех простых делителей числа
- упорядочить строки матрицы (список строк = списков) в порядке возрастания минимальных элементов в строке; упорядочить столбцы в порядке возрастания минимальных элементов в столбце
- из серии "работа с файлом, с текстом, командной строкой, вебом, ...":
- прочитать файл a, заменить все пробелы на табуляции, записать в файл б
- прочитать файл, саменить в каждой строке символы с 10 по 13 на табуляцию
- записать в файл f n случайных чисел с равномерным распределением в диапазоне от 9 до 10, по одному числу на строке
- прочитать из файла числа (по одному числу на строке), вывести на экран, вывести на экран сумму
- в строке найти самое длинное слово, посчитать количество его вхождений в строку
- из серии "pymol, biopython/scipy/, ...":
- из серии "ООП, тестирование, утки, модули":
- сделать объект "список чисел", который умеет записывать себя в файл, загружаться из файла
- сделать объект односвязный список
Обучение Оли:
- Калькулятор, print
Функция (тяжко, лучше слово "подпрограмма", ещё лучше перенести на позже), список, цикл, переменная; как пользоваться конструкцией for для разных задач (в обратном порядке, только чётные, ... ?); Задачи: написать функцию, находит в списке максимум; куча почти одинаковых функций (по образу и подобию функции разворота списка) – скажите, что они делают (кажется, это было очень полезно)
- sys.argv, работа с файлом (open, read, write); Задача: написать программу, которая получает два имени файла, открывает первый на чтение, заменяет в каждой строке позиции 47-49 на табуляцию и пишет во второй.
- Задача: написать программу, которая меняет порядок строк в файле (имена входного и выходного файла в sys.argv)
- Поиск информации (сайт, help). Самодокументация к функциям. optparse, shutil.copy, os.path.join. Как пользоваться исключениями в самом простом случае (без объяснения, что такое исключение). str.strip с примером использования. Задача: в пустой директории лежит файл со списком имён; написать программу, которая получает в качестве аргументов этот файл, путь к некоторой другой директории и список возможных расширений; для каждого имени из входного файла программа копирует в текущую директорию все файлы с этим именем и каждым из указанных расширений из заданной в аргументах директории; если скопировать не удалось, сообщает на экран
Задача: написать программу, которая читает PDB, оставляет только те модели, в которых больше заданного числа атомов принадлежат нуклеотидам, пишет результат в PDB; новые конструкции: while, break, True, False; функции has_dna(model), extract_model(file), write_model(model, file); прививаю привычку выделять функции (довольно успешно); самая большая проблема – extract_model; даже после написания проблема понять, почему два вызова подряд возвращают первую и вторую модель; итоговая реплика "так надо было говорить, что for line in file не перебирает каждую строку, а очередную, т.е. не перематывает файл"
Обучение Светы:
- Теория: типы (числа, строки, списки, кортежи), функции, слайсы, операция % для строк, range, help, sys.argv, os.path.join, os.listdir, shutil.copy. Задача: из заданной директории скопировать каждый третий файл.
План
Вводные слова. Поиск документации. Простая арифметика. Строки. Списки. // str.join; str.split; str.slice; list.slice; int(str); str(int); str.mul; str.center; help(str); str.replace; str.mod; list.sort; file
- Репозиторий. if, for, def. Каркас программы. // range; python-scientific: Vector; urllib2; sys.stdin, sys.stdout; filter(None, ...); optparse; doctest; darcs/git; in, not in;
- (практическое занятие)
- Объекты. Классы.
- Исключения.
- for line in file:
PyMol: скрипты в python, определение своих команд.
- Новое про списки (присваивание фрагментов). Конструкции повышенной выразительности (list comprehensions, lambda, filter, map, reduce). Самодельные функции высшего порядка.
- Сложное про строки. Типы строк (префиксы, str vs unicode). Кодировки. Регулярные выражения.
- изменение списков
- range vs xrange
- psyco
- файлы настроек (import)
- tk или gtk
- остаток про функции: default=value, *args, **kw
Подход
Вспомогательный материал (ссылки на будущие лекции, прикладные сущности, не упомянутые в плане) составляют бОльшую часть лекции.
Подход
Делать один большой совместный проект.
- - Очень зависит от количества людей.
- - У разных участников выходит разный опыт.
Компромиссный вариант: разбивать участников на маленькие группы. (Скорее всего, так и будет).
Подход
Идти вокруг идеи уровней языка.
Уровень языка – это немного новых конструкций / концепций / идей + много готовых реализаций концепций и идей, которые можно было сделать и на предыдущем уровне.
Уровни:
- ???
Trivia
Префиксы строк для путей и регулярных выражений: r""
- Работа с кодировками, что рассказывать?:
str.encode, str.decode – MUST
# coding: – упомянуть?
- Представление о понятии namespace
чтение глобальных переменных и переменных класса – MUST
- запись глобальных переменных
лексическое vs динамическое связывание, понятие об устройстве интерпретатора – х.з.
http://pythonchallenge.com – х.з.
psyco – минимум, упомянуть
Что я хочу иметь на выходе
поиск документации
документирование своего кода на уровне привычки
работа с файлами, разбор и генерация полупростых форматов
основной pymol
- оперирование стандартными типами данных (str, unicode, int, float, dict, tuple, list) на достаточно продвинутом уровне
- разбор аргументов командной строки
- представление об исключениях
- владение регулярными выражениями, их применением в Python
- работа с вебом в обе стороны
ui (tk? gtk?) – х.з.
- методы отладки:
- привычка к отладочной печати
- подгрузка модуля из интерпретатора, ручное тестирование (с переходом в doctest)
- boilerplate модуля, самостоятельной программы:
- что делать с настройками (min: выносить в начало метода, класса, модуля; max: как выносить в файл)
name == "main"
- doctest
- идея автовсячины (for i in vars(self): и тому подобное)
- понятие объекта как freeform структуры
del – MUST
- dir
dict, vars() – х.з.
hasattr, delattr, getattr, setattr – х.з.
- понятие класса
@staticmethod, @classmethod – х.з.
property – х.з.
программирование @ – х.з.
private attrs – х.з.
- понятие "языкового протокола", "специальных аттрибутов"; где и как их узнавать
- минимальное представление о наследованиии и множественном наследовании, готовые решения для стандартных проблем:
- ручной вызов конструкторов предков
классы, подразумевающие отсутствие init в потомках
Полезные ссылки