Моя программа сейчас имеет две функции.
get_orf(dna)
, который принимает строку с именем днк в качестве ввода.Если строка начинается со стартового кодона 'ATG', то get_orf
ищет кратные 3 для любого из стоп-кодонов.
Если он находит один из них, он возвращает ORF ('ATG' ипоследовательность до стоп-кодона).
orf_List = []
stopCodons = ["TAG", "TAA", "TGA"]
def get_orf(dna):
#checks to see if the first three amino acids are ATG
if dna[:3] == "ATG":
#if the first three are amino acids,
#it checks the dna string in multiples of 3 uisng the range fucntion
for k in range(0, len(dna), 3):
#checking for stop codons in the dna string
if any(s in dna[k:k+3] for s in stopCodons):
#if a stop codon is found, it returns it
return dna[0:k]
#prints No Orf if there are no stop codons found
else:
print("No ORF.")
#prints No Orf if the dna does not start with ATG
else:
print("No ATG IN BEGINNING.")
и one_frame(dna)
, которые принимают строку ДНК в качестве входных данных.
one_frame
ищет эту строку слева направо, кратно трем.Когда он попадает в стартовый кодон «ATG», он вызывает get_orf
в срезе строки, начинающейся в этом стартовом кодоне (до конца), чтобы вернуть ORF. Этот ORF добавляется в список ORF, а затем функция пропускаетвпереди в цепочке ДНК к точке сразу после ORF, которую мы только что нашли, и начинаем искать следующую ORF. Это повторяется, пока мы не пройдем всю цепочку ДНК.
def one_frame(dna):
i = 0
while i < len(dna):
for i in range(0, len(dna), 3):
if "ATG" in dna[i:i+3]:
newOrf = get_orf(dna[i:])
orf_List.append(newOrf)
#i don't know how to skip ahead
print(orf_List)
return(orf_List)
Когда я звоню one_frame("ATGCCCATGCCCCCCTAG")
, я не могу понять, как перейти к последнему найденному индексу ORF, чтобы я мог продолжить поиск. Любая помощь?
С этим кодом он выводит «ATGCCCATGCCCCCCTAG» И"ATGCCCCCCTAG". Меньший не должен быть напечатан, так как он находится внутри большего.