Aller au contenu

Chaînes de caractères⚓︎

Les chaînes de caractères ne sont pas comme les entiers, les flottants et les booléens.
Une chaîne de caractères est une séquence, ce qui signifie que c'est une collection ordonnée d'autres valeurs.
Dans cette partie, vous verrez comment accéder aux caractères qui composent une chaîne, et vous apprendrez à utiliser certaines des méthodes que les chaînes de caractères fournissent.

1. Une chaîne de caractères est une séquence⚓︎

Une chaîne de caractères est une séquence de caractères.

Vous pouvez accéder aux caractères un par un, en utilisant l'opérateur [] d'indexation

🐍 Script Python
fruit = 'banane'
lettre = fruit[1]

La seconde instruction sélectionne le caractère numéroté par 1 de fruit et l'affecte à lettre.

L'expression entre crochets s'appelle un indice.
L'indice indique quel caractère de la séquence vous voulez (d'où son nom).

Mais il se peut que vous n'obteniez pas ce que vous attendez :

🐍 Script Python
>>> lettre
'a'

Pour la plupart des gens, la première lettre du mot 'banane' est b , et non a.
Mais pour les informaticiens, l'indice est un décalage à partir du début de la chaîne, et le décalage de la première lettre est zéro.

🐍 Script Python
lettre = fruit[0]
print(lettre)

>>> 
'b'

Donc b est la lettre numéro 0 (la « zéro-ième ») de 'banane', a est la lettre numéro 1 (« un-ième »), et n est la lettre numéro 2 (« deux-ième »).

Remarque

Comme indice, vous pouvez utiliser une expression qui contient des variables et des opérateurs:

🐍 Script Python
i = 1
print(fruit[i])

>>> 
'a'

>>> fruit[i+1]
'n'

Attention

Mais la valeur de l'indice doit être un entier.

Sinon, vous obtenez l'erreur suivante :

🐍 Script Python
lettre = fruit[1.5]
print(lettre)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[10], line 1
----> 1 lettre = fruit[1.5]

TypeError: string indices must be integers, not 'float'

2. Fonction len()⚓︎

Définition

len() est une fonction interne qui retourne le nombre des caractères d'une chaîne

🐍 Script Python
fruit = 'banane'
print(len(fruit))

>>>
6

Attention

Pour obtenir la dernière lettre d'une chaîne de caractères, vous pourriez être tentés à écrire quelque chose comme ceci :

🐍 Script Python
longueur = len(fruit)
dernier = fruit[longueur]

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-8-388bf9eed3ed> in <module>
    1 longueur = len(fruit)
----> 2 dernier = fruit[longueur]

IndexError: string index out of range
Mais cela va provoquer une ERREUR. La raison de IndexError est qu'il n'y a aucune lettre dans 'banane' ayant l'indice 6.
Puisque nous avons commencé à compter à partir de zéro, les six lettres sont numérotées de 0 à 5.

Pour obtenir le dernier caractère, vous devez soustraire 1 de longueur :

🐍 Script Python
longueur = len(fruit)
dernier = fruit[longueur - 1]
print(dernier)

>>>
'e'

Astuce

Vous pouvez utiliser des indices négatifs, qui comptent à l'envers à partir de la fin de la chaîne.
L'expression :


  • fruit[-1] donne la dernière lettre,
  • fruit[-2] donne l'avant-dernière,
  • et ainsi de suite.

🐍 Script Python
>>> fruit[-1]
'e'

>>> fruit[-2]
'n'

3. Parcours avec une boucle for⚓︎

Beaucoup de calculs impliquent le traitement d'une chaîne caractère par caractère.
Souvent, ils commencent au début, sélectionnent chaque caractère à tour de rôle, lui font quelque chose et continuent jusqu'à la fin.
Ce modèle de traitement est appelé un parcours.
Une façon d'écrire un tel parcours est une boucle while

🐍 Script Python
index = 0
while index < len(fruit):
    lettre = fruit[index]
    print(lettre)
    index = index + 1

>>>
b
a
n
a
n
e

Cette boucle parcourt la chaîne et affiche chaque lettre sur une ligne individuelle.
La condition de la boucle est index < len(fruit),
donc lorsque l'indice devient égal à la longueur de la chaîne, la condition devient fausse, et le corps de la boucle ne s'exécute plus.
Le dernier caractère accédé est celui d'indice len(fruit) -1, qui est le dernier caractère de la chaîne.

Une autre façon d'écrire un parcours est d'utiliser une boucle for:

A - Parcours par valeurs

🐍 Script Python
for lettre in fruit:
    print(lettre)

