2014-05-12 5 views
0

Итак, я пытаюсь создать класс, который читает строку ДНК в трех разных кадрах - тот, который начинается с позиции 0 (или первой базы), другой, которая начинается в позиции 1 (вторая база), а третий, который начинает отсчет в позиции 2 (третья база). До сих пор, это то, что я играл с:Чтение в трех разных кадрах

def codons(self, frame_one, frame_two, frame_three): 
     start = frame_one 
     while start + 3 <=len(self.seq): 
      yield (self.seq[start:start+3], start) 
      start += 3 

     start+1 = frame_two 
     while start + 3 <=len(self.seq): 
      yield (self.seq[start+1:start+4], start) 
      start += 3 

     start+2 = frame_three 
     while start + 3 <=len(self.seq): 
      yield (self.seq[start+2:start+5], start) 
      start += 3 

Я думаю, что это довольно много ерунды в этот момент, но я старался изо всех сил. Если кто-нибудь может дать мне представление о том, где я могу начать исправлять в этом классе, это было бы здорово.

ответ

2

Прежде всего, вы не можете назначить некоторые значения и назвать переменную типа start+1, start+2 и так далее. Далее, поскольку это связано с биоинформатикой, вы можете пометить свой вопрос как биоинформатику. Кроме того, вы повторяете много вещей три раза, что слишком плохо, как программист. Однако вы можете использовать следующие фрагменты:

class Codons(object): 

     def __init__(self, seq): 
       self.seq = seq 

     def codons(self, frame_one, frame_two, frame_three): 

       while frame_one <=len(self.seq): 
        yield (self.seq[frame_one:frame_one+3]) 
        frame_one += 3 

       while frame_two <=len(self.seq): 
        yield (self.seq[frame_two:frame_two+3]) 
        frame_two += 3 

       while frame_three <=len(self.seq): 
        yield (self.seq[frame_three:frame_three+3]) 
        frame_three += 3 


test_codons = Codons("ATCGTG-") 

val = test_codons.codons(0,1,2) 

print("Codons are: ") 
for i in val: 
     print(i) 

print("") 

И сообщите нам, если это сработало для вас. Ура !!

+0

О, подождите. Это дает мне синтаксическую ошибку. возможно, требуется отступы где-то ... – user3630429

+0

Я снова запустил программу, она отлично работает на моем Ubuntu. Я предполагаю, что вы допустили ошибку при копировании ее :) –

+0

Я использую python 3. Должны ли это иметь какое-то значение? – user3630429