Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 2016

Срок выполнения практикума 8 — понедельник 7 ноября 2016.

(*) — дополнительное задание

Всем заданиям присвоены мнемоники, указанные после названий. Мнемоники заданий подчеркнуты. Решение кладите в файл ~/term1/block3/credits/Lastname_pr8_mnemonics.py где ~ — ваша домашняя папка (не путать с папкой public_html!), Lastname — ваша фамилия латинскими буквами с большой буквы, а mnemonics — мнемоника, указанная в задании. Пример: ~/term1/block3/credits/Pupkin_pr8_nucleobase.py. Протокол ~/term1/block3/credits/Pupkin_pr8_protocol.doc нужен для ответов на некоторые дополнительные задания. Регистр букв в имени файла, как в задании. Не ошибайтесь с именем файла, иначе мы не увидим решение!

Ваша программа не должна в конце зависать! Не нужно писать в конце скрипта raw_input() и т.п. Результат смотрят при помощи Ctrl+O, а не любуются им до нажатия кнопки Enter.

Практикум 8. Строки, списки, циклы, условия. Задания

1. Пурин или пиримидин? Мнемоника: nucleobase

Программа принимает в качестве первого аргумента командной строки одну из букв: A, T, G или C. Программа определяет, является ли основание производным пурина или пиримидина. Напомню, аденин и гуанин являются производными пурина, а тимин и цитозин — пиримидина. Если введённое основание является производным пурина, программа печатает "purine", а если пиримидина — "pyrimidine".

(*) Усовершенствовать программу так, чтобы она: (а) учитывала урацил (U), который тоже является производным пиримидина; (б) правильно реагировала на буквы в нижнем регистре (a, t, g, c); (в) печатала что-нибудь понятное и адекватное, если символ в командную строку не введён или если введён символ, не обозначающий азотистое основание. Мнемоника: nucleobase2

(**) Написать аналогичную программу, работающую с аминокислотами. На вход код аминокислоты (1 буква), на выход список классов, к которым принадлежит эта аминокислота. Справка по классам аминокислот. Каждый класс печатается на отдельной строке. Мнемоника: aminoacid .

2. Среднее по больнице. Мнемоника: average

Как известно, среднее арифметическое является важным свойством выборки. Написать программу, считающую среднее набора чисел, находящихся в первой строке файла, имя которого является параметром (вводится в командной строке). Числа могут быть целыми и нецелыми, разделены пробелами. Программа печатает среднее, объясняя что это такое.

Пример содержимого входного файла:

10 20 30 40 50

Пример выхода:

Average is 30.0

(*) Статистика учит, что иногда медиана гораздо лучше характеризует выборку, чем среднее. (К примеру, если человек ищет работу, то средняя зарплата в организации не особенно полезна, в отличие от медианы.) Задание: изменить программу так, чтобы она печатала не среднее, а медиану. Пример расчёта медианы. Подсказка: может пригодиться встроенная функция sorted. Мнемоника: median

3. CDS Мнемоника: cds

Написать программу, считающую число аннотированных в файле формата Genbank кодирующих белок последовательностей (CDS). Имя файла вводится в командной строке.

Указание: откройте (в редакторе) какой-нибудь gbk-файл и посмотрите, в каком виде там аннотированы CDS, в частности в каких позициях находятся ключевые буквы.

Возможно, вам пригодится шаблон.

4. Имена последовательностей. Мнемоника: fastanames

Напоминаем, что в fasta-формате именем последовательности считается часть строки описания (т.е., строки, начинающейся с >) между знаком > и первым пробелом, если же пробела нет вообще, то от знака > до конца строки. Программа получает в командной строке имя файла в fasta-формате и печатает список имён последовательностей, по одной на строке.

5. Двойная порция. Мнемоника: double-lunch

Каждому сотруднику фирмы присвоен уникальный номер. Каждому сотруднику разрешается один раз пообедать за счёт фирмы. Однако некоторые сотрудники пытаются ухватить второй обед.

Программа получает на вход (в файле, имя которого указывается в командной строке) номера сотрудников или 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. Один из вариантов решения задачи: завести список номеров и перед тем, как добавлять туда новый номер, проверять, нет ли его уже там. Завести переменную a, содержащую пустой список, можно командой a = [].

(*) дополнительно. То же, но требования к формату файла ослаблены: слова STOP может не быть, строки с комментариями могут чередоваться с номерами сотрудников. Программа должна учитывать только строки, состоящие из одних цифр, остальные просто игнорировать. Мнемоника: double-lunch2

6. Сколько аланинов описано в файле с описанием пространственной структуры? Мнемоника: pdb1

