====== 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 |codons.csv}} précisant toutes les associations codon => acide aminé. Voici les premières lignes du fichier. 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.