Учебная страница курса биоинформатики,
год поступления 2017
Практикум 8. Программирование на Python, второе занятие
Всем заданиям присвоены мнемоники, указанные после названий. Мнемоники заданий подчеркнуты. Каждую программу (после того, как убедитесь, что она правильно работает!) кладите в файл "~/term1/block3/credits/pr8_mnemonics.py" где ~ — ваша домашняя папка, а mnemonics — мнемоника, указанная в задании. Пример: ~/term1/block3/credits/pr8_nucleobase.py.
См. советы и подсказки.
После каждого задания указаны зачётные баллы. Для зачёта по этому практикуму необходимо набрать не менее 5 баллов.
Срок выполнения этого задания: утро 10 ноября. Те, кто выполнит задание 7 (cds) к следующему занятию, получат дополнительные два балла в рейтинг.
1. Пурин или пиримидин. Мнемоника: nucleobase. Баллы: 1 или 2.
Программа принимает в качестве первого аргумента командной строки одну из букв: A, T, G или C. Программа определяет, является ли основание производным пурина или пиримидина. Напоминание: аденин и гуанин являются производными пурина, а тимин и цитозин — пиримидина. Если введённое основание является производным пурина, программа печатает "purine", а если пиримидина — "pyrimidine".
Два балла вместо одного, если программа:
- правильно понимает буквы не только в верхнем, но и в нижнем регистре;
- учитывает урацил (U), который тоже является производной пиримидина;
- печатает что-нибудь понятное и адекватное, если символ в командную строку не введён или если введён символ (символы), не обозначающий (-ие) никакое азотистое основание. !!! В сообщении об ошибке должна присутствовать подстрока "Error"
2. Деление строки. Мнемоника: split. Баллы: 1.
Программа принимает в качестве первого аргумента командной строки имя файла, первая строка которого содержит несколько чисел, разделённых пробелами. Программа интерпретирует эти числа как действительные (float) и печатает их по одному на строку. Если в первой строке видно что-то, кроме разделённых пробелами чисел (например, буква), то должна выдаваться ошибка!
Пример содержимого входного файла:
10 20 30 3.142
Пример выхода:
10.0 20.0 30.0 3.142
Подсказка. В Python есть нормальный способ проверять, может ли строка быть интерпретирована как число или нет. Но, к сожалению, для этого надо знать конструкцию try ... except, которую мы не проходили. В этом и следующем заданиях это не требуется, достаточно будет того сообщения об ошибке, которое интерпретатор Python выдаёт при попытке превратить в число строку, которая число не задаёт.
3. Среднее по больнице. Мнемоника: average. Баллы: 1. Программа принимает в качестве первого аргумента командной строки имя файла, первая строка которого содержит несколько чисел, разделённых пробелами. Программа печатает среднее этих чисел, объясняя что это такое. Если в первой строке видно что-то, кроме разделённых пробелами чисел (например, буква), то должна выдаваться ошибка!
Пример содержимого входного файла:
10 20 30 3.142
Пример выхода:
Average is 15.7855
4. Медиана. Мнемоника: median. Баллы: 1.
Статистика учит, что иногда медиана гораздо лучше характеризует выборку, чем среднее. (К примеру, если человек ищет работу, то средняя зарплата в организации не особенно полезна, в отличие от медианы.) Задание аналогично предыдущему, но программа печатает не среднее, а медиану. Пример расчёта медианы. Подсказка: может пригодиться встроенная функция sorted.
5. Имена последовательностей. Мнемоника: fastanames. Баллы 1.
Напоминаем, что в fasta-формате именем последовательности считается часть строки описания (т.е., строки, начинающейся с >) между знаком > и первым пробелом, если же пробела нет вообще, то от знака > до конца строки. Программа получает в командной строке имя файла в fasta-формате и печатает список имён последовательностей, по одной на строке. Если файл не соответствует заявленному формату, то выдается ошибка, содержащая подстроку "Error".
Возможно, вам пригодится шаблон.
6. Простое число. Мнемоника: prime. Баллы: 2.
Простое число — это натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя. Другими словами, число p простое, если оно больше 1 и делится только на 1 и на p. (Внимание: числа 0 и 1 простыми не являются; никакие отрицательные числа тоже не будем считать простыми).
Написать программу, которая (понятными словами) просит ввести целое число; получив его, программа сообщает, является ли введённое число простым. Если число является простым, программа выводит слово "Prime", иначе выводит "Not prime". Подразумеваем, что ввод пользователя правилен (представляет собой целое число).
Пример входа:
100
Пример выхода:
Not prime
7. Кодирующие участки, описанные в файле GenBank. Мнемоника: cds. Баллы: 2 или 3.
Написать программу, считающую число аннотированных в файле формата GenBank кодирующих белок последовательностей (CDS). Имя файла вводится в командной строке.
Указание: откройте (в редакторе) какой-нибудь gbk-файл и посмотрите, в каком виде там аннотированы CDS, в частности в каких позициях находятся ключевые буквы. Примеры gbk-файлов есть в папке /P/y17/term1/pr3/ на kodomo.
Чтобы получить дополнительный балл (или два, если сделаете до начала следующего занятия), необходимо проделать следующее: Написать программу, решающую задачу, в трех вариантах, меняя способ чтения файлов. Протестировать получившийся результат на файлах .gbk разного размера. Сравнить время работы трех вариантов. Описание трех способов чтения и как измерить время смотрите в подсказках. Результаты описать в отдельном файле с именем cds_report.txt (или *.doc или *.docx и т.п.), в директории credits.
Пример входа:
cds.txt
Пример выхода:
400
(Помните, что запускать python из-под Netbox нельзя! Скачиваете файл к себе, потом на локальном компьютере с ним работаете!)