Manipuler les chaînes de caractères
Dans cette leçon nous approfondissons la notion de chaînes de caractères pour voir leurs similarités avec les listes. Cela nous permettra de les manipuler efficacement dans la leçon de cryptographie !
- 1
Il y a deux grandes similarités entre les listes et les chaînes de caractères. La première : les lettres d'une chaîne de caractères sont indexées, comme les éléments d'une liste. C'est-à-dire qu'elles sont numérotées en partant de 0.
Par exemple dans la chaîne de caractères
"Python"
la lettre numéro 0 est le'P'
, la lettre numéro 1 le'y'
etc.Donc on peut facilement récupérer l'initiale d'un mot :
>>> "Python"[0] 'P'
Dans l'éditeur, il y a un message d'un boucher à son collègue. Exécute le code puis, dans la console, affiche la cinquième lettre du message en utilisant la notation indicée.
Solution
La cinquième lettre est à l'indice numéro 4 :
>>> message[4] e
- 2
Deuxième similarité : on peut itérer sur les éléments d'une string, c'est-à-dire les lettres qui la compose. Ainsi en faisant :
for c in "Python": print(c)
On affiche une à une chaque lettre de la chaîne
"Python"
. La variablec
(pour caractère) peut se nommer différemment. À chaque itération cette variable prend la valeur du caractère suivant et peut être utilisée dans le corps de la boucle (par exemple dans leprint
)Utilise une boucle pour afficher un à un les caractères contenus dans la variable
message
Solution
On adapte le code de l'exemple :
for c in message: print(c)
- 3
Comme les listes et chaînes de caractères sont itérables, il y a des fonctions communes aux deux. Par exemple
len
.Combien y a-t-il de caractères dans la variable message ? Utilise la fonction
len
dans la console pour le savoir.Solution
On appelle la fonction
len
sur la variablemessage
>>> len(message) 30
Il y a donc 30 caractères dans la variable
message
. Ce nombre compte tous les caractères même les espaces et la ponctuation. - 4
Voici un nouveau concept : il est possible de faire des opérations sur les listes et les chaînes de caractères. On peut par exemple additionner deux listes pour créer une plus grande liste contenant tous les éléments :
>>> [1,2] + [3,4] [1,2,3,4]
De même on peut additionner deux chaînes de caractères pour former une chaîne plus grande :
>>> "bon" + "jour" 'bonjour'
Cette opération s'appelle la concaténation. Pratique pour ajouter un élément à la fin ou au début.
Dans la console utilise une addition pour ajouter la chaîne
" stp"
à la fin de la variablemessage
. Attention aux espaces.Solution
Il faut faire une concaténation de la variable
message
et de la chaîne" stp"
qui contient un espace initial.>>> message + " stp" passe le morceau un peu rassis stp
- 5
Autre nouveauté : la notation indicée permet aussi de sélectionner plusieurs éléments.
Par exemple
message[6:8]
permet d'obtenir tous les caractères entre l'indice 6 et 8 exclu, donc les indices 6 et 7 :>>> message[6:8] le
Et pour avoir tous les caractères jusqu'à la fin, je n'indique que l'indice de départ en laissant les ':'
>>> message[6:] le morceau un peu rassis
Utilise cette notation dans la console pour afficher tous les caractères de la variable
message
à partir de l'indice 17.Solution
Pour avoir tous les caractères à partir de l'indice 17 on indique uniquement le premier indice :
>>> message[17:] un peu rassis
- 6
Enfin, certaines propriétés sont propres aux chaînes de caractères. Cela se traduit par des méthodes qui n'existent que sur ce type.
Par exemple
split
nous permet de découper une chaîne à chaque occurrence d'un caractère donné. Cette méthode renvoie une liste. Pratique pour avoir la liste les mots qui composent un message, on découpe à chaque espace :>>> "sur un arbre perché".split(' ') ["sur", "un", "arbre", "perché"]
Pour avoir la liste des consonnes de
kayak
je découpe à chaquea
:>>> "kayak".split('a') ["k","y","k"]
Dans l'éditeur crée une variable
mots
contenant la liste des mots de la variablemessage
et affiche cette liste à l'aide d'unprint
Solution
Il faut découper la chaîne de caractères de la variable
message
à chaque espace :message = "passe le morceau un peu rassis" mots = message.split(' ') print(mots)
- 7
Crée une boucle for qui itère sur chacun des mots de la liste
mots
et utilise la notation indicée pour afficher toutes les lettres de ces mots à partir de l'indice 1.Solution
Pour chaque mot de la liste
mots
on souhaite afficher toutes les lettres qui le compose à partir de l'indice 1 :message = "passe le morceau un peu rassis" mots = message.split(' ') for mot in mots: print(mot[1:])
De cette manière on peu modifier une chaîne de caractères en la transformant mot à mot. On
peut remplacer l'initiale de chaque mot par un X en faisant la concaténation 'x' + mot[1:]
. Ou bien on pourrait aussi mettre l'initiale à la fin du mot avec la concaténation
mot[1:] + mot[0]
. De cette manière on obtient notre propre language
incompréhensible de l'extérieur, notre propre argot !