Учебная страница курса биоинформатики,
год поступления 2010
Последняя комиссия
Написать программу, которая:
- Получает на вход с командной строки:
- имя входного FASTA-файла
- имя выходного FASTA-файла
- набор параметров вида id=other_id
- Содержит функцию, которая считает нуклеотидный состав одной последовательности.
- Читает FASTA-файл, берёт из него только последовательности, id которых приведён в командной строке, при этом редактирует заголовок последовательности следующим образом: заменяет идентификатор последовательности на other_id, ассоциированный с заданным id, и заменяет описание на описание нуклеотидного состава последовательности. Дополнительно, для каждой последовательности программа выводит её нуклеотидный состав на экран.
- Записывает получившиеся записи в выходной FASTA-файл.
Пример
Если в нашей директории лежит eg1.fasta, то после того, как мы вызовем программу следующим образом:
python rename.py -i eg1.fasta -o renamed.fasta NODE_15=abc NODE_11=xyz
То после этого в рабочей директории должен образоваться файл renamed.fasta следующего содержания:
>xyz {'A': 20, 'C':20, 'G':20, 'T':20} TTTGGCGCGGAGTAAACTGAATTTCAGGCAAATTAGCGCGTAGTAAACTGAATTCCAGATTACAAGTAATGTATGACTTACAATACGGCTATGT CCAAAATCATAGCTTAAATCATAGAATTGCATTACAGTTATTGACCGCTTATAAGGAATTGACTGCACAACGCATTGTAGGAAATCTAATAGTC >abc {'A': 21, 'C':20, 'G':20, 'T':19} GTCAGGAAGACATTGAGAGAATGGTAAGTGAGGCTGAGAAGTACAAGAAGCAGGATGAGGAGGCTACTGCACGTTTCCATGCCAAGAATGGACT TGAGTCTTATGCTTACAATCTGCGCAACACTCTGAACGATGACAACCTTAAGGGCAAGATTGATGAGGCTGACAAGGAGACATTGGAGAAGGCT
Комиссия
1
Дана программа, которая читает файл, и выводит из него все слова в начале предложения на экран.
Переписать ее так, чтобы она выводила файл на экран, забирая в звёздочки все слова, написанные через дефис.
1 """Display first word of each sentence of the input file."""
2 import optparse
3 import re
4
5 first_word_re = r'(^|[.!?]\s+)([A-Z][a-z]+)[\s:,.]'
6
7 parser = optparse.OptionParser(description=__doc__)
8 options, args = parser.parse_args()
9
10 text = open(args[0]).read()
11 for space, word in re.findall(first_word_re, text):
12 print word
Пример текста, на котором можно тестировать программу:
Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea. This planet has—or rather had—a problem, which was this: most of the people on it were unhappy for pretty much of the time. Many solutions were suggested for this problem, but most of these were largely concerned with the movements of small green pieces of paper, which is odd because on the whole it wasn't the small green pieces of paper that were unhappy.
2
Дан файл, в котором описано соотношения между id разных баз данных. Дана программа, которая получает с командной строки имя этого файла и FASTA-файла, и указание, куда писать вывод, и записывает в выходной файл те последовательности, для которых в файле соотношений есть запись.
Переписать программу таким образом, чтобы для тех последовательностей, для которых соотношение приведено, она заменяла название последовательности соответствующим образом.
1 """Filter FASTA file to output sequences with IDs present in a ID mapping file."""
2 import optparse
3 import doctest
4
5 def parse_map(mapfile):
6 r"""Parse mapping.
7
8 Example use:
9 >>> parse_map(['a=b'])
10 set(['a'])
11 >>> map = parse_map(['a = b\n', 'b=c\n', 'def=ghi'])
12 >>> map['a']
13 'b'
14 """
15 result = set()
16 for line in mapfile:
17 key, value = line.split("=")
18 result.add(key.strip())
19 return result
20
21 def process_fasta(fastafile, outfile, map):
22 selected = False
23 for line in fastafile:
24 line = line.strip()
25 if line.startswith(">"):
26 id = line[1:].split()[0]
27 selected = (id in map)
28 if selected:
29 outfile.write(line + "\n")
30
31 doctest.testmod()
32
33 if __name__ == "__main__":
34 parser = optparse.OptionParser(description=__doc__)
35 parser.add_option("-i", "--infile", help="Input FASTA file")
36 parser.add_option("-o", "--outfile", help="Resultant FASTA file")
37 parser.add_option("-m", "--mapping", help="File with key=value pairs")
38 options, args = parser.parse_args()
39
40 mapping = parse_map(open(options.mapping))
41 infile = open(options.infile)
42 outfile = open(options.outfile, 'w')
43 process_fasta(infile, outfile, mapping)
Примеры входных данных:
a = b c = d e = f
>a stuff FJASDKFJLAKSJLKF >b description DKJFALKDSJFKLAJSL >c junk DKFJALSKDJFKLJ >d something FJLAKSJDFLKJ
3
Дана программа, которая сортирует FASTA-файл в порядке возрастания имени последовательностей (т.е. первого слова после >). Перепишите её так, чтобы она сортировала файл в порядке возрастания остальной части описания последовательностей (т.е. всё, что после первого пробела).
1 """Sort FASTA file by sequence names."""
2 import optparse
3
4 def parse_fasta(file):
5 """Parse FASTA file. Return a list of tuples [('>head', 'sequence'), ...]"""
6 result = []
7 for line in file:
8 line = line.strip()
9 if line == "":
10 continue
11 if line[0] == ">":
12 result.append((line, ""))
13 else:
14 head, sequence = result[-1]
15 result[-1] = head, sequence + line
16 return result
17
18 def write_fasta(file, pairs):
19 """Given a list of tuples [('>head', 'sequence'), ...], write FASTA file"""
20 for head, sequence in pairs:
21 file.write(head + "\n" + sequence + "\n")
22
23 if __name__ == "__main__":
24 parser = optparse.OptionParser(description=__doc__)
25 parser.add_option("-i", "--input-file", help="input FASTA file name")
26 parser.add_option("-o", "--output-file", help="output sorted FASTA file name")
27 options, args = parser.parse_args()
28
29 pairs = parse_fasta(open(options.input_file))
30 pairs = sorted(pairs)
31 write_fasta(open(options.output_file, 'w'), pairs)
Одна задача
- Программа получает на вход два файла: файл в формате FASTA и файл, описывающий соответствие идентификатора последовательностей идентификаторам последовательностей из других банков данных. Последовательности в FASTA-файле имеют идентификаторы unirpot id (от 1 до 6 буквоцифр, далее символ '_', далее от 3 до 5 буквоцифр). Формат файла соответствия идентификаторов последовательностей: на каждой строке перечислены через запятую идентификаторы, между которыми установлено соответствие, в произвольном порядке. Задача: заменить идентификаторы последовательностей согласно таблице соответствий на идентификаторы unirpot ac (слово из 6 символов, первая - буква одна из A,B,C,D,E,F,O,P,Q, вторая - цифра, далее 3 цифробуквы и последняя - опять цифра) и записать результат в выходной файл. Программа должна иметь отдельную функцию для проверки соответствия строки формату uniprot id, для неё должна быть предоставлена минимальная документация и тесты.
Разбитое на маленькие задачи
- Написать функцию для проверки соответствия строки формату uniprot id (от 1 до 6 буквоцифр, далее символ '_', далее от 3 до 5 буквоцифр), для неё должна быть предоставлена минимальная документация и тесты. Продемонстрировать ее работу.
- Дан файл с таблицей соответствий идентификаторов последовательностей. Формат файла: на каждой строке перечислены через запятую идентификаторы, между которыми установлено соответствие, в произвольном порядке. Написать программу, которая позволяет по идентификатору unirpot id находить соответствующий unirpot ac. unirpot id имеет вид: от 1 до 6 буквоцифр, далее символ '_', далее от 3 до 5 буквоцифр. unirpot ac имеет вид: слово из 6 символов, первая - буква одна из A,B,C,D,E,F,O,P,Q, вторая - цифра, далее 3 цифробуквы и последняя - опять цифра.
- Дан файл в формате FASTA. Последовательности в FASTA-файле имеют идентификаторы unirpot id. Прочитать файл, распечатать последовательности в другой файл в формате FASTA, но с идентификаторами unirpot ac.
К.Р. 1
- Нарисуйте несколько кружков фиксированного радиуса в случайных местах. Сделайте так, чтобы мышью можно было бы перетаскивать эти кружки.
Задачи для зачёта
- введение; питон как калькулятор
- графические программы; random; списки
- циклы; условия; списки
функции; графика: события & кнопки
- к. р. 1
- файлы; строки
- словари; кортежи; optparse
- регулярные выражения: match, search, findall
- регулярные выражения: match.group, replace; str.format
- к. р. 2
- самодокументация; тесты; модули
- классы
- исключения
- к. р. 3
- 2: (1 балл) Нарисуйте дом, состоящий как минимум из двух прямоугольников (корпус дома и окно), треугольной крыши, и три звезды над ним в случайных местах.
- 2: (1 балл) Нарисуйте ёлку из несколких треугольников. Нарисуйте на ней разноцветные (случайных цветов) шарики в случайных местах
- 3: (1 балл) Нарисуйте дом, состоящий как минимум из двух прямоугольников (корпус дома и окно), треугольной крыши, и N звезды над ним в случайных местах. Звезды не могут быть под домом и не могут пересекаться с домом.
- 3: (1 балл) Нарисуйте N ёлок из несколких треугольников в случайных местах. С вероятностью 1/2 ёлка имеет на себе шарики.
- 3: (1 балл) Создайте список случайных чисел от 0 до 100. Постройте список пар, в которых первое число соответствует элементу исходного списка, а второе является результатом преобразования x+случайное число от -50 до 50. Нарисуйте точки, такие что первое число в паре соответствует координате x, второе - координате y данных точек.
- 4: (1 балл) Нарисуйте дом, состоящий как минимум из двух прямоугольников (корпус дома и окно), треугольной крыши, и N звезды над ним в случайных местах. Звезды не могут быть под домом и не могут пересекаться с домом. Звездочки должны мигать с такой частотой, чтобы было красиво.
- 4: (1 балл) Нарисуйте N ёлок из несколких треугольников в случайных местах. Сверху должны падать снежинки.
- 5 кр1: (1 балл) Задача из 3 занятия.
- 5 кр1: (2 балла) Нарисуйте несколько кружков фиксированного радиуса в случайных местах. Сделайте так, чтобы мышью можно было бы перетаскивать эти кружки.
- 6: (1 балл) Прочесть из файла координаты x и у точек и их цвета. Нарисовать данные точки соответствующими цветами. В файле могут быть пустые строки и строки с комментариями (начинаются с символа #), которые нужно игнорировать.
#set 1 10 100 green 100 50 red #set 2 10 10 yellow
6: (1 балл) Разобрать fasta-файл. Напечатать имя последовательности (то, что между > и первым пробелом), а также длину последовательности. Обратите внимание, что последовательность может быть записана в несколько строк и дополнительно разделена пробелами.
>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX IENY >MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA DIDGDGQVNYEEFVQMMTAK
6: (1 балл) Прочитать PDB-файл. Посчитать центр масс молекулы ((Σ miposi) / (Σ mi)).
- 6: (1 балл) Прочитать PDB-файл. Посчитать количество атомов каждого элемента.
- 6: (1 балл) Прочитать PDB-файл. Посчитать массу молекулы и массовую долю каждого элемента.
- 7: (1 балл) Прочитать fasta-файл, содержащий много последовательностей. Для каждой последовательности вывести на экран её имя и самую частую букву в ней. Программа должна полноценно разбирать командную строку и иметь названия параметров и описания к ним, понятные ПОЛЬЗОВАТЕЛЮ (тупому, который ничего не знает НИ об устройстве программы, НИ О ЕЁ НАЗНАЧЕНИИ), а не программисту.
- 7: (1 балл) Прочитать fasta-файл, содержащий много последовательностей из одного организма. Написать три самых частотных аминокислоты данного рганизма. Программа должна полноценно разбирать командную строку и иметь названия параметров и описания к ним, понятные ПОЛЬЗОВАТЕЛЮ (тупому, который ничего не знает НИ об устройстве программы, НИ О ЕЁ НАЗНАЧЕНИИ), а не программисту.
7: (1 балл) Дан fasta-файл, содержащий данные секвенирования. Данные состоят из прямых и обратных чтений, перемешанных произвольным образом в файле. Прямые чтения содержат в своём имени строку :1:, обратные чтения содержат в своём имени строку :2:, и кроме этой строки их имена совпадают. Выдать в выходной файл таблицу вида имя прямого чтения:тело прямого чтения:тело обратного чтения Программа должна полноценно разбирать командную строку и иметь названия параметров и описания к ним, понятные ПОЛЬЗОВАТЕЛЮ (тупому, который ничего не знает НИ об устройстве программы, НИ О ЕЁ НАЗНАЧЕНИИ), а не программисту.
- 7: (2 балла) "Однопалубный морской бой". Программа сочиняет поле для морского боя заданной ширины и высоты и случайным образом располагает на нём N однопалубных кораблей, но не сообщает пользователю, куда она их поставила. Программа рисует клеточное поле. При нажатии мышкой в клетку поля, в нём обозначается либо "мимо", либо "убит". Обязательное требование к реализации: всё поле хранится в одном словаре. Программа должна полноценно разбирать командную строку и иметь названия параметров и описания к ним, понятные ПОЛЬЗОВАТЕЛЮ (тупому, который ничего не знает НИ об устройстве программы, НИ О ЕЁ НАЗНАЧЕНИИ), а не программисту.
- 7: (1 балла) "Верификация однопалубного морского боя". Программа получает на вход файл в формате CSV, в котором указаны координаты X и Y однопалубных кораблей на поле морского боя. Программа получает из аргументов командной строки размеры поля. Программа проверяет, что файл, поданный на вход, является корректным и сообщает обо всех найденных ошибках. Возможные ошибки: два корабля соприкасаются бортами или углами; корабль находится за пределами поля. Обязательное требование к реализации: всё поле представляется одним словарём. Программа должна полноценно разбирать командную строку и иметь названия параметров и описания к ним, понятные ПОЛЬЗОВАТЕЛЮ (тупому, который ничего не знает НИ об устройстве программы, НИ О ЕЁ НАЗНАЧЕНИИ), а не программисту.
- 7: (2 балла) "Однопалубный морской бой". Программа получает на вход файл в формате CSV, в котором указаны координаты X и Y однопалубных кораблей на поле морского боя. Также, программа получает на с командной строки размер поля. Программа рисует клеточное поле. При нажатии мышкой в клетку поля, в нём обозначается либо "мимо", либо "убит". Обязательное требование к реализации: всё поле хранится в одном словаре. Программа должна полноценно разбирать командную строку и иметь названия параметров и описания к ним, понятные ПОЛЬЗОВАТЕЛЮ (тупому, который ничего не знает НИ об устройстве программы, НИ О ЕЁ НАЗНАЧЕНИИ), а не программисту.
- 8: (1 балл) Дан файл, в котором написано много идентификаторов разных биологических БД, по одному на строку. Учитывайте, что в файле кроме корректных идентификаторов могут встречаться и ошибочные. Выписать из них все идентификаторы БД pfam. (PF и пять цифр)
- 8: (1 балл) Дан файл, в котором написано много идентификаторов разных биологических БД, по одному на строку. Учитывайте, что в файле кроме корректных идентификаторов могут встречаться и ошибочные. Выписать из них все идентификаторы БД unirpot id. (от 1 до 6 буквоцифр, далее символ '_', далее от 3 до 5 буквоцифр)
- 8: (1 балл) Дан файл, в котором написано много идентификаторов разных биологических БД, по одному на строку. Учитывайте, что в файле кроме корректных идентификаторов могут встречаться и ошибочные. Выписать из них все идентификаторы БД unirpot ac. (слово из 6 символов, первая - буква одна из A,B,C,D,E,F,O,P,Q, вторая - цифра, далее 3 цифробуквы и последняя - опять цифра)
- 8: (1 балл) Дан файл, в котором написано много идентификаторов разных биологических БД, по одному на строку. Учитывайте, что в файле кроме корректных идентификаторов могут встречаться и ошибочные. Выписать из них все идентификаторы БД pdb. (Цифра и три цифробуквы)
- 8: (1 балл) Дан файл, в котором написано много идентификаторов разных биологических БД, по одному на строку. Учитывайте, что в файле кроме корректных идентификаторов могут встречаться и ошибочные. Выписать из них все идентификаторы БД ensembl. (префикс 'ENS', далее любая буква, далее 11 цифр, далее необязательный суффикс, состоящий из двух символов: '.' и цифра)
- 8: (1 балл) Дан файл, в котором написано много идентификаторов разных биологических БД, по одному на строку. Учитывайте, что в файле кроме корректных идентификаторов могут встречаться и ошибочные. Выписать из них все идентификаторы gi. (число, состоящее из 7-9 цифр, т.е. старшая цифра не может быть 0)
8: (1 балл) Дан fasta-файл. Дано описание мотива в формате PROSITE. Найти в файле все участки, удовлетворяющие мотиву. (например, в мотиве C-G-G-x(4,7)-G-x(3)-C-x-[FYWM]-Q-{NHG}-C отдельно стоящие заглавные буквы означают обычные аминокислоты, x - любая аминокислота, если после x стоят скобки, они задают кол-во повторов, две цифры в скобках задают минимум и максимум кол-ва повторов любой аминокислоты, квадратные скобки задают одну аминокислоту из тех, что перечислены в скобках, фигурные скобки означают одну аминокислоту, не перечисленную в скобках; более детально описано тут http://prosite.expasy.org/scanprosite/scanprosite-doc.html#pattern_syntax) В качестве вариантов задачи можно использовать следующие мотивы: PDOC00394, PDOC00178, PDOC00946, PDOC00124, PDOC00500, PDOC00661. Чтобы открыть описание мотива можно использовать ссылку вида http://prosite.expasy.org/PDOC00394.
9: (1 балл) Дан фрагмент генома эукариота в формате GenBank. Разобрать в нём для cds все записи complement и join, и выдать суммарную длину экзонов, суммарную длину интронов, отношение общей длины экзонов к интронам, а также, среднюю длину экзонов и среднюю длину интронов и отношение средней длины экзона к средней длины интрона.
- 9: (1 балл) Дан текст программы на python. Напечатать содержимое всех строковых констант в нём.
- 9: (1 балл) Дан HTML-файл. Найти в нём все внешние ссылки.
- 9: (1 балл) Дан текстовый файл. Найти в нём все ссылки на http.
10 кр2: (1 балл) Дан файл в формате GenBank. Посчитать общий GC-состав апстримных областей всех кодирующих участков (cds) в нём. Апстримная область определяется как N позиций, идущих перед началом кодирующего участка (или после конца – для участков на комплементарной цепи). Число N передаётся как параметр командной строки.
10 кр2: (1 балл) Дан файл в формате GenBank. Посчитать общий GC-состав апстримных областей всех генов (gene) в нём. Апстримная область определяется как N позиций, идущих перед началом кодирующего участка (или после конца – для участков на комплементарной цепи). Число N передаётся как параметр командной строки.
10 кр2: (1 балл) Дан файл в формате GenBank. Посчитать GC-состав некодирующей части данного генома.
- 11: (+1 балл в пользу 11 занятия) Программа должна быть разумно разделена на небольшие функции. Каждая функция должна иметь самодокументацию. Те функции, для которых это возможно, должны содержать тесты. Разделение программы на функции должно быть таким, чтобы как можно больший процент строк кода был покрыт тестами.
11: (+2 балла в пользу 11 занятия) Программа должна быть РАЗУМНО разделена на небольшие функции и на несколько модулей. Каждая функция должна иметь самодокументацию. Те функции, для которых это возможно, должны содержать тесты. Разделение программы на функции должно быть таким, чтобы как можно больший процент строк кода был покрыт тестами.
- 13: (+1 балл в пользу 13 занятия) Программа должна корректно обрабатывать ошибки ввода-вывода, рассчётов, разбора форматов вхдодных файлов. Если программа работает с нетривиальным форматом файла, в программе должны присутствовать простейшие проверки на правильность формата, которые должны обрабатываться наряду с остальными ошибками. При любом нештатном завершении программа должна выдавать КОРОТКОЕ сообщение об ошибке (А НЕ Traceback ...).
- 14 кр3: (2 балла) Дан граф в виде матрицы смежности (т.е. для графа из N вершин это таблица N x N, для которой в клетке i,j лежит 1, если i-ая и j-ая вершина соединены ребром и 0, если нет; матрица даётся в виде csv-файла). Отобразить граф на экране. Для этого нужно расположить в произвольных координатах вершины и для каждой пары соединённых ребром вершин провести между ними линию.
- Программа должна корректно обрабатывать ошибки ввода-вывода, рассчётов, разбора вхдодного файла. В программе должны присутствовать простейшие проверки на правильность формата, которые должны обрабатываться наряду с остальными ошибками. При любом нештатном завершении программа должна выдавать КОРОТКОЕ сообщение об ошибке (А НЕ Traceback ...).
- Программа должна быть разумно разделена на небольшие функции. Каждая функция должна иметь самодокументацию. Те функции, для которых это возможно, должны содержать тесты. Разделение программы на функции должно быть таким, чтобы как можно больший процент строк кода был покрыт тестами.
- 14 кр3: (2 балла) "Наглядная популяционная динамика". Написать программу, которая создаёт поле и высевает на это поле бактерии трёх видов. Все бактерии изображаются кружочками одинакового радиуса, но разных цветов. Виды бактерий:
- "хищники" Всё время двигаются в одном и том же направлении, определяемом случайно при рождении. При столкновении с другими бактериями съедают их и делятся.
- "жертвы" Двигаются с фиксированной скоростью в направлении, определяемом случайным образом в каждый момент времени. В сулчайные моменты времени делятся (при этом новая бактерия не должна пересекаться с существующими). При столкновении с другими бактериями останавливаются до тех пор, пока дорога не освободится. В случайные моменты времени (с заданной вероятностью) умирают.
- "тоже жертвы" При рождении двигаются в одном и том же направлении с убывающей скоростью. Когда скорость опускается до нуля, останавливаются. При столкновении с другими бактериями умирают. Имеют фиксированную вероятность размножиться после того, как их скорость оказалась равной нулю.
- Программа должна быть разумно разделена на небольшие функции и классы. Каждая функция должна иметь самодокументацию.
- 14 кр3: (2 балла) "Ну очень примитивная модель эволюции". Написать программу, которая создаёт поле и высевает на это поле бактерии трёх видов. Все бактерии изображаются кружочками одинакового радиуса, но разных цветов. Виды бактерий:
- "еда" стоят неподвижно; в случайные интервалы времени с заданной вероятностью делятся; потомок размещается на фиксированном расстоянии в случайном направлении; если место, куда потомок хотел встать, занято, потомок не рождается
- A. Двигаются с фиксированной скоростью в фиксированном направлении. При столкновении с другими бактериями съедают их. Если после рождения или последней еды прошло больше заданного времени, умирают. После еды в случайный момент делятся. Потомок наследует от родителя направление и скорость, но с небольшим изменением.
- B. Двигаются с фиксированной скоростью в заданном направлении, прибавляя или вычитая из него заданное приращение на каждом шаге. При столкновении с другими другими бактериями съедают их. Если после рождения или последней еды прошло больше заданного времени, умирают. После еды в случайный момент делятся. Потомок наследует от родителя приращение направления с небольшим изменением.
- Программа должна быть разумно разделена на небольшие функции и классы. Каждая функция должна иметь самодокументацию.
- 14 кр3: (2 балла) "Воздушные шарики". Написать программу, которая рисует несколько воздушных шариков случайных цветов. Воздушные шарики двигаются с постоянной скоростью вверх, при этом случайным образом двигаются по горизонтали. Воздушные шарики можно тыкать мышкой, при это оказывается, что воздушные шарики бывают двух классов: те, которые при этом лопаются, и те, которые при этом отскакивают в случайном направлении на величину собственного радиуса. На экране всегда должно быть одинаковое количество шариков: если шарик улетел за край экрана или лопнул, снизу экрана запускается новый.
- Программа должна быть разумно разделена на небольшие функции и классы. Каждая функция должна иметь самодокументацию.
10 кр2: (1 балл) Дан файл в формате GenBank. Посчитать GC-состав некодирующей части данного генома.
- 14 кр3: (2 балла) "Воздушные шарики". Написать программу, которая рисует несколько воздушных шариков случайных цветов. Воздушные шарики двигаются с постоянной скоростью вверх, при этом случайным образом двигаются по горизонтали. Воздушные шарики можно тыкать мышкой, при это оказывается, что воздушные шарики бывают двух классов: те, которые при этом лопаются, и те, которые при этом отскакивают в случайном направлении на величину собственного радиуса. На экране всегда должно быть одинаковое количество шариков: если шарик улетел за край экрана или лопнул, снизу экрана запускается новый.
- Программа должна быть разумно разделена на небольшие функции и классы. Каждая функция должна иметь самодокументацию.
Дан файл с последовательностью и координатами участков. Написать программу, которая считает количество аминокислот каждого типа для заданных участков, а также выводит исходную последовательность, в которой эти участки выделены большими буквами (все остальные - маленькие). Функцию перевода участка последовательности в верхний регистр сопроводить документацией и тестом. Имена входного и выходного файлов передаются на вход программе в виде параметров командной строки.
Содержание входного файла:
1..10 12..35 200..260 LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX IENY