Учебная страница курса биоинформатики,
год поступления 2017
Практикум 9. Модули и словари
Зачётный минимум — шесть баллов. Файлы называйте pr9_mnemonics.py и кладите в папку credits. Срок: утро 17 ноября. Сделавшим правильно задачу 6 к утру 10 ноября даются дополнительные три балла в рейтинг.
Начиная с этого практикума, будет проверяться не только корректность работы программы, но и его соответствие рекомендациям PEP8 (см. также оригинальный английский текст). Для зачёта соблюдение стандарта не обязательно, но рейтинговые баллы за плохой код могут быть снижены до минимума.
См. советы и подсказки.
1. Тригонометрия. Мнемоника: trigonometry. Баллы: 1.
Программа принимает угол в градусах и печатает его синус и косинус с четырьмя знаками после запятой. Значение угла может быть любым вещественным числом.
Пример вызова программы:
python pr9_trigonometry.py 90
Пример выдачи:
1.0000 0.0000
Подключите модуль math. С помощью dir и help узнайте, как переводить из градусов в радианы и как вызываются синус и косинус. В подсказках см., как отформатировать действительное число с нужным количеством знаков после запятой.
2. Случайная последовательность. Мнемоника: randomdna. Баллы: 1 или 2.
Для тестирования различных методов обработки биологических последовательностей часто применяют случайные последовательности. Самый простой способ создать случайную последовательность — это выбирать на каждую позицию последовательности случайную букву (одну из A, T, G, C) с равной вероятностью.
Программа принимает в командной строке длину последовательности и создаёт файл randomseq.fasta, в который пишет случайную последовательность заданной длины с именем "random" и без описания (вспоминайте fasta-формат!).
Пример вызова:
python pr9_randomdna.py 10
Пример содержимого файла randomseq.fasta, сформированного программой:
>random CATCAGGGAC
Два балла вместо одного, если после каждого n-го символа последовательности в файле начинается новая строка (n передается опционально вторым аргументом командной строки).
3. Числа Фибоначчи. Мнемоника: fibonacci. Баллы: 2.
Числа Фибоначчи — элементы бесконечной числовой последовательности
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, ...
в которой каждое последующее число равно сумме двух предыдущих чисел.
Договоримся нумеровать элементы последовательности с нуля. Таким образом, нулевой элемент последовательности равен 0, первый: 1, второй: 1 = 0 + 1, третий: 2 = 1 + 1 и т.д.
Программа принимает число N через аргументы командной строки и создаёт список членов последовательности Фибоначчи с индексами от 0 до N включительно. Таким образом, в списке будет N+1 элементов.
Полученный список программа выводит через пробел на консоль (т.е. посредством print).
Пример вызова:
python pr9_fibonacci.py 6
Пример выхода:
0 1 1 2 3 5 8
4. Подсчёт аминокислотного состава. Мнемоника: aacomp. Баллы: 1 или 2.
Написать программу, которая подсчитывает число разных букв в последовательности и выдаёт полученную информацию в виде таблицы через табулятор.
Имена входного и выходного файлов задаются в командной строке (в варианте за один балл).
Подразумевается, что входной файл содержит одну последовательность в fasta-формате. Выводится количество встреч всех букв (в последовательности, а не в названии или описании!). Заглавная и соответствующая строчная буква должна пониматься как одна и та же буква. Строки выдаваемой таблицы должны быть упорядочены по алфавиту.
Указание: создайте пустой словарь и для каждой встреченной буквы проверяйте, есть ли она уже среди ключей словаря. В конце создайте отдельный список из упорядоченных ключей словаря.
Два балла вместо одного, если программа будет иметь более гибкий интерфейс, а именно:
если в командной строке задано два аргумента, то первый понимается как имя входного файла, а второй – как имя выходного;
- если задан один аргумент, то он понимается как имя входного файла, результат выводится на консоль;
- если аргументов нет, то программа должна запросить имя входного файла у пользователя, а результат выдать на консоль.
Пример
>seq ATGDDVvVAER
Выход
A 2 D 2 E 1 G 1 R 1 T 1 V 3
5. Двойная порция. Мнемоника: double-lunch. Баллы: 1
Каждому сотруднику фирмы присвоен уникальный номер. Каждому сотруднику разрешается один раз пообедать за счёт фирмы. Однако некоторые сотрудники пытаются ухватить второй обед.
Программа получает на вход (в файле, имя которого указывается в командной строке) номера сотрудников или STOP (одно значение на строке), если сотрудники прекратились. После STOP файл может содержать ещё произвольное количество строк произвольного содержания. Программа распечатывает номера сотрудников, заказавших два и более обедов. В выдаче программы не должно быть повторяющихся номеров.
Пример содержимого входного файла:
1 2 3 5 2 3 3 3 3 STOP This file contains IDs of persons who want to eat for free. /\/\/\/\/\
Пример выхода:
2 3
Указания. 1. При чтении файла разумно воспользоваться циклом while. 2. Один из вариантов решения задачи: завести словарь, у которого ключами служат номера, а значениями — числа встреч в списке. После достижения STOP'а нужно пройти по ключам словаря и распечатать те их них, что имеют значения, большие 1.
6. Поиск общих слов в файле с несколькими последовательностями. Мнемноника: common. Баллы: 3.
Программа принимает в командной строке имя входного файла и натуральное число k. Подразумевается, что входной файл содержит более одной последовательности в fasta-формате.
Будем называть последовательность букв "общим словом", если в каждой из входных последовательностей можно найти участок, в точности совпадающий с ней.
Например, если входные последовательности:
>first ataatgca >second tttttaaaaaaa
то taa — общее слово, а at — нет.
Программа должна выдавать на консоль все общие слова длины k, по одному на строке. Если ни одного общего слова заданной длины нет, программа должна печатать "No common k-mers" (например, "No common 9-mers", если k было равно 9).