Учебная страница курса биоинформатики,
год поступления 2015
Срок выполнения практикумов 7 и 8 — пятница 30 октября 2015.
(*) — дополнительное задание
Всем заданиям присвоены мнемоники, указанные после названий. Мнемоники заданий подчеркнуты. Решение кладите в файл ~/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
(*) Статистика учит, что иногда медиана гораздо лучше характеризует выборку, чем среднее. (К примеру, если человек ищет работу, то средняя зарплата в организации не особенно полезна, в отличие от медианы.) Задание: изменить программу так, чтобы она печатала не среднее, а медиану. Пример расчёта медианы. Мнемоника: median
3. CDS Мнемоника: cds
Написать программу, считающую число аннотированных в файле формата Genbank кодирующих белок последовательностей (CDS). Имя файла вводится в командной строке. Указание: откройте какой-нибудь gbk-файл и посмотрите, в каком виде там аннотированы CDS, в частности в каких позициях находятся ключевые буквы.
4. Двойная порция. Мнемоника: 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 = [].
5. Директорский обед. Мнемоника: director-lunch
Каждому сотруднику фирмы присвоен уникальный номер. Директор имеет номер 1, а бухгалтер — номер 2.
Программа получает на вход (в первой строке файла) номера сотрудников, пришедших пообедать, в одну строчку. Программа печатает следующее:
- посетил ли директор обед;
- посетил ли бухгалтер обед;
- посетил ли обед хотя бы кто-то из них (директор ИЛИ бухгалтер);
- посетили ли обед они оба (директор И бухгалтер);
Пример содержимого входного файла:
1 22 33 44 55
Пример выхода:
director: true booker: false director OR booker: true director AND booker: false
6. Обедают все. Мнемоника: all-lunch
Программа получает на вход (в первой строке файла) список лиц, отобедавших сегодня в столовой. Имена в списке разделяются запятыми. После запятой вставляется пробел. Последний человек в списке заменяется на "Vasya", первый элемент удаляется и в конец списка добавляется "and me". После этого список печатается через запятую, в конце ставится точка.
Пример входа:
Trus, Balbes, Byvaly
Пример выхода:
Balbes, Vasya, and me
(*) Та же задача, но пробелы рядом с запятыми могут быть, а могут и не быть. Мнемоника: all-lunch2
Пример входа:
Trus,Balbes, Byvaly
7. Список блюд. Мнемоника: menu
Программа получает на вход (в файле, в одной или нескольких строках) список блюд. В каждой строке блюда разделены запятыми. Слева и справа от запятых может быть сколько угодно пробелов (включая 0). Кроме строк с блюдами, файл может содержать пустые строки и строки из одних пробелов.
Программа распечатывает список блюд в форме таблицы с номерами блюд в списке.
Пример входа:
Pie, Cake ,Fish Salad Apple,Peach
Пример выхода:
1. Pie 2. Cake 3. Fish 4. Salad. 5. Apple 6. Peach
Дополнительные задания
Дополнительные задания решать по желанию, особенно если это ваш первый опыт программирования. Тем не менее, решение дополнительных заданий поощряется. Не расстраивайтесь, если дополнительные задачи не поддаются. Решать можно в любом порядке (для зачёта задачи 9 не обязательно решать задачу 8).
* 8. Треугольник. Мнемоника: triangle
Если три точки лежат на одной прямой, то «треугольник» с вершинами в трёх данных точках называется вырожденным (degenerate).
Выделяют следующие виды невырожденных треугольников:
Если все углы треугольника острые, то треугольник называется остроугольным (acute);
Если один из углов треугольника тупой (больше 90°), то треугольник называется тупоугольным (obtuse);
Если один из углов треугольника прямой (равен 90°), то треугольник называется прямоугольным (right).
Программа получает на вход (любым способом, но способ должен быть описан в протоколе) длины сторон треугольника и печатает вид треугольника (см. выше перевод видов треугольников на английский).
Пример входа:
3 4 5
Пример выхода:
right
* 9. Простое ли число? Мнемоника: prime
Простое число —-- это натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя. Другими словами, число p простое, если оно больше 1 и делится только на 1 и на p. (Внимание: числа 0 и 1 простыми не являются!)
Написать программу, в которую вводят целое число, на что программа сообщает, является ли оно простым. Если число является простым, программа выводит YES, иначе выводит NO.
Пример входа:
100
Пример выхода:
NO
(**) Усовершенствовать программу, чтобы она различала следующие типы чисел: нецелое (печатает "non-integer"), отрицательное целое (печатает "negative"), 0, 1 (их и печатает), простое ("prime"), составное ("composite"). Мнемоника: prime2
* 10. Кубики. Мнемоника: 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
* 11. Треугольник 2. Мнемоника: triangle2
Программа получает на вход координаты вершин треугольника и печатает вид треугольника (см. выше перевод видов треугольников на английский).
Пример входа:
0.0 0.0 0.0 1.0 1.0 0.0
Пример выхода:
right
(**) Та же задача, но нельзя пользоваться тригонометрическими функциями и извлечением корня. Возможно несколько интересных решений. Мнемоника: triangle3 .
* 12. GC-состав Мнемоника: gc .
GC-составом называют суммарную долю остатков G и C в последовательности. GC-состав считается одним из важных свойств последовательности. Написать программу, считающую GC-состав последовательности. Программа читает первую последовательность из входного файла в fasta-формате и печатает GC-состав в виде целого количества процентов (округление до целого — по обычным правилам). Программа игнорирует все символы последовательности, кроме A, T, G и C (в любом – нижнем или верхнем – регистре).
Пример содержимого входного файла:
>test ATGCGGC-gggcGCAAAAGGGGGGCTGAAGCTGCNTg-
Пример выхода:
69%
(**) Та же задача, но в файле может быть несколько последовательностей, результат выдаётся в виде таблицы: "название – процент". Мнемоника: gc2 .
* 13. Вестник НИИ Вектор. Мнемоника: articles
Журнал "Вестник НИИ Вектор" выходит раз в 2 года. Когда профессор Смирнов работал в НИИ Вектор, он не упускал возможности публиковать свои труды в этом журнале. К сожалению, он не опубликовался в год первого выпуска издания и в последний год своей работы в НИИ Вектор. Определить, сколько всего раз профессору Смирнову удалось опубликоваться в журнале "Вестник НИИ Вектор".
Программа получает на вход следующие 3 числа: 1) год первого выпуска журнала "Вестник НИИ Вектор"; 2) первый год работы профессора Смирнова в НИИ Вектор; 3) последний год работы профессора Смирнова в НИИ Вектор.
Программа выводит число раз, которое профессор Смирнов опубликовался в журнале "Вестник НИИ Вектор".
Пример входа:
1990 1995 2000
Пример выхода (в этом примере он опубликовался в 1996 и 1998):
2
(**) решить эту же задачу, используя только ввод, вывод и операции над целыми числами (в том числе, не применяя if, for, while, списки, словари и пр.). Мнемоника: articles2
** 14. Медиана без списка. Мнемоника: median2
Решить задачу про медиану (median, см. выше), ограничившись вводом, выводом и операциями над числами (то есть, без применения списков).
Числа вводятся другим способом. Сначала вводится размер выборки, затем сами значения. Каждое число вводится на новой строчке. Числа вводятся по возрастанию.
Пример входа:
5 10 20 30 40 50
Пример выхода:
30
* 15. Корень из числа. Мнемоника: sqrt
Пользователь вводит в программу число, на что программа печатает корень квадратный из числа. Если исходное число было квадратом целого числа, то ответ должен выглядеть как целое число, в противном случае содержать 3 знака после запятой. Если пользователь ввёл отрицательное число, программа выводит "Error: input must not be negative".
Пример входа:
100
Пример выхода:
10
(**) Усовершенствовать программу. В математике есть комплексные числа. В питоне они тоже есть, без сомнения. Разберитесь, как с ними работать, и в случае, если пользователь ввёл отрицательное число, печатайте одно или два комплексных числа, квадрат которых равен входному числу. Мнемоника: sqrt2
* 16. Перерыв на обед. Мнемоника: 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
** 17. Супруги. Мнемоника: river
Задача для 5 класса: три супружеские пары собрались на одном берегу реки и хотят переплыть на другую сторону. На берегу реки есть лодка, в которую помещается не более двух людей. Жене запрещается находиться в обществе другого мужчины без сопровождения своего мужа. Помогите им перебраться через реку.
Поясню условие чуть более формально: для групп людей на каждом берегу реки должно выполняться правило: если в группе есть мужчина, то все женщины в этой группе должны быть в сопровождении своих мужей. Лодка не считается отдельной группой и её пассажиры формально приписаны к одному из берегов.
(Решение задачи для 5 класса не оценивается. Само задание см. ниже.)
Задача для 1 курса: составить программу, решающую эту задачу и печатающую решение. Программа должна именно решать задачу, а не выводить зашитое решение. Возможный способ решения — перебор.
Формат выхода: обозначим мужей большими буквами (A, B, C), а жен - маленькими (a, b, c соответственно). Лодку обозначим подчёркиванием "_", а реку — вертикальной чертой "|". Каждое состояние печатается на отдельной строке.
Пример начала выхода. Супруги C и c переплыли на тот берег, а потом муж C вернулся на левый берег.
AaBbCc_| AaBb|_Cc AaBbC_|c
Порядок букв в группе не имеет значения.
(***) Задание с тремя звёздочками (для тех, кто всё решил и не отстаёт по остальным предметам): написать программу, читающую и проверяющую решение задачи "Супруги". Печатает "OK", если решение принято и "FAIL", если решение неверное (то есть, не выполнены условия задачи). Если кто-то вдруг напишет такую программу, будем ею проверять остальные решения
Программа должна указать, что именно она печатает.
Например, Protein length is 99 aa.