1. Пурин или пиримидин
Нужно овладеть
- (1) приёмом получения входных данных из командной строки
- (2) функцией len()
- (3) методами строки, в частности, заменой всех строчных букв строки на заглавные
- (4)(уже было) конструкцией if
- else
- (5)правильно также овладеть словарем (хотя можно решить задачу и без него)
(1) пользователь вводит данные в строке с обращением к программе так:
python3.6 pr8_nucleobase G
и ждет ответа. "G" считается первым аргументом из командной строки (нулевой - имя программы, после пробела можно добавлять второй и др. аргументы)
Программа узнаёт про аргументы так. В начале программы пишем:
import(sys)
# загружается модуль (файл) sys
# с функциями,расширяющими возможности python
# В частности,список sys.argv содержит все аргументы
# командной строки согласно их порядку в
командной строке; разделитель - пробел
letter = sys.argv[1]
# переменная letter содержит в примере
# строку из одной буквы "G" (2) догадайтесь каковы ответы: print(len("ABCD")) print(len([1,2,3,0,-1])
len() пригодится для проверки корректности входных данных
(3) методы строки можно узнать так
python3.6 Запускается python как калькулятор >>>help(str) Появляется список методов строки. Те, которые имеют вид __xxxxx__, пропустите, такие - не для людей :). Ниже них перечислены методы для людей, с описаниями.
Пример, метод строки isdecimal(). Возвращет True, если все символы - цифры. Методы применяются так:
>>>m = "123" 123 >>>m.isdecimal() True >>>h = "a125,1" a125,1 >>>h.isdecimal(h) False
Найдите нужный метод и примените его, чтобы вместо буквы "a" получить букву "A"
(5) Вот так можно создать словарь:
nucls = { "A":"purine", "C":"pyrimidine", "G":"purine","T":"pyrimidine"}До двоеточия - ключ словаря. Обязан быть неизменяемым (например,не может быть списком). После двоеточия - значение, может быть данными любого типа
Вот что можно делать, и что вы можете использовать в этой программе
>>> nucls["C"] pyrimidine >>> "N" in nucleotides False >>> "G" in nucleotides True
2. Среднее по больнице
Нужно владеть
- читать файл с данным именем по строкам. Пример. читаем файл my_data.txt
f = open("my_data.txt",'r') # 'r' - от read, читать; можно опустить 'r',
# так как по умолчанию подразумевается
# открыть для чтения
# открытие резервирует этот файл на диске чтобы
# избежать конфликтов с другими программами,
# которые вдруг захотят работать
# именно с этим файлом.
# f - переменная типа file; методы файла см. ниже
for x in f: # цикл for позволяет читать файл строка за строкой;
print(x) # выглядит так, как будто мы перебирам элементы из
# списка строк файла.
#На печати появятся все строки файла, одна за одной.
f.close() # Сообщили, операционной системе что этот файл мы
# больше не используем# можно прочесть файл иначе
f = open("my_data.txt")
lines = f.readlines() # lines в точности, список строк файла!
f.close() # преимущество: можно прочитать любую строку, не по
# порядку; например, прочитать строку
# lines[125] или посчитать число строк len(lines)
for x in lines: # недостаток: файл может быть очень большим и
print(x) # не поместиться в память компьютера- переводом строк вида "123" или "-12.5" в числа (float("123") = 123.0, int("123") = 123 )
- уметь создать счётчик введенных строк файла (до цикла вводим переменную "счётчик" i = 0, после получения очередной строки прибавляем 1: i += 1 )
знать что такое среднее
8.Медиана
Нужно владеть
- Тем же, что в задании 2, см. выше
- получить список десятичных чисел (назовем его для примеры decimals) прочтенных из файла. Пусть decimals = [10.0, 20.0, 30.0, 3.142]
- Вычислить длину списка n
- упорядочить список по возрастанию; без этого - не найти медиану!
- делается либо методом списка .sort() (читайте help(list.sort) ). Важно, что результат - упорядочение самого списка (IN PLACE), а не другой список!
- либо функцией sorted(decimals); здесь оба варианта возможны:
- sorted(decimals) сортирует сам список decimals (IN PLACE)
- sorted_decimals = sorted(decimals) - sorted_decimals равен упорядоченному списку decimals, а сам decimals остается как был
- при вычислении медианы по упорядоченному списку ориентируйтесь на картинку по ссылке в задании.
3. Простое число
Нужно владеть
- приёмом получения входных данных по запросу (input)
- методами строки, в частности, методом .isdecimal() - проверка того, что строка содержит только цифры, другие символы не допускаются! См. также в подсказке к заданию 1.
- Угадайте ответы и проверьте угадали ли:
>>>"123".isdecimal() >>>"-1".isdecimal() >>>"0".isdecimal() >>>5.isdecimal()
- возможностями перебора с помощью range(). Чтобы избежать непонятных слов напишем так
>>> a = list(range(2,10))) # a - список значений, перебираемых
# "итератором" range. list() - функция, переводящая
# аргумент в список, (если это возможно)
# (слово итератор понимать не обязательно)
>>> a
[2,3,4,5,6,7,8,9]Важно, 2 - первое значение, берутрся все значения меньше 10 c шагом 1 по умолчанию; можно указать шаг третьим параметром
- циклом по списку:
for n in range(2,10):
..... #проверка делит ли n данное число
.....
if .... :
print(....)
exit() # прекращение работы программы
print(...)- делением целых: 4/5 и 4//5, проверкой делимости нацело (надо сообразить как)
4. Сложение чисел
Нужно овладеть умениями
- циклом while (в задаче - пока введенная строка не равна "end")
5. Имена последовательностей
Нужно овладеть умениями
- читать файл с данным именем по строкам. Пример. читаем файл my_sequences.fasta по строкам. См.подсказки к заданию 2.
- проверка первого символа line[0] в очередной строке(я её назвал line) из файла
- анализ строки line[1:]. Метод строки strip() - оголять - убирать конца строки, пробелы и прочие невидимые символы с обоих концов строки; split() - разделить строку на слова и положить слова в список. Здесь делить надо один раз, т.к.первое слово - имя последовательности, все остальные вместе - описание последовательности. Это делается так:
>>>s = " abc defg hklm "
abc defg hklm
>>> s1 = s.strip()
"abc defg hklm"
>>> s.strip().split(None, 1)# None - деление по пробелам, табуляторам и др.
["abc","defg hklm"] #невидимым символам (они называются "white symbols")
# 1 что делить надо только первый раз- Запись в файл делается так:
g = open("sequence_names.txt",'w')# создали файл,открыли файл на запись
#(т.к. 'w' - от write
g.write(stroka + "\n") # "\n" - символ конца строки; если его не
# добавить, то следующая строка запишется в
# в ту же строку файла
# в этой задаче stroka = name + "\t" +
# description
# строки имя последовательности name и
# описание последовательности description вы
# получите при построчном чтении входного
# файла формата fasta, наткнувшись на
# строку с названием очередной
# последовательности, т.е. символом ">" в
# первой позиции строки
g.close() # Если что-то открыли, то будьте любезны
# закрыть уходя :)- для дополнительных баллов думайте сами; вычислить длины последовательностей очень не просто. Лучше и не делайте этого, зря я даю это усложнение. ААл
6. Кодирующие последовательности
Нужно овладеть навыками:
- определить номер колонки, c которой записано слово CDS в файле формата .gbk
- чтение файла построчно, см выше подсказки к заданию 2
- срез строки ( line(2:5)- строка из трех символов - 3го,4го,5го по порядку из строки line
- создание счётчика строк CDS, см выше подсказки к заданию 2
- для дополнительных баллов: в строке с CDS указаны начало и конец кодирующей последовательности; подумайте как их добыть из строки
7. Эволюция как последовательность ошибок
Нужны навыки
- прочесть два файла в две строки, например seq1 и seq2
- проверить, что они одинаковой длины, обозначим её n
- параллельно читать по букве из двух строк; для этого можно использовать список range(n)(Он равен [0,1,...,n]) в цикле for i in range(n): читать по букве из каждой строки и сравнивать их

2025
2024
2023
2022
2021
2020
2019
2017
Проверку того, что строка в d = "-1.1" - представляет из себя число можно сделать так. 1) проверить, что d[0] in ["+","-"]; 2) заменить в строке d[1:] (она равна "1.1") точку на пустой символ (метод строки .replace(), читайте help; пустой символ "") 3) Проверить, что получившаяся строка "11" содержит только цифры - метод строки .isdecimal().
Есть другой способ: написать int(d) и перехватить сообщение об ошибке с помощью
try:
except:
Но об этом на следующих занятиях.