>>>
b
a
n
a
n
e
À chaque passage dans la boucle, le caractère suivant dans la chaîne est affecté à la variable lettre.
La boucle continue jusqu'à ce qu'il n'y ait aucun caractère restant.

B - Parcours par indices

🐍 Script Python
for i in range(len(fruit)):
    print(fruit[i])

>>>
b
a
n
a
n
e
À chaque passage dans la boucle, le caractère suivant dans la chaîne est donné à la valeure fruit[i].

4. Tranches de chaînes de caractères⚓︎

Un segment de chaîne de caractères s'appelle une tranche ou slice en anglais.
La sélection d'une tranche est similaire à la sélection d'un caractère

Exemple

🐍 Script Python
>>> texte = 'Monty Python'
>>> texte[0:5]
'Monty'
>>> texte[6:12]
'Python'

L'opérateur [n:m] retourne la partie de la chaîne allant du « n-ième » caractère, y compris celui-ci, au« m-ième » caractère, en excluant ce dernier.
Ce comportement est contre-intuitif, mais si vous imaginez les indices comme pointant entre les caractères, comme sur la Figure ci-dessous, cela peut vous aider. image

Remarques

  • Si vous omettez le premier indice(avant le deux-points), la tranche commence au début de la chaîne.
    Si vous omettez le second indice, la tranche s'étend jusqu'à la fin de la chaîne

    🐍 Script Python
    >>> fruit = 'banane'
    >>> fruit[:3]
    'ban'
    >>> fruit[3:]
    'ane'
    
    * Si le premier indice est supérieur ou égal au second,
    le résultat est une chaîne vide, représentée par deux guillemets simples

    🐍 Script Python
    >>> fruit = 'banane'
    >>> fruit[3:3]
    ''
    

5. Les chaînes sont des séquences non modifiables⚓︎

Les chaînes de caractères sont immuables (on dit aussi non mutables), ce qui signifie que vous ne pouvez pas modifier une chaîne existante.
Le mieux que vous puissiez faire est de créer une nouvelle chaîne qui est une variation sur l'original.

Exemple

🐍 Script Python
salut = 'bonjour à vous'

# On veut modifier le première lettre pour y mettre une majuscule

salut[0] = 'B'
print(salut)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-e6f57b090e39> in <module>
    3 # On veut modifier le première lettre pour y mettre une majuscule
    4 
----> 5 salut[0] = 'B'
    6 print(salut)

TypeError: 'str' object does not support item assignment

Cette erreur est provoquée à la deuxième ligne du script.

On y essaie de remplacer une lettre par une autre dans la chaîne, mais cela n'est pas permis.

Pour faire cela, il faut créer une nouvelle chaîne de catactères :

🐍 Script Python
salut = 'bonjour à vous'
salut = 'B' + salut[1:]  # On ajoute (concaténation) à B les lettres de la chaîne salut, à partir de la deuxième.
print(salut)

>>>
Bonjour à vous

6. Méthodes de chaînes de caractères⚓︎

Les chaînes de caractères fournissent des méthodes qui effectuent une variété d'opérations utiles.

Une méthode est semblable à une fonction - elle prend des arguments et renvoie une valeur -, mais la syntaxe d'appel est différente.

Au lieu de la syntaxe de fonction upper(mot), elle utilise la syntaxe de méthode, mot.upper().
Cette forme de notation pointée indique le nom de la méthode, upper, et le nom de la chaîne sur laquelle on applique la méthode, mot.
Les parenthèses vides indiquent que cette méthode ne prend aucun argument.

Un appel de méthode est appelé une invocation ; dans ce cas, nous dirions que nous invoquons upper sur mot.

  • Par exemple, la méthode upper prend une chaîne de caractères et retourne une nouvelle chaîne avec toutes les lettres en majuscule.

    la méthode lower prend une chaîne de caractères et retourne une nouvelle chaîne avec toutes les lettres en minuscule
🐍 Script Python
mot = 'banane'
nouveau_mot = mot.upper()
print(nouveau_mot)

>>>
'BANANE'
  • Méthode find

Cette méthode permet de trouver la position (l'indice) où le caractère choisi apparaît dans une chaine de caractère.

🐍 Script Python
mot = 'banane'
index = mot.find('a')
print(index)

>>>
1

Dans cet exemple, nous invoquons find sur mot et passons la lettre que nous recherchons en tant que paramètre.

Remarque

Pour trier les lettres d'une chaîne de caractères, on utlise la fonction sorted(). Cette fonction retourne une liste rangée dans l'ordre alphabétique.

🐍 Script Python
mot = 'banane'
print(sorted(mot))

>>>
['a', 'a', 'b', 'e', 'n', 'n']