Aller au contenu

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é :

Indices d'une chaîne

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'
Il faut comprendre le code 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
L'erreur d'indexation 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
On a voulu modifier la première lettre : cela provoque une erreur.

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'étiquette a : Immuable 01

  • En ligne 2, nous créons l'objet "l'informatique !" puis nous lui accolons l'étiquette b : Immuable 02

  • En ligne 3, nous concaténons les objets étiquetés a et b, c'est à dire nous fabriquons un nouvel objet de valeur "Vive l'informatique !" : Immuable 03 Ensuite, nous accolons à ce nouvel objet l'étiquette a : Immuable 04

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.