SunuLab
Notre savoir
CoursIntermédiaire13 min de lecture

Les chaînes de caractères

Indexer, découper, parcourir et transformer du texte — la structure de données que tu manipules le plus

§1.Une chaîne est une SUITE de caractères

Jusqu'ici tu as traité le texte comme un bloc insécable : tu l'affichais, tu le stockais. Mais une chaîne a une structure interne — c'est une suite ordonnée de caractères, et on peut atteindre chacun d'eux individuellement.

C'est le premier objet composé du parcours, et tout ce que tu apprends ici se transposera presque mot pour mot aux listes du chapitre suivant. Index, tranches, parcours, longueur : mêmes notations, mêmes règles.

§2.L'indexation commence à zéro

Le premier caractère porte l'index 0, le deuxième l'index 1, et ainsi de suite. Pour une chaîne de n caractères, le dernier index est donc n − 1.

Cette convention déroute, puis devient naturelle. Elle vient d'une raison technique — l'index représente un DÉCALAGE depuis le début — et elle est universelle en informatique.

Python ajoute une commodité rare : les index négatifs. −1 désigne le dernier caractère, −2 l'avant-dernier. Plus besoin de calculer len(mot) − 1.

Atteindre un caractère
python
mot = "Python"
print(mot[0]) # premier
print(mot[3]) # quatrième
print(mot[-1]) # dernier
print(mot[-2]) # avant-dernier
print(len(mot)) # nombre de caractères
Résultat : P h n o 6

Les index vont de 0 à 5 pour ce mot de 6 lettres. Écrire mot[6] provoque une IndexError : "string index out of range".

§4.Les index de « Python »

CaractèrePython
Index positif012345
Index négatif-6-5-4-3-2-1

§5.Les tranches : extraire un morceau

La notation mot[debut:fin] extrait une portion. Comme pour range, la borne de DÉBUT est incluse et celle de FIN est exclue.

Cette règle a un avantage pratique : mot[0:3] contient exactement 3 caractères, et mot[:3] + mot[3:] reconstitue la chaîne entière sans trou ni doublon.

Les deux bornes sont facultatives : omettre le début signifie « depuis le commencement », omettre la fin signifie « jusqu'au bout ».

Découper une chaîne
python
mot = "programmation"
print(mot[0:4]) # de 0 à 3
print(mot[:4]) # pareil, début sous-entendu
print(mot[4:]) # de 4 jusqu'au bout
print(mot[-4:]) # les quatre derniers
print(mot[2:8]) # une portion au milieu
Résultat : prog prog rammation tion ogramm

Une tranche hors limites ne plante pas : mot[50:] renvoie simplement une chaîne vide, là où mot[50] provoquerait une IndexError. C'est une différence utile à connaître.

Joue avec les tranches
Chargement de l'éditeur Python…

§8.Inverser une chaîne

Retourner un texte est une opération si fréquente — palindromes, algorithmes de parcours — qu'elle mérite sa propre section.

La fonction reversed() parcourt une suite à l'envers. Elle ne renvoie pas directement une chaîne, mais une suite de caractères qu'on réassemble avec join().

Deux façons d'inverser
python
mot = "Dakar"
# Avec reversed() et join()
print("".join(reversed(mot)))
# À la main, avec un accumulateur
resultat = ""
for lettre in mot:
resultat = lettre + resultat
print(resultat)
Résultat : rakaD rakaD

La version manuelle mérite d'être comprise : à chaque tour, on colle la nouvelle lettre DEVANT ce qu'on a déjà. C'est le même principe que la conversion en binaire du chapitre sur les boucles.

La conséquence de l'immuabilité
python
mot = "bonjour"
mot.upper() # renvoie une nouvelle chaîne… qu'on jette
print(mot)
mot = mot.upper() # il faut la récupérer
print(mot)
Résultat : bonjour BONJOUR

L'erreur est fréquente : appeler une méthode sans stocker son résultat. Comme rien ne plante, on peut chercher longtemps pourquoi « ça ne marche pas ».

§13.Les méthodes de chaînes les plus utiles

