TP 6 Chaˆınes de caract`eres 25
6.2 Manipulations basiques des index et du slicing
Dans l’interpr´eteur Python, d´eclarez la variable maChaine contenant "D´e finitivement, j’aime Python!" (ou
tout autre texte de votre choix). Trouvez et testez les expressions qui affichent : 1le premier caract`ere de la chaine,
2le dernier (2 possibilit´es), 3les trois premiers caract`eres de la chaine, 4les trois derniers (2 possibilit´es), 5les
caract`eres entre le troisi`eme et l’avant-dernier.
Que se passe-t-il lorsque l’un des indices de d´ecoupage (slicing ) d’une chaine est erron´e ? On testera notamment le
cas o`u le second indice est plus petit que le premier, et le cas o`u le second indice est plus grand que la taille de la
chaine.
Programme affichageSimple.py :Dans le script nomm´e affichageSimple.py, ´ecrivez (comme en TD)
un programme qui demande la saisie d’une chaˆıne puis affiche chaque caract`ere de celle-ci sur une nouvelle ligne.
Programme recherche.py :Dans un script Python nomm´e recherche.py, on souhaite programmer une
fonction de recherche ´equivalente `a la m´ethode find de la classe str.
A: ´
Ecrivez une fonction trouve(chaine, caractere) ayant deux param`etres chaine et caractere qui cherche
si le caractere est pr´esent dans la chaine, et si oui, renvoie l’indice de la premi`ere occurrence du caract`ere
trouv´e dans la chaˆıne. Si le caract`ere n’est pas trouv´e, la fonction renverra 1. La fonction ´ecrite ne devra
(bien entendu) pas utiliser la m´ethode find ni la m´ethode index.
Par exemple, trouve("Bonnie et Clyde","e")devra renvoyer 5, tandis que l’instruction : trouve("Bonnie
et Clyde","a")devra renvoyer 1.
Testez votre fonction dans le programme principal avec les exemples ci-dessus et comparez les r´esultats avec
ceux de la m´ethode find de la classe str.
B: Am´eliorez la fonction trouve(chaine, caractere) pr´ec´edente en impl´ementant une nouvelle fonction
trouveV2(chaine, caractere, indiceDebut) ayant un troisi`eme param`etre : l’indice `a partir duquel la re-
cherche doit s’e↵ectuer dans la chaˆıne. Comme pr´ec´edemment, trouveV2(chaine, caractere, indiceDebut)
renvoie l’indice de la premi`ere occurrence de caractere dans chaine, mais en commen¸cant cette fois la
recherche dans la chaine `a partir du caract`ere d’indice indiceDebut.
Ainsi, l’instruction : trouveV2("Tarzan et Jane","a", 2) devra renvoyer : 4(et non 1, l’indice du premier
’a’ ! qui est inf´erieur `a l’indice du d´ebut de la recherche). De mˆeme, trouveV2("Tarzan et Jane","a", 7)
devra renvoyer : 11.
Testez cette fonction en comparant son r´esultat `a celui de la m´ethode find (utilis´ee avec deux param`etres).
On pourra chercher une solution utilisant trouve et un slicing.
C: Am´eliorez la fonction trouveV2(chaine, caractere, indiceDebut) pr´ec´edente en impl´ementant la fonction
trouveV3(chaine, caractere, indiceDebut, indiceFin) ayant un quatri`eme param`etre : l’indice `a la fin
duquel la recherche doit s’e↵ectuer. Ainsi, l’instruction : trouveV3("Cyrano et Roxane","o", 6, 10) devra
renvoyer -1 . On pourra aussi chercher une solution utilisant trouve ou trouveV2 et un slicing.
Testez cette fonction en comparant son r´esultat `a celui de la m´ethode find (utilis´ee avec trois param`etres).
6.3 Un peu de cryptographie sur les chaˆınes
La cryptographie (voir http://fr.wikipedia.org/wiki/Cryptographie) est l’art de rendre illisible un mes-
sage pour qui ne d´etient pas un secret (ou cl´e) permettant de d´echi↵rer ce message. Diverses techniques ont
travers´e l’Histoire, les plus anciennes et simples ´etant celles qui traitent de caract`eres, dans un alphabet minimum
ne comportant que des lettres majuscules et sans ponctuation.
Une biblioth`eque Python, nomm´ee crypto, est disponible sur le site du TP pour faciliter ce traitement. Cette
biblioth`eque est contenue dans le fichier crypto.pyc qui doit ˆetre copi´e dans votre r´epertoire de travail. Vos
scripts Python utilisant la biblioth`eque doivent comporter la directive d’import import crypto en d´ebut de
script. Cette biblioth`eque comporte les fonctions :
3crypto.formatChaine(chaine) : renvoie la chaine pass´ee en param`etre sans d’autres caract`eres que des
lettres en majuscules sans accents, c´edilles etc.