Bonjour, j’ai repris les sources de vos compléments. Dans ceux-ci, lorsque la distance entre l’index de départ et le codon trouvé n’est pas multiple de 3, vous incrémentez l’index de recherche de 3. Il me semble qu’ainsi vous maintenez le décalage indésirable. Dans mon code, je n’incrémente que de 1 et donc je pense qu’ainsi je trouve les codons valides pour la phase demandée. Qu’en pensez vous ? :
import re
#variables globales
global dna
dna=“CGGAATATGCGAAGGTTATGGAATTAAAGGGGGAATATGTGGGGAAGAGCCCAGGTAATATGAAAA”
#definition du codon start
global startCodon
startCodon =“ATG”
global stopCodon
stopCodon=re.compile(“TAA|TAG|TGA”)
#recherche d’un codon start dans la chaine dna a partir de la position start
def nextStart(dna,start):
#initialisation index recherche
Idx=start
#boucle infinie
while True:
#index = 1iere position codon start trouve
Idx=dna.find(startCodon,Idx)
#si non trouve dans chaine
if Idx == -1:
return None
#si ecart entre debut et position trouvee non multiple de 3 on se deplace de 1 bases
if(Idx-start)%3 != 0:
Idx+=1
continue
#si deplacement multiple de 3 on est OK
return Idx
def nextStop(dna,start):
#initialisation index recherche
Idx=start
#boucle infinie
while True:
#recherche codon stop depuis position depart
match=stopCodon.search(dna,Idx)
#si non trouve dans chaine
if match == None:
return None
#index = position depart codon sstop trouve
Idx =match.start()
#si distance depart codon trouve pas multiple de 3 on incremente index recherche
if (Idx-start)%3 != 0:
Idx+=1
continue
return Idx
return None
#recherche des codons start pour chaque phase
def scanStart():
for phase in 0,1,2:
print("Phase: ",str(phase))
next=phase
while next != None:
next=nextStart(dna,next)
if next != None:
print("START trouve a l’indice: ",next,dna[next:next+3])
next+=3
#recherche des codons stop pour chaque phase
def scanStop():
for phase in 0,1,2:
print("Phase: ",str(phase))
next=phase
while next != None:
next=nextStop(dna,next)
if next != None:
print("STOP trouve a l’indice: ",next,dna[next:next+3])
next+=3
scanStart()
scanStop()