Kodomo

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

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

Домашнее задание 2

Срок выполнения — полночь накануне следующего занятия.

Файл с готовой для проверки программой должен находиться в директории ~/term1/block2/homeworks. Название файла с программой должно состоять из названия задания (например countlines для первого задания) и расширения ".py" (то есть для первого задания это countlines.py)

1. countlines (1 балл)

Программа выдаёт на консоль число непустых строк в файле input-countlines.txt (строка считается пустой, если метод strip() без параметров выдаёт на ней строку нулевой длины)

Указание: заведите переменную-счётчик типа int, которую увеличивайте на 1 каждый раз, как встретите непустую строку.

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

alpha
   beta
to be or not to be


that is the question

Пример вывода в консоли:

There are 4 non-empty lines in your file.

2. wc (2 балла)

Программа имитирует выдачу команды wc (без параметров) на файле input-wc.txt, то есть выдаёт через пробел число строк (пустые и непустые строки не различаются), число слов и число символов.

Указание: заведите три счётчика. Число символов в строке — это её длина. Число слов в строке — это длина списка, выдаваемого методом split().

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

Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor       incididunt ut labore et dolore magna aliqua.

Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.

Пример вывода в консоли:

There are 5 lines, 36 words, and 239 characters in your file.

3. alarm2 (1 или 2 балла)

Программа запрашивает текущее время в формате часы:минуты (например, 19:37) и через какое время прозвенит будильник (в том же формате) и сообщает время, в которое прозвенит будильник. Два балла, если в случае ввода некорректного времени (например, 13:60 или -5:00) программа сообщает, что время задано некорректно.

Указание: используйте метод split(':')

Обратите внимание, что, например 24:08 будет некорректным для текущего времени, но вполне корректным для времени, через которое раздастся звонок.

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

Hello! Please enter the current time (HH:MM): 22:38
Please enter the duration of your sleep (HH:MM): 7:28

Пример вывода в консоли:

Your alarm has been set for 6:06.

4. seqnames (2 балла)

Программа читает файл input-seqnames.fasta с последовательностями в fasta-формате и создаёт файл output-seqnames.txt с именами этих последовательностей, по одному в строке.

описание фаста-формата

Указание: если строка начинается с ">", надо разделить её по пробелам и записать в выходной файл первый элемент получившегося списка, не забыв убрать '>' в начале и добавить '\n' в конце.

Убрать начальный символ из строки можно, взяв "срез" с символа 1 до конца. Если в переменной s хранится строка, то s[1:] будет означать ту же строку без начального символа (напоминаем, что номер начального символа в строке — 0).

Для любопытных: посмотреть, что делает метод строки str.startswith

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

>FOXB1 binding motif 1; score 0.058994
CGATCTGAGCAGAAGTCATACACATGGGAATGTATATAAGTCGAATCGTATGCC
CATGGGAATGTATATAAGTCGAATCGTATGCCATACACATGATACACATGATAC
CATGGGAATGTATATAAGTCGAATCGTATGCCATACACAATACACATGTATACA
ATACACATGAAGTCGAATCGTATGCCAT
>FOXB2 binding motif 2; score 0.074589
CGATCTGAGCAGCATAATGTCAATATTTACATAAGGAATCGCGAATC
>GABPA binding motif 3; score 0.128900
GGGGAAGGGCACGAGGCGGGAGGCGAGGCG

Пример файла на выходе:

FOXB1
FOXB2
GABPA

5. average (1 балл, max 2 балла)

Файл input-average.txt содержит числа, по одному в строке. Программа читает этот файл и выдаёт на консоль среднее значение.

Указание: заведите переменную-счётчик и другую переменную для суммы чисел.

+1 балл, если программа не падает на входном файле, содержащем пустые строки (например, в конце) либо строки из одних пробелов.

Бонус, если эта и следующая программы форматируют ответ до 3 знаков после запятой.

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

10
8
22
340
123419
-10
22.4
13
331

Пример вывода в консоли:

The arithmetic mean of the numbers in the file is 13795.044444444444.

Еще один пример входного файла:

-1E10
     
 

1E8

Пример вывода в консоли:

The arithmetic mean of the numbers in the file is -4950000000.0.

Замечание: в python (и в большинстве программ и языков программирования) вместо "1000000.0" можно писать "1E6", что означает единицу, умноженную на десять в шестой степени. float переводит вторую строку в число не хуже, чем первую; правда, для int такая запись не подойдёт.

6. median (2 балла)

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

Указание: заведите список, в который записывайте числа. Если длина списка нечётная, то медиана — это элемент упорядочения этого списка с номером: длина списка, делённая нацело пополам. Если длина чётная, то медиана равна среднему арифметическому от элементов упорядоченного списка с номерами длина пополам и длина пополам минус один.

Бонус, если эта и предыдущая программы форматируют ответ до 3 знаков после запятой.

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

10
8
22
340
123419
-10
22.4
13
331

Пример вывода в консоли:

The median of the numbers in the file is 22.0.