Informatique Pour Tous Interrogation n°2 Conversions Syntaxe Python
Transcription
Informatique Pour Tous Interrogation n°2 Conversions Syntaxe Python
Nom : Prénom : Informatique Pour Tous Interrogation n°2 Conversions 1) Donner en base 10 la valeur des nombres suivants considérés comme des entiers signés codés en machine sous forme d’octets a) 10111001 – 71 b) 10010111 – 105 Syntaxe Python 2) Soit une variable prix contenant une valeur numérique de type float, par exemple 20.3. Comment obtenir la variable chaine contenant la chaîne de caractères : « cet objet coûte 20.3 euros, ce n’est pas cher » dit-il où 20.3 est la valeur contenue dans prix ? chaine = ‘ ‘‘cet objet coûte’ + str(prix) + ’euros, ce n\’est pas cher’’ dit-il’ 3) Préciser le type des variables dans la série d’instructions suivantes : v0 = 365892145 type(v0): int v5=["deux",3, "trois",2] type(v5): list v1 = 3.65892145 type(v1): float v7 = v5[2] type(v6):str v2 = 3 > 2 type(v2): bool v6 = v5[1:4] type(v7): lst v3 ‘3.65892145’ v4 = input(« entrez un float ») = type(v3): str type(v4): str v8 = v1,int(v5[2]) v9 = v0 / 2 erreur type(v9): float 4) Soit une liste lst définie par : lst = [2, (2,1), ‘2’, 2 < 1, 2 + 1] Indiquez les valeurs des variables suivantes : v1 = lst[2] v1 = ‘2’ v2 = lst[1:3] v2 = ‘2’] v3 = lst[-2] v3 = False Informatique Pour Tous v4 = lst[3:] [(2,1), v5 = lst[2] lst[4] v6 = lst[0] lst[4] page 1/6 v4 = [False, 3] * v5 = ‘222’ * v6 = 6 PCSI1 2015-2016 5) Quelles sont les valeurs entières produites par l'instruction range(4,13,2) ? # attention range(4, 13, 2) s’arrête à 13 – 1 ; il ne signifie pas « ordonner » 4, 6, 8, 10, 12 6) Quelle est l’affichage produit par le programme suivant : def f(n) : s = 0 for k in range(1 , n+1) : s += 1/k return s print(f(5)) 1.0 # car le return arrête la fonction dès la première itération de la boucle, pour laquelle k = 1 et s = 1.0 Sémantique Python 7) On considère les scripts Python suivants : Script 1 : exp = 2 for i in range(3): exp = 2**exp print(exp) Script 2 : expo=2 for i in range(3): expo=expo**2 print(expo) Compléter les tableaux d’état suivants correspondant à chaque script: t i 0 exp t 2 0 i expo 2 1 0 4 1 0 4 2 1 16 2 1 16 3 2 65536 3 2 256 8) On considère le programme Python suivant : from math import sqrt def mystere(n): if n <= 1: return False if n <= 3: return True for k in range(2,1 + int(sqrt(n))): if n % k == 0 : return False return True Qu’affiche print(mystere(12) ? print(mystere(13) ? print(mystere(n)) où n est une variable contenant une valeur entière quelconque. print(mystere(12) renvoie False print(mystere(13) renvoie True print(mystere(n) renvoie True si n est premier, False sinon. Informatique Pour Tous page 2/6 PCSI1 2015-2016 Algorithmique On sait depuis le début des années 1950 que l’information génétique d’un organisme vivant est mémorisée dans la molécule d’ADN de ses chromosomes. Cette molécule, constituée de deux brins complémentaires, est un long enchaînement de nucléotides de quatre types différents (distingués par leur base azotée : adénine, thymine, cytosine et guanine) désignés par les lettres A, T, C et G. Séquencer le génome d’un organisme, c’est établir l’enchaînement de ces nucléotides. La taille du génome peut varier de quelques milliers de nucléotides chez les virus à plusieurs milliards de nucléotides (3,4 milliards pour l’homme par avec les quatre lettres A, T, C et G. exemple). La molécule d’ADN apparaît ainsi comme un très long texte écrit À titre de comparaison un livre de poche de 1 000 pages comporte environ deux millions de caractères. D’autre part, seules certaines parties de cet enchaînement, appelées régions codantes et correspondant aux gènes, ont un problème technique. Les difficultés commencent avec l’interprétation de ce sens. Aujourd’hui séquencer le génome d’un organisme ne pose plus de très long texte sans espace, ni point, ni virgule. Une séquence d’ADN sera représentée par une chaîne de caractères comportant uniquement les caractères A, T, C et G. Exemple utilisé dans la suite : ADN_exemple =’ATCTCATGCTCGGTAATATGTCATAGCCGATGCTACGATGACCTAC’ COMPLEMENT PYTHON La bibliothèque random, est supposée préalablement chargée par l’instruction from random import *, l’instruction choice(range(n)) permet de générer un nombre entier (pseudo-)aléatoire compris entre 0 et n – 1. 9) On définit la variable car = (‘A’, ‘T’, ‘C’, ‘G’) contenant l’ensemble des caractères possibles d’une séquence ADN. Justifiez le choix du type de cette variable. La variable est un tuple car les éléments qu’il contient ne changent pas pendant le traitement ultérieur. 10) En utilisant la variable car définie ci-dessus comme variable locale, écrire une fonction sequence_ADN(n) ayant pour paramètre d’entrée un entier naturel n et renvoyant une séquence d’ADN aléatoire de longueur n. Ajouter tout commentaire utile. def sequenceADN(n): car = ('A', 'T', 'C', 'G') adn = ' ' # initialisation de la chaine for k in range(n): r=choice(range(4)) # tirage au sort d’un entier compris # entre 0 et 3 adn = adn + car[r] # ajout à la chaîne du caractère # d’indice r du tuple car return(adn) Informatique Pour Tous page 3/6 PCSI1 2015-2016 Une région codante est une succession de codons (triplet de nucléotides) non-chevauchants qui commence par un triplet ATG (appelé codon start) et s’achève par l’un des trois triplets TAA, TAG ou TGA (appelés codons stop). Exemple : ...AGTT ATG CTC GGA ACC TGT ATG TCA GGG GTT TAA CTAC... région codante Une région codante est composée d’un nombre entier de codons. 11) Écrire une fonction codon_start(ADN) prenant en entrée une séquence d’ADN (chaîne de caractères) et renvoyant une liste contenant la position de tous les codons start ‘ATG’ trouvés (on indiquera l’indice du ‘A’). Si aucun codon ‘ATG’ n’est trouvé, la fonction doit renvoyer une liste vide. Ajouter tout commentaire utile. Par exemple codon_start(ADN_exemple) renvoie [5,17,29,37]. def codon_start(ADN): n = len(ADN) liste = [] # liste initialement vide à construire for k in range(n - 2): # inutile de parcourir la chaîne # jusqu’au bout puisque un codon # contient 3 éléments if ADN[k : k+3] == 'ATG': #on cherche un ATG liste.append(k) return(liste) 12) Écrire une fonction codon_stop(ADN, i) prenant en entrée une séquence d’ADN (chaîne de caractères) et l’indice i du début d’un codon start et renvoyant l’indice du début du premier codon stop (de la forme TAA, TAG ou TGA) suivant celui-ci. Les codons start et stop doivent être en phase, c’est-àdire séparés par un nombre de nucléotides multiple de 3. Si aucun codon stop n’est trouvé, la fonction doit renvoyer le booléen False. Ajouter tout commentaire utile. Par exemple : codon_stop(ADN_exemple,5) donne 23 ; codon_stop(ADN_exemple,17) donne 23 ; codon_stop(ADN_exemple,29) donne 38 ; codon_stop(ADN_exemple,37) donne False. def codon_stop(ADN, i): codons_cherches = (‘TAA’, ‘TAG’, ‘TGA’) pos = i + 3 #on commence après le codon start while pos <= len(ADN)- 2: # tant que pos n’est pas # au bout de la chaine if ADN[pos : pos + 3] in codons_cherches : return(pos) # on a trouvé un codon stop else : pos = pos + 3 return(False) Informatique Pour Tous # on n’a pas trouvé, on décale pos de 3 # on a rien trouvé dans la chaîne page 4/6 PCSI1 2015-2016 13) Écrire une fonction regions_codantes(ADN) prenant en entrée une séquence d’ADN et renvoyant la liste des emplacements des régions codantes de cette séquence. Les emplacements seront de la forme (a,b) où a est l’indice du début du codon start et b est l’indice du début du codon stop de la région. Cette fonction renvoie donc une liste de tuples. On fera attention à ne pas renvoyer de régions codantes chevauchantes. Si aucune région codante n’est trouvée, la fonction doit renvoyer la liste vide. Ajouter tout commentaire utile. Par exemple : : regions_codantes(ADN_exemple)=[(5,23),(29,38)]. def regions_codantes(ADN): liste_start = codon_start(ADN) #emplacements des codons start n = len(liste_start) #nombre de codons starts liste_regions = [] # initialisation de la liste # des emplacements des régions codantes stop_prec = 0 # initialisation des codons stop trouvés for start in liste_start : # on prend la position # d’un codon start stop = codon_stop(ADN , start) # on cherche un codon stop # en phase avec start if stop != False and start >= stop_prec: #si on en a un # et si la région ne chevauche pas la précédente liste_regions.append((start, stop)) stop_prec = stop # dernier codon stop trouvé return(liste_regions) 14) Écrire une fonction detail_regions_codantes_aff(ADN) prenant en entrée une séquence d’ADN et renvoyant la liste des caractères de chaque région codante de cette séquence. Chaque région codante sera donnée sous la forme d’une chaîne de caractères et chaque codon sera séparé par le caractère |. Si aucune région codante n’est trouvée, la fonction doit renvoyer la liste vide. Ajouter tout commentaire utile. Par exemple : detail_regions_codantes_aff(ADN_ exemple) donne [’|ATG|CTC|GGT|AAT|ATG|TCA|TAG|’,’|ATG|CTA|CGA|TGA|’]. def detail_regions_codantes(ADN): liste_tuple_region = regions_codantes(ADN) #liste des tuples # désignant les régions liste_regions=[] # initialisation de la liste #des régions détaillées for region in liste_tuple_region : chaine_region = '|' # intialisation d’une chaîne start = region[0] # debut du codon start stop = #fin du codon stop region[1]+2 for i in range(start, stop+1, 3): chaine_region = chaine_region + ADN[i : i+3]+'|' liste_regions.append(chaine_region) return(liste_regions) Informatique Pour Tous page 5/6 PCSI1 2015-2016 Informatique Pour Tous page 6/6 PCSI1 2015-2016