Proteinsyntese og mutasjoner

Programmering av livets kode: Fra DNA til RNA til protein

Del 1: Transkripsjon

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: Oslo
Del 2: Translasjon

RNA 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?

Del 3: Full Proteinsyntese & Mutasjoner

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

↓ Transkripsjon

AUGGCGAGGCGGCAG

↓ Translasjon

Met-Ala-Arg-Arg-Gln

Mutert DNA (Endre tekst her!)

↓ Transkripsjon

AUGGCGAGGCGGCAG

↓ Translasjon

Met-Ala-Arg-Arg-Gln

Oppgave: Prøv å skape en taus mutasjon (protein endres ikke), og en enkelt mutasjon som endrer hele proteinet.

Vil du ha koden?

Her kan du laste ned alle de tre Python-programmene som er vist over i én samlet fil.

Videre Programmeringsoppgaver

Lett 🟢

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.

Medium 🟡

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!

Vanskelig 🔴

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.

Feilsøking 🔍

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"])