Пространственные структуры белков (и других биологических макромолекул, например ДНК и РНК) описываются в файлах специального формата, называемого (по имени банка пространственных структур) PDB. Примеры таких файлов см. на диске P.

Каждому атому структуры соответствует одна строка в файле. Однако в файле есть и строки с другой информацией. Строка, описывающая атом, отличаются тем, что её первые шесть символов образуют строку "ATOM  " (буквы заглавные, пятый и шестой символы — пробелы). В такой строке символы с 18 по 20 (включительно) указывают на имя аминокислотного остатка, к которому принадлежит атом, а символы с 13 по 16 — на имя атома (например, атом основной цепи, к которому присоединяются боковые радикалы, имеет имя " CA "). Перед выполнением задания рекомендуется просмотреть pdb-файлы в редакторе Far, найти такие строки, а в них — упомянутые позиции символов.

Задача: написать программу, которая принимает в качестве первого аргумента командной строки имя файла, а в качестве второго аргумента — имя остатка (например, "Ala"), и печатает число остатков с данным именем в данном файле. Поскольку в каждом остатке есть атом с именем CA и притом ровно один, нужно посчитать число строк файла, в котором в нужных местах стоят подстроки "ATOM  ", " CA " и имя остатка. При этом надо иметь в виду, что имя остатка в файле всегда пишется в верхнем регистре (то есть заглавными буквами), а на вход оно может быть подано в любом регистре.

Указание: если не чувствуете себя уверенно, напишите сначала три программы: одна считает строки, начинающиеся с "ATOM  ", другая — строки, в которых в позициях с 13 по 16 стоят символы " CA ", третья — строки, в которых в позициях с 18 по 20 стоит, например, "ALA" (что означает аланин). Если все три программы выдали правдоподобный результат, соедините все три условия в одно посредством логического оператора. Не забудьте перевести поданное на вход имя остатка в верхний регистр.

Дополнительные задания

Дополнительные задания решать по желанию, особенно если это ваш первый опыт программирования. Тем не менее, решение дополнительных заданий поощряется. Не расстраивайтесь, если дополнительные задачи не поддаются. Решать можно в любом порядке (для зачёта задачи 9 не обязательно решать задачу 8).

* 7. Треугольник. Мнемоника: triangle

Если три точки лежат на одной прямой, то «треугольник» с вершинами в трёх данных точках называется вырожденным (degenerate).

Выделяют следующие виды невырожденных треугольников:

Программа получает на вход (любым способом, но способ должен быть описан в протоколе) длины сторон треугольника и печатает вид треугольника (см. выше перевод видов треугольников на английский).

Пример входа:

3
4
5

Пример выхода:

right

* 8. Простое ли число? Мнемоника: prime

Простое число —-- это натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя. Другими словами, число p простое, если оно больше 1 и делится только на 1 и на p. (Внимание: числа 0 и 1 простыми не являются!)

Написать программу, в которую вводят целое число, на что программа сообщает, является ли оно простым. Если число является простым, программа выводит слово "Prime", иначе выводит "Not prime".

Пример входа:

100

Пример выхода:

Composite

* 9. Кубики. Мнемоника: cubes

Прямоугольный параллелепипед размером AxBxC см3 обильно облили краской. Затем параллелепипед распилили на равные кубики размером 1x1x1 см3 параллельными пропилами. Полученные кубики были пересчитаны и составлена сводная таблица вида "число окрашенных граней — число кубиков".

Составьте программу, которая строит такую таблицу по известным A, B, C (целые числа).

Пример входа (кубик Рубика):

3
3
3

Пример выхода:

0 1
1 6
2 12
3 8

(**) Та же задача, но одна грань площади AxB см2 осталась неокрашенной. Мнемоника: cubes2

Пример входа:

3
3
3

Пример выхода:

0 2
1 9
2 12
3 4

* 10. Треугольник 2. Мнемоника: triangle2

Программа получает на вход координаты вершин треугольника и печатает вид треугольника (см. выше перевод видов треугольников на английский).

Пример входа:

0.0 0.0
0.0 1.0
1.0 0.0

Пример выхода:

right

* 11. GC-состав Мнемоника: gc .

GC-составом называют суммарную долю остатков G и C в последовательности. GC-состав считается одним из важных свойств последовательности. Написать программу, считающую GC-состав последовательности. Программа читает первую последовательность из входного файла в fasta-формате и печатает GC-состав в виде целого количества процентов (округление до целого — по обычным правилам). Программа игнорирует все символы последовательности, кроме A, T, G и C (в любом – нижнем или верхнем – регистре).

