2016-04-09 7 views
0

Ich nehme eine Codierungsklasse in Python 3 und ich brauche Hilfe herauszufinden, was mit meinem Code falsch ist. Grundsätzlich nehme ich eine mRNA-Sequenz und spleiße die Exons in der Sequenz aus. Ich gebe der Funktion eine Sequenz und die Position der Exons, und dann muss sie sie spleißen und die mRNA-Kette zurückgeben. Der Punkt der Zuweisung ist, dass wir keine List Comprehensions-, Split- oder Join-Methoden verwenden sollen. Hier ist, was ich bisher:Spleißen mRNA für eine Weile Schleifen

def splice(seq, exons): 
    newseq = "" 
    i = 0 
    for x in exons: 
     while i < len(seq): 
      if i == x[0]: 
       i += (x[1] - x[0]) 
      else: 
       newseq += seq[i] 
       i = i + 1 
    return newseq 

Wie es jetzt ist, meinen Code gibt die mRNA-Sequenz mit nur das erste Exon gespleißt und nicht von den anderen in der Liste der Exon-Standorten. Wie folgt aus:

>> splice("AAACCCTTTTGGGTTTAA", [(3,6), (10,16)]) 
'AAATTTTGGGTTTAA' 

Es soll dies zurückkehren (für mein gegebenes Beispiel): ‚AAATTTTAA‘

Hat jemand irgendwelche Vorschläge, wie diese Arbeit zu machen? Vielen Dank! (Erinnerung, die ich nie vor diesem Semester außer ein klein wenig in Java codiert haben, so bitte nicht zu kritisch von mir.)

Antwort

0

Versuchen Sie folgendes:

def splice(seq, exons): 
    newseq = "" 
    next = 0 
    for x, y in exons: 
     newseq += seq[next:x] 
     next = y 
    newseq += seq[next:]   
    return newseq 

und Prüfung:

>>> splice("AAACCCTTTTGGGTTTAA", [(3,6), (10,16)]) 
'AAATTTTAA' 
+0

Ich glaube, Sie sind Missverständnis, was mein Code soll –

+0

Ja tun, falsch verstanden ich. Probier diese. – Kidus

+0

Ah, jetzt funktioniert das! Danke :) –

0

Ich weiß nicht, ob Sie eine while-Schleife haben müssen. Hier ist eine Version nur die for-Schleife:

def splice(seq, exons): 
    newseq = "" 
    i = 0 
    n = 0 
    for x in exons: 
     newseq = seq[i:x[0]-n]+seq[x[1]-n:] 
     seq = newseq 
     n = x[1]-x[0] 
     i = x[0] - n 
    return newseq 

splice("AAACCCTTTTGGGTTTAA", [(3,6), (10,16)]) 
+0

Dies schien nicht zu funktionieren ... Überprüfen Sie meine Bearbeitung zu meiner Frage –

+0

Jetzt sollte es funktionieren. –