Accèder aux caractères d'une chaîne☘
La longueur d'une chaîne de caractères est le nombre de caractères de la chaîne (évidemment sans compter les guillemets ou apostrophes délimiteur de la chaîne).
La fonction len()
(abréviation de length) permet de connaître cette longueur.
>>> chaine = "Vive l'informatique !"
>>> len(chaine)
21
En comptant les caractères de la chaîne "Vive l'informatique !"
, on constate que l'espace, l'apostrophe et le point sont des caractères comme les autres.
Numérotation☘
Chaque caractère de la chaîne est indexé, c'est-à-dire repéré par un nombre (un numéro), ce qui permet d'avoir un accès rapide au caractère désiré :
Les caractères sont ainsi numérotés de 0 à longueur(maphrase)-1.
On peut obtenir le caractère d'indice i
par maphrase[i]
:
>>> maphrase = "Vive l'informatique !"
>>> maphrase[0]
'V'
>>> maphrase[1]
"i"
>>> maphrase[2]
'v'
>>> maphrase[len(maphrase)-1]
'!'
>>> maphrase[len(maphrase)-2]
' '
>>> maphrase[22]
File "<stdin>", line 1
maphrase[22]
IndexError: string index out of range
Pythonnerie
Python autorise également de numéroter -1
le dernier élément, -2
l'avant-dernier, etc... jusqu'à -len(maphrase)
pour le premier :
>>> maphrase = "Vive l'informatique !"
>>> maphrase[-1]
'!'
>>> maphrase[-2]
' '
>>> maphrase[-len(maphrase)]
'V'
maphrase[-1]
comme une abréviation de maphrase[len(maphrase)-1]
.De même
maphrase[-2]
comme une abréviation de maphrase[len(maphrase)-2]
, etc...
Attention
Il ne faut pas choisir un indice supérieur ou égal à la longueur de la chaîne sinon la sanction est immédiate :
>>> maphrase = "Vive l'informatique !"
>>> maphrase[22]
File "<stdin>", line 1
maphrase[22]
IndexError: string index out of range
IndexError
est malheureusement fréquente quand on débute...
Objet immuable☘
Une chaîne est immuable, ce qui signifie qu'on ne peut pas la modifier après l'avoir définie :
>>> maphrase = "Vive l'informatique !"
>>> maphrase[0] = 'R'
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
Exemple☘
Justifier que les lignes ci-dessous ne contredisent pas ce qui a été dit sur le fait qu'une chaîne est immuable.
>>> a = "Vive "
>>> b = "l'informatique !"
>>> a = a + b
>>> a
'Vive l'informatique !'
Réponse
Ces lignes ne modifient pas l'objet chaîne de caractères :
-
En ligne 1, nous créons l'objet
"Vive "
, puis nous lui accolons l'étiquettea
: -
En ligne 2, nous créons l'objet
"l'informatique !"
puis nous lui accolons l'étiquetteb
: -
En ligne 3, nous concaténons les objets étiquetés
a
etb
, c'est à dire nous fabriquons un nouvel objet de valeur"Vive l'informatique !"
:Ensuite, nous accolons à ce nouvel objet l'étiquette
a
:
A ce stade, l'objet "Vive "
n'a plus d'étiquette (du coup, il n'est plus accessible) mais l'objet "Vive "
n'a pas été modifié : un nouvel objet a été créé et une étiquette a été décollée d'un objet pour être recollée sur un autre.
En d'autres termes, la variable a
ne désigne plus l'objet de départ de valeur "Vive "
, mais désigne un nouvel objet.