Vous aurez souvent besoin de manipuler des chaînes de caractères, c'est à dire des suites de caractères pouvant former
des mots, des phrases,...
Les chaînes de caractères sont des types de variables pour lesquelles quelques spécificités existent, et sur lesquelles des fonctions particulières peuvent s'appliquer.
Lors de l'initialisation d'une variable de type chaîne, on utilise les guillemets simples ou doubles pour encadrer le contenu à stocker.
Par exemple :
ma_chaine = "ABCDEF"
mon_autre_chaine = 'abcdefghg'
La différence entre les deux écritures est que l’utilisation des guillemets doubles permet d'utiliser les guillemets simples à l'intérieur de la chaîne :
ma_chaine = "J'adore l'anglais !"
Il est parfois nécessaire d'initialiser une chaîne vide, c'est à dire qui ne contient aucun caractère :
chaine_vide =''
ou
chaine_vide = ""
Pour adresser ( = désigner ) un caractère particulier d'une chaîne ( et éventuellement le copier dans une autre variable ), on utilise l'écriture suivante :
chaine[indice]
chaine
est le nom de la variable contenant la chaîne, et indice
la position ( ou index ) du caractère depuis le début de la chaîne.
ATTENTION : une chaîne est, comme beaucoup de choses en informatique, "zéro-indiceée", c'est à dire que la numérotation des caractères commence de zéro et pas de 1
>>> ma_chaine = "Python !"
>>> ma_chaine[0]
'P'
>>> ma_chaine[1]
'y'
>>> ma_chaine[3]
'h'
Si l'indice est négatif, on compte les caractères depuis la fin de la chaîne ( le dernier caractère a l'indice -1 ) :
>>> ma_chaine = "Python !"
>>> ma_chaine[-1]
'!'
>>> ma_chaine[-4]
'o'
La fonction len(nom_de_la_chaine)
permet de déterminer le nombre de caractères présents dans une chaîne :
ch3 = "Cool la NSI..."
print(len(ch3))
>>> 14
La fonction compte TOUS les caractères, ponctuation et espaces compris...
On peut créer une chaîne en "assemblant" plusieurs chaînes les unes aux autres : on dit alors qu'on les concatène.
On utilise pour cela l'opérateur de concaténation qui n'est autre que signe +
A ne donc pas confondre avec l'addition !
En informatique, comme partout ailleurs, on ne peut pas de toute façon "ajouter des choux et des carottes", par exemple concaténer une variable
entière ( type int
) à une chaîne de caractères ( type str
), sinon Python affiche une erreur; il faut que les variables soient du même type, et il est donc parfois
nécessaire de "transformer" une variable vers un autre type; on dit que l'on transtype cette variable.
Parfois, Python transtype automatiquement les variables ( par exemple, les flottants et les entiers "cohabitent" très bien dans les expressions ), mais ce n'est pas toujours le cas; il existe donc des fonctions pour cela :
Fonction | transtypage vers le type... |
---|---|
int(variable) |
entier |
float(variable) |
flottant |
str(variable) |
chaîne |
A vous de déterminer dans un code, les situation où un transtypage est nécessaire, et quel est alors le type le mieux adapté...
Il est possible de concaténer une chaîne au début ou à la fin d'une autre selon l'ordre dans lequel on écrit les deux chaînes lors de l'instruction de concaténation :
chaine1 = 'abc'
chaine2 = chaine1 + 'def' # ajout A LA FIN de chaine1
print(chaine2)
>>> 'abcdef'
chaine3 = 'def' + chaine1 # ajout AU DÉBUT de chaine1
print(chaine3)
>>> 'defabc'
Python permet de plus des choses assez étonnantes et intuitives pour créer des chaînes de caractères.
Ainsi, si l'on veut par exemple créer une chaîne contenant plusieurs fois la même syllabe, il suffit d'écrire :
>>> 'to' * 3
'tototo'
>>> 'toc-' * 4
'toc-toc-toc-toc-'
Pas très utile pensez-vous ? Pourtant, si cette possibilité existe, c'est bien qu'elle a des applications...
De nombreux problèmes sur les chaînes de caractères nécessitent de parcourir l’intégralité de la chaîne afin d’obtenir la réponse à un problème donné, par exemple compter le nombre d'espaces dans une chaîne.
On peut parcourir successivement chaque caractère d'une chaîne, ont dit ainsi qu'une chaîne est itérable. Pour réaliser cette itération, on utilise une structure appelée boucle d'itération :
for caractere in chaine : # les noms de variable sont indicatifs !
# instruction(s) à exécuter
..........
..........
Voila comment cela fonctionne :
caractere
( on peut bien sûr utiliser un autre nom de variable...)
chaque caractère de la chaîne chaine
( autre nom possible bien entendu...)Voila un exemple qui affiche successivement chaque caractère d'une chaîne :
Seul Python propose cette façon d'itérer sur les caractères d'une chaîne; les autres langages utilisent une autre structure pour la boucle for
, que vous verrez plus tard.
Une fois une chaîne de caractères créée, il n'est plus possible d'en modifier ou d'en supprimer un ou plusieurs caractères : on dit qu'une chaîne est un objet immuable non-mutable.
On ne peut que "copier" un ou plusieurs caractères dans une autre variable, ou ajouter d'autre(s) caractère(s) en début en en fin de chaîne.
Par exemple, on obtient une erreur en cherchant à remplacer un caractère par un autre :
>>> nom = "Dupont"
>>> nom[5] = "d"
Traceback (most recent call last):
File , line 1, in
nom[5]="d"
TypeError: 'str' object does not support item assignment
De très nombreuses fonctions sont applicables aux chaînes : mises en majuscules, en minuscules,...Si nécessaire, vous rechercherez celle(s) dont vous aurez besoin.
Écrire un script qui :
Voila la chaîne en mémoire : "You're talking to me ?"
Index du caractère : 2
Le caractère à l'indice 2 est : u
Écrire un script qui :
len
len(chaine)
Entrer une chaîne : 'Forcément, elle va moins bien marcher...'
Longueur de la chaîne calculée : 40
Longueur de la chaîne avec la fonction len() : 40
Voila un de vos premiers algorithmes de comptage par accumulation : on parcourt tous les caractères de la chaîne, et on utilise une variable comme "compteur de caractères"; cette variable sera incrémentée à chaque caractère, et "accumulera" donc petit à petit le nombre total des caractères de la chaîne.
Écrire un script qui affiche une chaîne de caractères en "miroir".
La chaîne : 'Je suis ton père.'
La chaîne en miroir : '.erèp not sius eJ'
Il faudra parcourir tous les caractères de la chaîne, et les concaténer à une autre chaîne ( initialement vide ), qui contiendra la première en miroir.
Attention du coup à l'ordre dans lequel faire cette concaténation !