Proteinsyntese og mutasjoner
Programmering av livets kode: Fra DNA til RNA til protein
DNA til RNA
Transkripsjon skjer når DNA kopieres til RNA. Hver base i DNA får sin komplementære base (A → U, T → A, C → G, G → C). I Python kan vi forenkle dette ved hjelp av en for-løkke, bruke indeks for å se på ett og ett tegn (base) ad gangen, og bygge opp en ny tekststreng.
dna = "AATGGCTA"
rna = ""
# Vi går gjennom hver bokstav vha indeks (lengden er 8)
for i in range(len(dna)):
base = dna[i]
if base == "A":
rna += "U"
elif base == "T":
rna += "A"
elif base == "C":
rna += "G"
elif base == "G":
rna += "C"
print("RNA-tråd:", rna)Sjekk forståelsen (Programmering):
I koden over bruker vi indeksering med dna[i].
Gitt strengen dna = "AATGGCTA", hva vil
uttrykket dna[3] evaluere til?
Innføring: Dictionaries i Python
Før vi kan oversette RNA til proteiner trenger vi å lagre en såkalt kodon-tabell. Den forteller oss hvilken kode (f.eks "AUG") som gir hvilken aminosyre (f.eks "Met"). I Python lagrer vi sånne tabeller og oversettelser i noe vi kaller for en dictionary (ordliste).
En dictionary fungerer ved å koble sammen en nøkkel (key) med en verdi (value). Istedenfor å bruke tall-indekser (0, 1, 2) som i arrays/strenger, slår vi opp på en nøkkel.
# Eksempel på en dictionary
hovedsteder = {
"Norge": "Oslo",
"Sverige": "Stockholm",
"Danmark": "København"
}
# For å slå opp verdien til en nøkkel, bruker vi [ ]
print(hovedsteder["Norge"]) # Skriver ut: OsloRNA til Protein
Ribosomet leser RNA i grupper på tre (kalles kodoner). Hvert kodon tilsvarer en spesifikk aminosyre. Nå som vi kjenner til Dictionaries, kan vi lagre hele kodon-tabellen i en stor ordbok. Vi looper så over strengen med et steg på 3 av gangen og oversetter!
kodontabell = {
"UUA": "Leu", "CUA": "Leu",
"CCU": "Pro", "GAC": "Asp"
# (og mange flere kombinasjoner...)
}
rna = "UUACCUGAC"
protein = ""
# Vi hopper med steg på 3: range(start, stopp, steg)
for i in range(0, len(rna), 3):
kodon = rna[i:i+3]
aminosyre = kodontabell[kodon]
protein += aminosyre + "-"
print("Protein:", protein)Sjekk forståelsen (Programmering):
Hvordan slår vi opp aminosyren for kodonet "CCU" i ordlisten kodontabell over?
Interaktiv Simulator
Nedenfor har vi en simulator som kombinerer programmene for transkripsjon og translasjon. Prøv å endre basene i DNA-strengen for å se hva som skjer med kodonene og til slutt proteinet.
Opprinnelig DNA
TAC CGC TCC GCC GTC
AUGGCGAGGCGGCAG
Met-Ala-Arg-Arg-Gln
Mutert DNA (Endre tekst her!)
AUGGCGAGGCGGCAG
Met-Ala-Arg-Arg-Gln
Vil du ha koden?
Her kan du laste ned alle de tre Python-programmene som er vist over i én samlet fil.
Videre Programmeringsoppgaver
Oppgave 1.1: Hent den siste bokstaven
Du har en DNA sekvens dna = "AGTC".
Hvordan kan du printe ut den aller siste bokstaven i
strengen uten å telle manuelt?
- Bruk `len(dna)` minus 1 for indeks
Oppgave 1.2: Loop og print
Skriv en for-løkke som går gjennom `dna
= "CGT"` og printer hver bokstav på en ny linje vha
indeksen.
Oppgave 2.1: Enkel Dictionary
Lag en dictionary kalt komplement hvor nøklene
er "A", "T", "C", "G" og verdiene er deres motparter
for RNA ("U", "A", "G", "C"). Slå opp verdien til "A".
Oppgave 2.2: Kombinert oppslag
Nå har du Dictionarien fra forrige oppgave. Gå igjennom for-løkken du lærte i begynnelsen (over strengen `AGT`), og for hver bokstav, bruk ordboken til å bygge den nye strengen, fremfor alle IF-setningene!
Oppgave 3.1: Stopp-kodonet
Sett at du looper gjennom en rna streng `rna = "UUGCCUUGAGCC"`. Hvis aminosyren fra Dictionary er "Stop", hvordan avslutter du bare selve for-løkken slik at den slutter å bygge proteinet? Tips: keyword i Python.
Oppgave 3.2: Finn mutasjonen
Gitt to strenger `dna1` og `dna2` med lik lengde.
Skriv et program med en `for`-løkke som itererer
over indekser og printer ut posisjonen i til arrayen hvis base på begge disse ikke matcher hverandre.
Oppgave 4.1: Feil Indeksering
Koden feiler med en feilmelding. Hvorfor får vi feil, og hvordan kan man løse det?
dna = "GCA"
siste = dna[3]
print(siste)Oppgave 4.2: Dictionary problemer
Prøver å lage en codon-table og slå opp, men vi får `KeyError` eller SyntaxError. Rett opp feilene:
table = {
UUG : "Leu"
CCU : "Pro"
}
print(table["uug"])