Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Ipt Mpsi TP6

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 4

Lycée Malherbe Année scolaire 2018-2019 MPSI - Informatique pour tous

TP no 6 - Chaı̂nes de caractères

Un corrigé sera placé sur mon site à l’issue des séances:


http://roux.lycee.malherbe.free.fr/
Nous avons déjà fait un TP sur les listes Python. Et de fait, les manipulations des listes et des chaı̂nes
de caractères sont très proches. Ce TP devrait donc avoir une saveur de déjà-vu !
Cependant, au fur et à mesure qu’on avance dans l’année, les programmes sont des plus en plus longs
et complexes : c’est normal !

1 Quelques commandes, déjà vues ou non


Une chaı̂ne de caractère est délimitée par des apostrophes ', des guillemets ", des triples apostrophes
''' ou des triples guillemets """. Les caractères peuvent être des lettres minuscules ou majuscules,
éventuellement accentuées, des symboles, etc. Accessoirement, l’espace est également considéré comme
un caractère.
Il y a aussi un caractère spécial noté \n qui correspond à un passage à la ligne.

1 Essayez de taper dans la console :


1 >>> s="Il fait\nbeau"
2 >>> s
3 >>> print(s)

2 Quel est le nombre de caractères de la chaı̂ne s ci-dessus ? Le vérifier avec la commande adéquate.

3 Créez les chaı̂nes s1="diplo" et s2="docus" et concaténez-les pour créer s3 qui devrait être un
dinosaure.

4 A partir de s3, comment obtenir simplement le caractère 'p' ?

5 Comment créer la sous-chaı̂ne 'lodoc' ?

6 La commande append fonctionne-t-elle avec les chaı̂nes de caractères ?


La plupart des commandes sur les chaı̂nes ont une syntaxe du type “méthode”, c’est-à-dire
chaine.commande(args) (rappelez-vous de append sur les listes).

7 Par exemple, créez une chaı̂ne s4 contenant le texte que vous souhaitez, puis tapez s4.upper() La
chaı̂ne s4 a-t-elle été modifiée par cette commande ?
En allant dans l’aide de str, vous trouverez d’autres commandes du même type. . .

2 Recherche de caractères

8 Créez une fonction caractere(M,c) prenant en entrée deux chaı̂nes de caractères, la chaı̂ne c étant
de longueur 1, et retournant True ou False selon que c est ou n’est pas un caractère de M.

1
Bien sûr, il suffit d’écrire c in M pour avoir la réponse. . . mais parcourez donc la chaı̂ne M “manuel-
lement” : ce TP est un entraı̂nement.

9 Créez une fonction positions_caractere(M,c) qui renvoie la liste des positions où on trouve le
caractère c dans M.
Par exemple, pour la chaı̂ne ornithorynquologie et la lettre o, on devra obtenir r0, 6, 12, 14s. Si le
caractère ne se trouve pas dans la chaı̂ne, on obtiendra une liste vide.

10 Créez une fonction compte_caractere(M,c) prenant en entrée deux chaı̂nes de caractères, la


chaı̂ne c étant de longueur 1, et retournant le nombre de fois où on trouve le caractère c dans M.
On pourrait bien renvoyer la longueur de la liste de la question précédente. . . faites plutôt un comp-
teur !

11 ‹ Sauriez-vous utiliser la fonction sum pour répondre à la question précédente ?

3 Recherche de sous-chaı̂nes

12 Ecrire une fonction match(M,m,p) qui détermine si on peut lire le mot m en position p dans M.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Par exemple, dans le mot M “ on
a b c a e b c d a b c d a b c

0 1 2
peut lire le mot m “ en positions 5 et 9, mais nulle part ailleurs.
b c d
Bien sûr, il suffit d’écrire m==M[p:p+len(m)] (slicing) pour avoir la réponse. . . mais parcourez donc
la chaı̂ne m “manuellement” : ce TP est un entraı̂nement.

13 Ecrire une fonction sous_mot(M,m) prenant en entrée deux chaı̂nes de caractères, et retournant
True ou False selon que m est ou n’est pas un sous-mot de M (on dit aussi que m est un motif de M).
Avec l’exemple ci-dessus, la fonction renvoie True.
Bien sûr, il suffit d’écrire m in M pour avoir la réponse. . . mais parcourez donc la chaı̂ne M “manuel-
lement” : ce TP est un entraı̂nement.

14 Ecrire une fonction positions_sous_mot(M,m) prenant en entrée deux chaı̂nes de caractères et


retournant la liste (éventuellement vide) de positions où on peut lire m dans M. Avec l’exemple ci-dessus,
la fonction renvoie [5,9].

15 Ecrire une fonction compte_sous_mot(M,m) prenant en entrée deux chaı̂nes de caractères et re-
tournant le nombre de positions où on peut lire m dans M. Avec l’exemple ci-dessus, la fonction renvoie 2.
On pourrait bien renvoyer la longueur de la liste de la question précédente. . . faites plutôt un comp-
teur !

16 ‹ Sauriez-vous utiliser la fonction sum pour répondre à la question précédente ?

17 Les fonctions que vous avez écrites ne fonctionnent-elles pas aussi avec des listes ?

2
3.1 Application
On donne le programme suivant.

1 from random import randint
2
3 nucleotides=’ATGC’
4
5 def caractere_aleatoire():
6 return nucleotides[randint(0,3)]
7
8 def chaine_aleatoire(n):
9 return ’’.join([caractere_aleatoire() for _ in range(n)])
10
11 if __name__=="__main__":
12 print(chaine_aleatoire(300))
 

18 Que fait la fonction chaine_aleatoire ?

19 Réécrivez la fonction chaine_aleatoire “à la main”, sans utiliser la fonction join.

20 Créez une chaı̂ne aléatoire m de longueur 5, et une deuxième M de longueur 104 . Déterminez le
nombre d’occurences de m dans M . Faites la moyenne sur une centaine d’exemples de M .
Pouvait-on prévoir ce résultat par un calcul de probabilités ?

4 Pour terminer
4.1 Répétition d’un nucléotide
On reprend l’application de la section précédente.

21 ‹‹ Ecrire une fonction longueurA(M) qui renvoie la longueur de la plus longue sous-chaı̂ne de M
formée uniquement du nucléotide A.
Par exemple, longueurA(ACTAAACCCTTGGGATTACATGGGGAAGGTGTCGTAAAACGATTTTCAAC) renvoie 4.

22 ‹ ‹ ‹ Ecrire une fonction longueurATGC(M) qui renvoie la longueur de la plus longue sous-chaı̂ne
de M formée du même nucléotide (A, T , G ou C).
Par exemple, longueurATGC(CGAGTTCGCAGAAGTGTCCATATAAGATAGGCCGAGTTTTTCATCAGCGT) renvoie 5.

4.2 Jeux de mots (questions ouvertes)


A prendre comme un casse-tête de synthèse sur ce qu’on a fait jusqu’à présent.

23 ‹‹ Créez (et documentez) une fonction nombre_mots qui compte le nombre de mots de la chaı̂ne de
caractères. Par exemple, nombre_mots('Il fait très beau') devrait donner 4.
Vous pourrez notamment être attentifs : aux espaces répétés, aux signes de ponctuation, aux apos-
trophes. . .

3
24 ‹ ‹ ‹ Ecrire une fonction long_mot qui prend en argument une chaı̂ne de caractères et renvoie la
longueur du plus long mot du texte. On suppose que la chaı̂ne passée en argument est formée uniquement
de mots composés de lettres majuscules ou minuscules, séparés par un ou plusieurs espaces (pas de
ponctuation). Par exemple, en passant en argument la chaı̂ne

Le lion est le roi des animaux

la valeur renvoyée est 7 (“animaux” a 7 lettres).

Vous aimerez peut-être aussi