Aller au contenu

Accèder aux caractères d'une chaîne

Longueur

La longueur d'une chaîne de caractères est le nombre de caractères de la chaîne.

La fonction len (abréviation de length) permet de connaître cette longueur.

>>> a = "J'aime Python."
>>> len(a)
14

Comptez les caractères dans la chaîne ci-dessus: vous constatez que le blanc, l'apostrophe, le point sont des caractères comme les autres.

Numérotation

Dans une chaîne de caractères, chaque caractère est numéroté de 0 à longueur(chaîne)-1.

On peut obtenir le caractère numéro i par chaine[i]:

>>> a = "J'aime Python."
>>> a[0]
'J'
>>> a[1]
"'"
>>> a[2]
'a'
>>> a[len(a)-1]
'.'
>>> a[len(a)-2]
'n'

Python autorise également de numéroter -1 le dernier élément, -2 l'avant-dernier...:

>>> a = "J'aime Python."
>>> a[-1]
'.'
>>> a[-2]
'n'
>>> a[-len(a)]
'J'

Il faut comprendre le code a[-1] comme une abréviation de a[len(a)-1]. De même a[-2] comme une abréviation de a[len(a)-2]...

Présence d'un caractère

Pour vérifier la présence d'un caractère dans une chaîne, on peut utiliser in.

>>> 'a' in 'babar'
True
>>> 'a' in 'Python'
False

Immuable

Une chaîne est immuable, ce qui signifie qu'on ne peut pas la modifier après l'avoir définie.

>>> ch = "Coucou les loulous."
>>> ch[0] = 'B'
Traceback (most recent call last):
  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.
L'erreur indiquée est 'str' object does not support item assignment, ce qui signifie ici qu' un objet de type str (string) ne peut pas se voir affecter une modification.

Attention

Il s'agit là encore d'une erreur que vous devez connaître et savoir corriger par vous-même.

Exercice

Avec les lignes suivantes:

>>> a = "Bonjour "
>>> b = "les loulous."
>>> a = a + b
>>> a
'Bonjour les loulous.'

Il semble que la chaîne désignée par a ait été modifiée.

Contredit-on avec ces lignes ce que nous avons dit plus haut sur le fait qu'une chaîne est immuable?

indication

Pour répondre, rappelez-vous ce qui a déjà été dit sur les variables. Qu'est ce qui change ? L'objet ou son étiquette ?

Réponse

La réponse est non: une chaîne de caractères est bien immuable.

Il faut bien comprendre que la ligne a = a + b ne modifie pas l'objet chaîne de caractères "Bonjour ". Cette ligne a = a + b crée une nouvelle chaîne puis lui accole l'étiquette a.

Nous détaillons un peu ci-dessous ce processus.

En ligne 1, nous créons l'objet "Bonjour ", puis nous lui accolons l'étiquette a.
a désigne l'objet de type str, de valeur 'bonjour':

En ligne 2, nous créons l'objet "les loulous." puis nous lui accolons l'étiquette b.

En ligne 3, nous concaténons les objets étiquetés a et b, c'est à dire nous fabriquons un nouvel objet "Bonjour les loulous." puis nous lui accolons l'étiquette a.

A ce stade, l'objet "Bonjour " n'a plus d'étiquette (et n'est du coup plus accessible) mais l'objet "Bonjour " 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 (ou en d'autres termes, la variable a ne désigne plus l'objet de départ de valeur "Bonjour", mais désigne un nouvel objet).