De genetische code bestaat uit een aantal regels die vastleggen hoe levende cellen de informatie gecodeerd in genetisch materiaal (DNA- of RNA-sequenties) vertalen naar eiwitten (aminozuursequenties). Deze code definieert hoe een reeks van drie nucleotiden — codons genaamd — tijdens de eiwitsynthese specificeert welk aminozuur als volgende aan het eiwit zal toegevoegd worden.
Omdat de overgrote meerderheid van de genen exact dezelfde code gebruiken, wordt vaak naar deze specifieke code gerefereerd als de canonische of standaard genetische code, of zelfs eenvoudigweg als dé genetische code, terwijl er zich in feite verschillende variante codes ontwikkeld hebben. De eiwitsynthese in menselijke mitochondria is een voorbeeld waar een genetische code gebruikt wordt die afwijkt van de standaard genetische code.
Levende cellen gebruiken 20 verschillende aminozuren om eiwitten te coderen, die elk een eigen hoofdletter toegewezen krijgen. Met vier verschillende nucleotiden kan een code die vertrekt van 2 nucleotiden slechts maximaal $$4^2$$ of 16 verschillende aminozuren coderen. Een code van 3 nucleotiden kan daarentegen maximaal $$4^3$$ of 64 verschillende aminozuren coderen. Genetische codes zijn dan ook 3-letter codes waarbij sommige codons op hetzelfde aminozuur afgebeeld worden, of fungeren als een stopcodon. Een bepaalde genetische code kan dus (deels) vastgelegd worden door elk van de 64 mogelijke nucleotiden te koppelen aan een aminozuur (aangegeven door een hoofdletter) of een stopcodon (aangeduid door een sterretje (*)).
Definieer een klasse GenetischeCode waarmee specifieke genetische codes kunnen voorgesteld op basis waarvan genen kunnen vertaald worden naar eiwitten. Bij het aanmaken van een nieuwe genetische code (GenetischeCode) moet de locatie (str) doorgegeven worden van een tekstbestand met de vertaaltabel van een genetische code. Een dergelijk bestand bestaat uit 64 regels die elk een codon en het corresponderende aminozuur bevatten, van elkaar gescheiden door een spatie. Je mag ervan uitgaan dat het bestand alle 64 codons bevat. Voor de codons kan echter gebruikgemaakt worden van het DNA- (met T voor thymine) of het RNA-alfabet (met U voor uracil). Onderstaand voorbeeld gebruikt een bestand waarin het DNA-alfabet gebruikt wordt.
Voorts moet je op elke genetische code $$\mathcal{C}$$ (GenetischeCode) minstens de volgende methoden kunnen aanroepen:
Een methode aminozuur waaraan een geldig codon (str; DNA of RNA) moet doorgegeven worden. De methode moet een hoofdletter (str) teruggeven die staat voor het corresponderende aminozuur in genetische code $$\mathcal{C}$$. Bij deze vertaling mag de methode voor het gegeven codon geen onderscheid maken tussen hoofdletters en kleine letters, en ook niet tussen de letters U (uracil) en T (thymine). Op die manier kunnen zowel DNA- als RNA-codons aan de methode doorgegeven worden. Bekijk onderstaand voorbeeld om na te gaan hoe de methode moet reageren indien het argument geen geldig codon voorstelt.
Een methode eiwit waaraan een DNA- of RNA-sequentie (str) moet doorgegeven worden. Deze sequentie mag zowel hoofdletters als kleine letters bevatten, maar bestaat voorts enkel uit letters uit het DNA- of RNA-alfabet. Bekijk onderstaand voorbeeld om na te gaan hoe de methode moet reageren als het argument geen geldige DNA- of RNA-sequentie voorstelt. Als een geldige sequentie wordt doorgegeven, dan moet de functie de vertaling (str) ervan naar de corresponderende eiwitsequentie teruggeven. Deze vertaling mag enkel uit hoofdletters bestaan. Als de lengte van de gegeven DNA- of RNA-sequentie geen veelvoud is van drie, dan moeten de laatste of de laatste twee letters van de sequentie genegeerd worden bij de vertaling.
Bij onderstaand voorbeeld gaan we ervan uit dat het bestand standaard_code.txt1 zich in de huidige directory bevindt.
>>> code = GenetischeCode('standaard_code.txt2')
>>> code.aminozuur('AGT')
'S'
>>> code.aminozuur('cga')
'R'
>>> code.aminozuur('UCU')
'S'
>>> code.aminozuur('ABC')
Traceback (most recent call last):
AssertionError: 'ABC' is geen geldig codon.
>>> code.aminozuur('aagc')
Traceback (most recent call last):
AssertionError: 'aagc' is geen geldig codon.
>>> code.eiwit('ATGCTGATGATGGGCTATTATCGAT')
'MLMMGYYR'
>>> code.eiwit('uauccuaguguc')
'YPSV'
>>> code.eiwit('AAGTCGTAGCTACGXXXXGAGAAGGAT')
Traceback (most recent call last):
AssertionError: ongeldige DNA- of RNA-sequentie.