Lecture de fichier ADN
Un brin d'ADN est une succession de bases nucléiques symbolisées par A, T, G, C pour adénine, thymine, guanine, cytosine. Une fonction de l'ADN est de coder les protéines que la cellule sera chargée de synthétiser. Pour se faire, un brin d'ADN complémentaire est créé :
A ⇒ U (uracile), T ⇒ A, G ⇒ C, C ⇒ G
puis chaque triplet – codon – de bases code une acide aminé.
Par exemple, UAU code pour Y : tyrosine
On vous fournit un fichier codons.csv précisant toutes les associations codon ⇒ acide aminé. Voici les premières lignes du fichier.
| codon | Symbole | Acide aminé |
|---|---|---|
| UUU | F | Phenylalanine |
| UUC | F | Phenylalanine |
| UUA | L | Leucine |
| UUG | L | Leucine |
| CUU | L | Leucine |
Complétez le fichier adn.py ci-dessous :
# adn.py
import csv
file = open('codons.csv', 'r', encoding='utf8')
reader = csv.DictReader(file, delimiter=';')
CODONS= []
for row in reader:
CODONS.append(dict(row))
file.close()
def longueur_valide(brin_adn:str) -> bool:
"""
brin_adn: chaîne de caractères représentant un brin d'adn
Renvoie True si le brin_adn contient un nombre de lettres multiple de 3
"""
# tests :
assert longueur_valide('') == True
assert longueur_valide('AGTCCCACT') == True
assert longueur_valide('AGTCCCAC') == False
def contenu_valide(brinADN:str) -> bool:
"""
brin_adn: chaîne de caractères représentant un brin d'adn
Renvoie True si le brin_adn ne contient que les lettres ATGC
"""
# tests :
assert contenu_valide('') == True
assert contenu_valide('AGTCCCACT') == True
assert contenu_valide('AGTCCXCAC') == False
def brin_complementaire(brin_adn:str) -> str:
"""
brin_adn: chaîne de caractères représentant un brin d'adn
précondition : brin_adn ne contient que les lettres ATGC
Renvoie la chaîne correspondant au brin complémentaire.
exemple:
>>> brin_complementaire('AATCACGGG')
'UUAGUGCCC'
"""
# tests
assert brin_complementaire('') = ''
assert brin_complementaire('AATCACGGG') = 'UUAGUGCCC'
def recherche_symbole(codon:str) -> str:
"""
codon: triplet complémentaire.
Renvoie le symbole de l'acide aminée correspondante
exemple :
>>> recherche_symbole('UUA')
'L'
précondition: codon existe
"""
# test
assert recherche_symbole('UUA') == 'L'
def adn_to_acides(brin_adn:str) -> str:
"""
brin_adn: chaîne de caractères représentant un brin d'adn
Renvoie la chaîne correspondant à la suite d'acides aminés.
exemple:
>>> adn_to_acides('AATCACGGG')
'LVP'
"""
# tests
assert adn_to_acides('') == ''
assert adn_to_acides('AATCACGGG') == 'LVP'
J'ai choisi d'écrire CODONS en majuscules pour souligner son statut particulier : CODONS une fois défini ne change pas et est utilisé en variable globale.
On évite d'utiliser des variables globales, mais ici c'est justifié : Le contenu de CODONS est fixé une fois pour toutes, il n'est pas susceptible de changer en cours de programme, on n'envisage pas d'utiliser les fonctions avec des contenus CODONS différents.
