Kodomo

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

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

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

Программа должна задавать вопрос пользователю (при помощи raw_input), чтобы было ясно, что в данный момент вводится.

Например, "CDS: Enter 1st bp number". (CDS - стандартное сокращение coding sequence, кодирующая последовательность; bp - base pair, пара нуклеотидов).

Когда в задании говорят "печатает", имеется в виду вывод на стандартный выходной поток (например, при помощи print), а не вывод на принтер :)

Программа должна указать, что именно она печатает.

Например, protein length is 99 aa (aa - стандартное сокращение amino acids).

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

Всем заданиям присвоены мнемоники, указанные после названий. Мнемоники заданий подчеркнуты. Решение кладите в файл ~/term1/block3/credits/ВашаФамилия_практикум_мнемоника.py где ~ - ваша домашняя папка (не путать с папкой public_html!), ВашаФамилия - ваша фамилия латинскими буквами с большой буквы, а мнемоника - мнемоника, указанная в задании. Пример: ~/term1/block3/credits/Pupkine_pr9_hello.py

Протокол ~/term1/block3/credits/Pupkine_pr9_protocol.txt нужен для ответов на дополнительные задания

Регистр букв в имени файла, как в задании. Не ошибайтесь с именем файла, иначе мы не увидим решение!

Практикум 9. Программирование: условия и циклы, списки. Задания

[ типичные ошибки ] - обратите внимание, чтобы не повторять их в новом задании

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

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

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

A

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

purine

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

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

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

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

Программа печатает среднее.

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

10 20 30 40 50

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

30

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

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

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

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

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

1
2
3
5
2
3
3
3
3
STOP

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

2
3

Чтобы проверить наличие элемента в списке, используется операция in:

>>> 2 in [1, 2, 3]
True
>>> 42 in [1, 2, 3]
False

4. Директорский обед. Мнемоника: director-lunch

Каждому сотруднику фирмы присвоен уникальный номер. Директор имеет номер 1, а бухгалтер - номер 2.

Программа получает на вход номера сотрудников, пришедших пообедать, в одну строчку. Программа печатает следующее:

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

1 22 33 44 55

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

director: true
booker: false
director OR booker: true
director AND booker: false

5. Обедают все. Мнемоника: all-lunch

Программа получает на вход список лиц, отобедавших сегодня в столовой. Имена в списке разделяются запятыми. После запятой вставляется пробел. Последний человек в списке заменяется на "Vasya", первый элемент удаляется и в конец списка добавляется "and me". После этого список выводится через запятую.

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

Trus, Balbes, Byvaly

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

Balbes, Vasya, and me

(*) Та же задача, но пробелы рядом с запятыми могут быть, а могут и не быть. Мнемоника: all-lunch2

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

Trus ,Balbes, Byvaly

6. Список блюд. Мнемоника: menu

Программа получает на вход список блюд через запятую. Слева и справа от запятых может быть сколько угодно пробелов (включая 0).

Программа распечатывает список блюд в форме таблицы с номерами блюд в списке.

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

Pie, Cake, Fish

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

1. Pie
2. Cake
3. Fish

7. 101 или 102?. Мнемоника: kurs1

Программа получает на вход логин студента первого курса ФББ и распечатывает номер группы.

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

akmarina

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

101

Списки логинов первой и второй группы можно взять, например, тут.

Чтобы проверить наличие элемента в списке, используется операция in:

>>> 2 in [1, 2, 3]
True
>>> 42 in [1, 2, 3]
False

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

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

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

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

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

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

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

3
4
5

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

right

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

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

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

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

100

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

NO

(*) Усовершенствовать программу, чтобы она различала следующие типы чисел: нецелое (печатает float), отрицательное целое (печатает 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 1
1 0

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

right

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

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

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

Пример входа (файл input.fasta):

>test
ATGCGGC-GGGCGCAAAAGGGGGGCTGAAGCTGCNTG-

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

69

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

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

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

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

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

1990
1995
2000

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

2

(**) решить эту же задачу, используя только ввод, вывод и операции над целыми числами (в том числе, не применяя if, for, while, списки, словари и пр.). Мнемоника: articles2

** 14. Медиана без списка. Мнемоника: median2

Решить задачу про медиану (media, см. выше), ограничившись вводом, выводом и операциями над числами (то есть, без применения списков).

Числа вводятся другим способом. Сначала вводится размер выборки, затем сами значения. Каждое число вводится на новой строчке. Числа вводятся по возрастанию.

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

5
10
20
30
40
50

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

30

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

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