.upper() / .lower()
Renvoient la chaîne tout en majuscules ou tout en minuscules.
Exemple. Comparer sans tenir compte de la casse : if reponse.lower() == "oui":
.strip()
Enlève les espaces au début et à la fin. Indispensable sur une saisie utilisateur.
Exemple. " Awa ".strip() donne "Awa".
.replace(ancien, nouveau)
Remplace toutes les occurrences.
Exemple. "a-b-c".replace("-", " ") donne "a b c".
.split(separateur)
Découpe la chaîne en une LISTE de morceaux. Sans argument, découpe sur les espaces.
Exemple. "12 7 5".split() donne ["12", "7", "5"].
.count(x) / .find(x)
Compte les occurrences ; renvoie l'index de la première (ou −1 si absente).
Exemple. "banane".count("a") donne 3.
.startswith(x) / .endswith(x)
Teste le début ou la fin de la chaîne.
Exemple. fichier.endswith(".py") vaut True ou False.

§14.Parcourir une chaîne

Deux façons de faire, et la première est presque toujours la bonne : la boucle for peut parcourir directement les caractères, sans passer par les index.

On ne recourt aux index que lorsqu'on a besoin de la POSITION du caractère, pas seulement de sa valeur.

Deux parcours, un seul idiomatique
python
mot = "Sénégal"
# Directement sur les caractères — à privilégier
for lettre in mot:
print(lettre, end=" ")
print()
# Par les index — quand la position compte
for i in range(len(mot)):
print(i, mot[i])
Résultat : S é n é g a l 0 S 1 é 2 n 3 é 4 g 5 a 6 l

Le paramètre end=" " remplace le retour à la ligne habituel de print par un espace. C'est ce qui permet d'afficher sur une seule ligne.

Compter avec un accumulateur

Le motif du chapitre précédent s'applique tel quel au texte.

python
phrase = "programmation en python"
voyelles = 0
for lettre in phrase:
if lettre in "aeiouy":
voyelles += 1
print(voyelles, "voyelles")
Résultat : 8 voyelles

L'opérateur in teste l'appartenance : lettre in "aeiouy" demande « cette lettre figure-t-elle parmi ces six-là ? ». C'est bien plus court que six comparaisons enchaînées avec or.

Un palindrome

Un palindrome se lit pareil dans les deux sens. Avec l'inversion par tranche, ça tient en une ligne.

Chargement de l'éditeur Python…

§18.split et join : le couple texte / liste

split découpe un texte en liste. join fait exactement l'inverse : il assemble une liste en texte, en glissant un séparateur entre les éléments.

Ce couple sert dès qu'on traite des données saisies sur une seule ligne — une série de notes, une liste de mots, des valeurs séparées par des virgules.

Aller-retour entre texte et liste
python
ligne = "12 7 15 9"
morceaux = ligne.split()
print(morceaux)
total = 0
for m in morceaux:
total += int(m)
print("Somme :", total)
print("-".join(morceaux))
Résultat : ['12', '7', '15', '9'] Somme : 43 12-7-15-9

Remarque les guillemets dans la liste affichée : split renvoie des CHAÎNES, pas des nombres. D'où le int(m) avant d'additionner. La syntaxe de join se lit à l'envers de ce qu'on attend : c'est le SÉPARATEUR qui porte la méthode.

À retenir

  • Une chaîne est une suite indexée à partir de 0 ; −1 désigne le dernier caractère.
  • Les tranches [debut:fin] excluent la fin ; une tranche hors limites renvoie une chaîne vide au lieu de planter.
  • Pour inverser : "".join(reversed(mot)). L'idiome mot[::-1] est standard en Python mais indisponible dans l'interpréteur du navigateur.
  • Une chaîne est IMMUABLE : les méthodes renvoient une nouvelle chaîne, il faut la récupérer.
  • upper, lower, strip, replace, split, count, find, startswith : la trousse de base.
  • for lettre in mot parcourt les caractères ; les index ne servent que si la position compte.
  • in teste l'appartenance : if lettre in "aeiouy".
  • split découpe en liste, join réassemble ; split renvoie des chaînes, pas des nombres.
Mots-cléschaînestrindexslicingméthodeimmuablesplitjoinparcours