Пример содержимого входного файла:

>test
ATGCGGC-gggcGCAAAAGGGGGGCTGAAGCTGCNTg-

Пример выхода:

69%

(**) Та же задача, но в файле может быть несколько последовательностей, результат выдаётся в виде таблицы: "название – процент". Мнемоника: gc2 .

* 12. Вестник НИИ Вектор. Мнемоника: articles

Журнал "Вестник НИИ Вектор" выходит раз в 2 года. Когда профессор Смирнов работал в НИИ Вектор, он не упускал возможности публиковать свои труды в этом журнале. К сожалению, он не опубликовался в год первого выпуска издания и в последний год своей работы в НИИ Вектор. Определить, сколько всего раз профессору Смирнову удалось опубликоваться в журнале "Вестник НИИ Вектор".

Программа получает на вход следующие 3 числа: 1) год первого выпуска журнала "Вестник НИИ Вектор"; 2) первый год работы профессора Смирнова в НИИ Вектор; 3) последний год работы профессора Смирнова в НИИ Вектор.

Программа выводит число раз, которое профессор Смирнов опубликовался в журнале "Вестник НИИ Вектор".

Пример входа:

1990 1995 2000

Пример выхода (в этом примере он опубликовался в 1996 и 1998):

2

* 13. Корень из числа. Мнемоника: sqrt

Пользователь вводит в программу число, на что программа печатает корень квадратный из числа. Если исходное число было квадратом целого числа, то ответ должен выглядеть как целое число, в противном случае содержать 3 знака после запятой. Если пользователь ввёл отрицательное число, программа выводит "Error: input must not be negative".

Пример входа:

100

Пример выхода:

10

(**) Усовершенствовать программу. В математике есть комплексные числа. В питоне они тоже есть, без сомнения. Разберитесь, как с ними работать, и в случае, если пользователь ввёл отрицательное число, печатайте одно или два комплексных числа, квадрат которых равен входному числу. Мнемоника: sqrt2

* 14. Перерыв на обед. Мнемоника: lunch-break

В МГУ занятия проходят по следующему расписанию: (I) 9:00-10:35, (II) 10:55-12:30, (III) 12:45-14:20, (IV) 15:35-17:10, (V) 17:20-18:55. Вы знаете лучше меня :)

Если Вася посещает III и IV пары, то обедает в перерыве между ними (кушает всё время перерыва), а иначе он обедает сразу после последней посещённой пары в течение 30 минут.

В программу вводят первую и последнюю пары, которые сегодня посетил Вася. Они поступают в программу, как два числа, каждое на своей строке. Программа печатает время обеда. Окон в расписании у Васи нет.

Пример входа:

1
5

Пример выхода:

14:20-15:35

(**) Сделать версию программы, получающую номера пар в виде римских цифр. Мнемоника: lunch-break-roman

** 15. Супруги. Мнемоника: river

Задача для 5 класса: три супружеские пары собрались на одном берегу реки и хотят переплыть на другую сторону. На берегу реки есть лодка, в которую помещается не более двух людей. Жене запрещается находиться в обществе другого мужчины без сопровождения своего мужа. Помогите им перебраться через реку.

Поясню условие чуть более формально: для групп людей на каждом берегу реки должно выполняться правило: если в группе есть мужчина, то все женщины в этой группе должны быть в сопровождении своих мужей. Лодка не считается отдельной группой и её пассажиры формально приписаны к одному из берегов.

(Решение задачи для 5 класса не оценивается. Само задание см. ниже.)

Задача для 1 курса: составить программу, решающую эту задачу и печатающую решение. Программа должна именно решать задачу, а не выводить зашитое решение. Возможный способ решения — перебор.

Формат выхода: обозначим мужей большими буквами (A, B, C), а жён — маленькими (a, b, c соответственно). Лодку обозначим подчёркиванием "_", а реку — вертикальной чертой "|". Каждое состояние печатается на отдельной строке.

Пример начала выхода. Супруги C и c переплыли на тот берег, а потом муж C вернулся на левый берег.

AaBbCc_|
AaBb|_Cc
AaBbC_|c

Порядок букв в группе не имеет значения.

(***) Задание с тремя звёздочками (для тех, кто всё решил и не отстаёт по остальным предметам): написать программу, читающую и проверяющую решение задачи "Супруги". Печатает "OK", если решение принято и "FAIL", если решение неверное (то есть, не выполнены условия задачи). Если кто-то вдруг напишет такую программу, будем ею проверять остальные решения :)

Мнемоника: river-check