Учебная страница курса биоинформатики,
год поступления 2013
Практикум 7. Задания
Результатом этого задания является два скрипта на языке Python, в которых реализован перечисленный в заданиях 1 и 2 функционал, и файл с последовательностями <Familiya>_pr7_proteins.fasta, где <Familiya>, как обычно, Ваша фамилия. Скрипты и fasta-файл должны быть положены в папку зачетных заданий до 23:59 дня накануне следующего занятия.
Внимание! Как и раньше, имя скрипта должны быть в том же формате, что и названия протоколов. Поскольку от Вас требуется два файла, в конце имени (до расширения!) после знака подчеркивания проставляйте номер (scrNN, где scr - сокращение от английского слова script, а NN - двухзначный порядковый номер скрипта). Например, Dibrova_pr7_scr01.py и Dibrova_pr7_scr02.py.
Не забывайте смотреть подсказки по python, в которые добавлены пояснения по тем разделам, которые введены на этом занятии. В презентации тоже есть много примеров. И не стесняйтесь спрашивать преподавателей, если что-то не получается!
Акция "Ошибайтесь и получайте бонусные баллы!" продолжается! Как? Посмотрите необязательное задание №4 уже сейчас! Также бонусные баллы начисляются за правильное название функций и переменных; за комментарии в теле скрипта и за комментирование функций.
Обязательные задания
Задание 1. Создайте скрипт, задающий класс, который описывает какой-нибудь объект в мире
Этот скрипт должен называться <Familiya>_pr7_scr01.py, где <Familiya> – Ваша фамилия в том же написании, что и раньше.
Цель: выберите любой предмет реального (или фантастического) мира и создайте класс, который будет описывать такие предметы (частично описывать, конечно) в скрипте. Требования:
- Имя класса должно быть названием данного предмета на английском языке (не на транслите). Пользуйтесь словарями или спросите у преподавателя, как называется этот предмет по-английски.
Если класс описывает предметы из фантастического мира, то обязательно создайте комментарий в скрипте, объясняющий что это за зверь такой
- В классе должно быть минимум 3 переменных-члена (атрибута) и минимум 2 функции-члена (метода).
- Помимо этих двух функций-членов, в классе должна быть инициализирующая функция.
После задания класса убедитесь, что он работает. Для этого:
- Создайте четыре экземпляра класса с разными атрибутами;
- Поместите эти экземпляры в список;
- Пройдите по списку и заставьте каждый экземпляр вызывать свои методы; проверьте, что получается.
Задание 2. Напишите скрипт, читающий файл в формате fasta с несколькими последовательностями и печатающий эти последовательности на экран
Этот скрипт должен называться <Familiya>_pr7_scr02.py, где <Familiya> – Ваша фамилия в том же написании, что и раньше.
Цель: создайте скрипт, умеющий читать fasta-файл и сохранять в память информацию о последовательностях нескольких белков, содержащихся в прочитанном файле.
2.1. Подготовка fasta-файла с несколькими последовательностями
Примечание: если в одном файле сохранены несколько последовательностей, каждая из которых имеет формат fasta, и не содержится никакой другой информации (кроме пустых строк) – то такой файл тоже считается файлом в формате fasta. Например:
>protein1 My good protein MTSKLLVSTFGGTRYH THGYF >protein2 The best protein! [user1] MHGTSDERFRYH GTRY FGTRG >protein3 The very best protein!! [user2] MAAAAFRTYING
Составьте файл, включающий последовательность Вашего белка и последовательности белков трех других студентов, выбранных случайным образом и приведенных в таблице 1. В этой таблице в соответствующей Вам строке приведены ники тех студентов, чьи белки Вам необходимо взять. Чтобы это сделать:
Создайте новый файл, назовите его <Familiya>_pr7_proteins.fasta, где <Familiya> - Ваша фамилия.
Скопируйте в него последовательность Вашего белка в fasta-формате (то есть вместе со строкой ">name Description").
Войдите на сервер kodomo через NetBox, так же, как входили на сервера NCBI (или как входите обычно из дома), указав:
File protocol: SCP,
Host name: kodomo.fbb.msu.ru,
Login type: Normal,
логин и пароль – Ваши обычные.
- Перейдите в родительскую директорию по отношению к Вашей домашней. Там Вы увидите список ников студентов.
Зайдите в директории term1/block1/credits/ тех студентов, которые даны Вам в таблице, и cкопируйте последовательности их белков в fasta-формате в файл, созданный в пункте 1. Добавьте в конец описания каждой скопированной последовательности через пробел в квадратных скобках ник того студента, у которого она взята.
- Если нужного файла у кого-то из Ваших коллег нет, то выберите себе любого другого студента.
2.2. Написание скрипта
При выполнении данного задания приветствуется использование перекомпонованных функций из предыдущего практикума: не зря же Вы их писали! Примерный алгоритм, которым можно решить эту задачу, приведен в советах по этому заданию. Следовать ему, разумеется, не обязательно; можете придумать и свой вариант! Скрипт должен делать следующее:
Задавать новый класс Protein, описывающий один белок. В справочной информации по классам рассказывается с примерами о том, как задать класс, его атрибуты и методы. Этот класс должен содержать:
атрибуты, хранящие идентификатор (id_RefSeq), описание (description) и последовательность (sequence) белка;
инициализирующий метод (в этом разделе справки по Python находится объяснение того, что это такое и как его задать);
- метод, позволяющий напечатать на экран информацию о данном белке в формате fasta с заданным числом букв в строке последовательности.
Открывать Ваш файл <Familiya>_pr7_proteins.fasta, где <Familiya> - Ваша фамилия (конкретное имя задайте в одной из переменных в теле скрипта), и обрабатывать его построчно. Про то, как это сделать, читайте в этом разделе справки по Python.
Сохранять информацию о последовательностях в список объектов класса, заданного в начале скрипта. Про списки и строки вообще читайте тут, про методы, связанные со строками, – тут, а про методы, связанные со списками, – тут.
- Проходить по списку белков и вызывать их методы, печатающие информацию в fasta-формате на экран с любой выбранной Вами длиной строки последовательности.
Необязательные задания (на дополнительные баллы)
Задание 3*. Получение параметров скрипта из командной строки
Пользуясь справочной информацией, сделайте так, чтобы скрипт получал имя fasta-файла и количество букв, которые нужно выводить на экран, из командной строки.
Скрипт должен получать из командной строки два аргумента: первый – имя файла, который будет читаться, второй – количество букв в строке при распечатке последовательностей в fasta-формате;
Проверять, что получено два аргумента: если их получено меньше или больше, скрипт должен выдать на экран текст, сообщающий пользователю, какие аргументы требуется ввести, и завершить работу. В разделе подсказок 4.8 написано, как можно завершить работу своего скрипта с помощью команды.
Задание 4*. Коллекционер и победитель ошибок (продолжение)
Соберите коллекцию ошибок Вашего скрипта, с которыми Вы столкнулись в процессе работы. Предоставьте в папке credits второго блока протокол с обычным именем (например, Dibrova_pr7.doc), в котором будет приведена следующая информация об ошибках. Протокол оформите в удобном для Вас формате, но чтобы было понятно, что происходит. Про каждый случай укажите:
Ошибка, выданная Python (чтобы получить текст ошибки в текстовый файл, а не просто на экран, воспользуйтесь подсказками к занятию 5).
- Место в скрипте, вызвавшее ошибку (та строчка или строчки, из-за которых все пошло наперекосяк).
- Объяснение, что именно неверно.
- Исправленная, работающая версия.
P.S. Ошибки в протоколах за практикумы 5, 6 и 7 не должны повторяться. Задание называется "Коллекционер и победитель ошибок", а не "Любитель гулять по граблям"