☀️ Stage Pré-rentrée · dès le 24 aoûtRéserver ma place →
Majorant
📘 Fiche de cours · 1re année📐 MPSI💻 Informatique Informatique communeNiveau · Terminale → Sup

Chaînes de caractères

Indexer, découper et parcourir une chaîne, utiliser les méthodes essentielles (upper, count, replace, split, join) et comprendre qu'une chaîne est immuable — avec le test du palindrome et deux exercices corrigés.

Fiche rédigée par les mentors Majorant — alumni Polytechnique, CentraleSupélec et Mines Paris.

4 définitionsMis à jour le 2026-08-02

Vue d'ensemble

Une chaîne de caractères (type str) est du texte : un mot, une phrase, un code, une réponse au clavier. En prépa, tu manipuleras des chaînes en permanence — pour lire des données, afficher des résultats, coder des algorithmes sur les mots. L'idée-clé à ne jamais oublier : une chaîne est immuable. On peut la lire caractère par caractère et en fabriquer de nouvelles, mais jamais modifier une chaîne existante « sur place ».

Cette fiche te donne tous les réflexes : indexer, découper, parcourir, et les méthodes utiles (upper, replace, split, join…), avec les pièges qui font perdre des points en début d'année.

Objectif passerelle Terminale → Sup — Les chaînes sont supposées connues dès la première semaine de prépa. On consolide ici les bases de NSI pour arriver avec des automatismes solides avant que les algorithmes ne s'enchaînent.

Prérequis

  • Savoir affecter une variable et connaître les types de base (int, str…)
  • Savoir écrire une boucle for simple
  • Aucune notion avancée de prépa n'est requise
🎯 Accompagnement Majorant

Tu bloques sur les indices, le slicing ou l'immuabilité ? Ce sont exactement les points qui coûtent des heures en début d'année. Nos mentors alumni X · Centrale · Mines reprennent les bases avec toi, à ton rythme, avant que le programme ne s'accélère.

Trouver un mentor →

1. Qu'est-ce qu'une chaîne

Définition 1.1 — Chaîne de caractères

Une chaîne (type str) est une suite ordonnée de caractères, écrite entre guillemets. On peut utiliser des guillemets doubles "..." ou des apostrophes '...' : les deux sont équivalents.

mot = "bonjour"        # guillemets doubles
autre = 'salut'        # apostrophes : même chose
vide = ""              # chaîne vide (aucun caractère)
print(mot)             # affiche : bonjour
📝 Chaîne vide et deux sortes de guillemets. "" (deux guillemets collés) est la chaîne vide, de longueur 0 : un point de départ idéal pour construire du texte. Par ailleurs, 'salut' et "salut" sont identiques ; on choisit l'un pour écrire l'autre dans le texte ("l'oiseau", 'il dit "oui"').

Séquences d'échappement

Certains caractères spéciaux s'écrivent avec un antislash \ : c'est une séquence d'échappement. Le couple \ + lettre compte pour un seul caractère.

Les séquences d'échappement à connaître
ÉcritureSignification
\nretour à la ligne
\ttabulation
\"un guillemet " à l'intérieur d'une chaîne en guillemets doubles
print("ligne 1\nligne 2")   # affiche les deux mots sur deux lignes
print("a\tb")               # affiche : a    b   (séparés par une tabulation)
print("il dit \"oui\"")     # affiche : il dit "oui"
📝 Un antislash, un caractère. Le \ dit à Python « le caractère qui suit est spécial » : \n passe à la ligne, \t insère une tabulation, \" met un guillemet dans le texte sans fermer la chaîne. Chaque séquence compte pour 1 caractère.
Définition 1.2 — Longueur d'une chaîne

La fonction len(s) renvoie le nombre de caractères de la chaîne s. Les espaces et les caractères spéciaux comptent chacun pour un.

len("bonjour")     # 7
len("")            # 0  (chaîne vide)
len("a b")         # 3  (l'espace compte)
len("a\nb")        # 3  (\n compte pour 1 seul caractère)

2. Indexer et découper

Chaque caractère d'une chaîne a une position (un indice). Attention : en Python, on compte à partir de 0.

Indices de la chaîne "PYTHON"
CaractèrePYTHON
Indice positif012345
Indice négatif-6-5-4-3-2-1
s = "PYTHON"
s[0]      # 'P'  premier caractère
s[2]      # 'T'  troisième caractère (indice 2)
s[-1]     # 'N'  dernier caractère
s[-2]     # 'O'  avant-dernier
len(s)    # 6    donc les indices valides vont de 0 à 5
📝 Trois réflexes d'indexation. Le premier caractère est à l'indice 0 (pas 1) ; -1 désigne le dernier, -2 l'avant-dernier ; et une chaîne de longueur 6 a ses indices valides de 0 à 5 (demander s[6] est une erreur).
Définition 2.1 — Découpage (slicing)

s[a:b] renvoie la sous-chaîne des caractères d'indice a inclus jusqu'à b exclu. On peut ajouter un pas : s[a:b:pas].

s = "PYTHON"
s[0:3]     # 'PYT'   indices 0, 1, 2  (3 est exclu)
s[2:]      # 'THON'  de l'indice 2 jusqu'à la fin
s[:3]      # 'PYT'   du début jusqu'à l'indice 3 exclu
s[::2]     # 'PTO'   un caractère sur deux (pas de 2)
s[::-1]    # 'NOHTYP' la chaîne renversée (pas de -1)
🔍 Décryptage — le slicing en détail
s[0:3]Borne de fin exclue. On prend les indices 0, 1, 2 mais PAS 3. La longueur du résultat vaut 3 - 0 = 3.
s[2:]Bornes omises. Sans borne de fin, on va jusqu'au bout. Sans borne de début (s[:3]), on part de 0.
s[::-1]Renversement. Un pas de -1 parcourt la chaîne de droite à gauche : c'est l'astuce standard pour retourner un mot.
⚠ Une chaîne est IMMUABLE. Le slicing et l'indexation ne font que lire : ils fabriquent une nouvelle chaîne sans jamais toucher à s. On ne peut pas écrire s[0] = "X" : c'est interdit (on le verra en section erreurs).

3. Parcourir une chaîne

Parcourir, c'est passer sur chaque caractère un par un. Deux façons de faire, qu'il faut savoir lire toutes les deux.

Parcours par caractère

À chaque tour, c prend la valeur d'un caractère de s, dans l'ordre — c'est la façon la plus simple et la plus lisible.

s = "abc"
for c in s:
    print(c)     # affiche a, puis b, puis c (une par ligne)

Parcours par indice

s = "abc"
for i in range(len(s)):
    print(i, s[i])   # 0 a, puis 1 b, puis 2 c
📝 Quand on a besoin de la position. range(len(s)) produit les indices 0 à len(s)-1, et s[i] donne le caractère à la position i. Cette forme est utile quand la position compte (ex. comparer s[i] et s[i+1]).
💡 Compter une lettre. On combine un parcours et un compteur : on part de 0, et on ajoute 1 chaque fois qu'on rencontre la lettre voulue.
s = "banane"
nb = 0
for c in s:
    if c == "a":
        nb = nb + 1
print(nb)      # 2
📝 Vérifie à la main. Le mot "banane" s'écrit b-a-n-a-n-e : il contient 2 lettres a. En traçant la boucle (0, puis 1 au 2ᵉ caractère, puis 2 au 4ᵉ), on retrouve bien nb = 2. Compter à la main sur un petit exemple reste le meilleur réflexe pour valider un code.

4. Les méthodes utiles

Une méthode s'appelle avec un point : s.upper(). Python fournit une boîte à outils très pratique pour les chaînes.

Le kit de survie sur les chaînes (soit s = "Bonjour, le monde")
AppelEffetRésultat
s.upper()tout en majuscules"BONJOUR, LE MONDE"
s.lower()tout en minuscules"bonjour, le monde"
s.count("o")nombre d'occurrences de "o"3
s.replace("o", "0")remplace tous les "o""B0nj0ur, le m0nde"
s.find("monde")indice de la 1re occurrence12
s.find("xyz")si absent : renvoie -1-1
" hi ".strip()enlève les espaces aux bords"hi"
🔍 Décryptage — les deux appels piégeux
s.replace("o", "0")Remplacer partout. Renvoie une chaîne où CHAQUE "o" est devenu "0". La chaîne d'origine, elle, ne bouge pas.
s.find("xyz")Chercher. Renvoie l'indice de départ si trouvé, sinon -1 (et non une erreur). Toujours tester if s.find(x) != -1.
⚠ Ces méthodes ne modifient PAS s (immuable !). s.upper() ne change pas s : elle renvoie une NOUVELLE chaîne. Pour garder le résultat, il faut réaffecter : s = s.upper(). Sinon la transformation est perdue.
s = "bonjour"
s.upper()          # renvoie "BONJOUR" mais on ne garde rien : s vaut toujours "bonjour"
s = s.upper()      # LÀ on garde le résultat : s vaut "BONJOUR"
Définition 4.1 — L'opérateur in, split et join

"x" in s teste si "x" est une sous-chaîne de s (renvoie un booléen). s.split(",") découpe la chaîne en une liste de morceaux. "-".join(liste) fait l'inverse : recolle une liste de chaînes en une seule.

"jour" in "bonjour"          # True   ("jour" est dedans)
"z" in "bonjour"             # False

"a,b,c".split(",")           # ['a', 'b', 'c']   -> une liste
"-".join(["a", "b", "c"])    # 'a-b-c'           -> une chaîne
🔍 Décryptage — de la chaîne à la liste et retour
"a,b,c".split(",")Découper. Coupe à chaque virgule et renvoie la LISTE des morceaux. Idéal pour lire une ligne de données séparées par des virgules.
"-".join(["a","b","c"])Recoller. Le séparateur est la chaîne à gauche du point ("-"). Il est inséré entre chaque élément de la liste.
🎯 Passe au niveau supérieur

Les méthodes de chaînes reviennent dans tous les TP d'info. Bien les maîtriser, c'est gagner un temps précieux aux concours. Nos mentors alumni X · Centrale · Mines t'entraînent sur des exercices type prépa pour ancrer ces réflexes durablement.

Réserver une séance →

5. Construire une chaîne

Comme une chaîne est immuable, on ne l'agrandit pas « en place » : on part d'une chaîne vide et on fabrique, tour après tour, une nouvelle chaîne un peu plus longue. C'est le patron d'accumulation.

s = "abc"
res = ""              # on part de la chaîne vide
for c in s:
    res = res + c     # on rallonge : res reçoit l'ancien res suivi de c
print(res)            # abc
🔍 Décryptage — l'accumulation
res = ""Point de départ neutre. La chaîne vide joue pour la concaténation le rôle que 0 joue pour l'addition.
res = res + cOn fabrique une NOUVELLE chaîne. Python évalue res + c (ancien contenu suivi de c) puis range le tout dans res. À chaque tour, res grandit d'un caractère.

Alternative avec join. Quand on a une liste de morceaux, "".join(...) recolle tout d'un coup, sans séparateur — souvent plus rapide et plus lisible que l'accumulation.

"".join(["a", "b", "c"])       # 'abc'      (séparateur vide)
"".join(["Ma", "jo", "rant"])  # 'Majorant'

Enfin, les f-strings (préfixe f) insèrent une variable entre accolades directement dans le texte — pratique pour fabriquer un message.

nom = "Alice"
age = 17
f"{nom} a {age} ans"        # 'Alice a 17 ans'  (le f rend les accolades actives)
f"le double : {2 * age}"    # 'le double : 34'  (on peut mettre un calcul entier)

6. Erreurs classiques (les pièges qui coûtent des points)

Ces erreurs reviennent dans toutes les copies de début d'année. Les connaître à l'avance, c'est autant de points sauvés.

⚠ Modifier un caractère : impossible. s[0] = "X" déclenche une TypeError : une chaîne est immuable, on ne peut pas réécrire un de ses caractères. Pour « changer » un caractère, on fabrique une nouvelle chaîne, par exemple avec du slicing : s = "X" + s[1:].
⚠ Oublier de réaffecter. Écrire s.upper() tout seul ne sert à rien : le résultat est calculé puis jeté. Il faut s = s.upper(). Même chose pour replace, strip, lower… : elles renvoient une nouvelle chaîne, elles ne modifient pas s.
⚠ Indice hors bornes (IndexError). Pour une chaîne de longueur n, les indices valides vont de 0 à n-1. Demander s[len(s)] ou plus déclenche une IndexError. Le dernier caractère est s[len(s)-1], ou plus simplement s[-1].
⚠ Confondre « in » sous-chaîne et appartenance. Sur une chaîne, "ab" in s teste si "ab" apparaît comme morceau de texte (pas comme un « élément »). Ainsi "jo" in "bonjour" vaut True. Ne le confonds pas avec l'appartenance à une liste, où in cherche un élément entier.
⚠ find renvoie -1, ce n'est pas une erreur. Si le motif est absent, s.find("xyz") renvoie -1 (le programme continue). Piège : -1 est aussi un indice valide (le dernier caractère !). Teste donc if s.find(x) != -1 plutôt que d'utiliser la valeur brute comme position.

7. Pour aller plus loin

Les chaînes ressemblent beaucoup aux listes : on les indexe, on les découpe, on les parcourt de la même façon. Ces chapitres réinvestissent directement ce que tu viens de voir.

Exo 1Compter les voyellesFacile

Écris un code qui compte le nombre de voyelles (a, e, i, o, u, y) dans un mot.

mot = "informatique"
voyelles = "aeiouy"
nb = 0
# ... à compléter
Voir la correction détaillée
On parcourt le mot caractère par caractère avec for c in mot.
Pour chaque c, on teste s'il est une voyelle avec l'opérateur in : if c in voyelles.
Si oui, on incrémente : nb = nb + 1.
mot = "informatique"
voyelles = "aeiouy"
nb = 0
for c in mot:
    if c in voyelles:
        nb = nb + 1
print(nb)      # 6
Vérifions à la main : « informatique » = i-n-f-o-r-m-a-t-i-q-u-e. Les voyelles sont i, o, a, i, u, e, soit 6.
Exo 2Tester un palindromeIntermédiaire

Un palindrome se lit pareil dans les deux sens (« kayak », « radar »). Écris un test qui dit si un mot est un palindrome.

Voir la correction détaillée
La chaîne renversée s'obtient avec le slicing s[::-1] (pas de -1).
Un mot est un palindrome exactement quand il est égal à son renversé : il suffit de comparer.
mot = "kayak"
est_palindrome = (mot == mot[::-1])
print(est_palindrome)    # True
Test : mot[::-1] vaut "kayak", égal à mot : le résultat est True. Sur "chat", le renversé est "tahc""chat" : False.

Récap final — Ce qu'il faut absolument retenir

Tu dois pouvoir répondre « oui » sans hésiter à chaque point.

  • Sais-tu écrire une chaîne avec "..." ou '...', et une chaîne vide "" ?
  • Sais-tu ce que valent \n, \t, \" et qu'ils comptent pour un caractère ?
  • Sais-tu que len(s) donne le nombre de caractères ?
  • Sais-tu que l'indexation commence à 0 et que s[-1] est le dernier caractère ?
  • Sais-tu découper avec s[a:b] (fin exclue) et renverser avec s[::-1] ?
  • Sais-tu qu'une chaîne est immuable (impossible de faire s[0] = "X") ?
  • Sais-tu parcourir avec for c in s et avec for i in range(len(s)) ?
  • Sais-tu que s.upper(), replace, strip… renvoient une NOUVELLE chaîne et qu'il faut réaffecter (s = s.upper()) ?
  • Sais-tu utiliser count, find (qui renvoie -1 si absent) et l'opérateur in ?
  • Sais-tu passer d'une chaîne à une liste avec split et l'inverse avec join ?
  • Sais-tu construire une chaîne par accumulation (res = res + c) ou avec "".join(...) ?
  • Sais-tu insérer une valeur dans du texte avec une f-string (f"{n} ans") ?

Débloque la fiche complète

Théorèmes, démonstrations à savoir refaire, méthodes-types et pièges de concours : crée ton compte gratuit pour tout lire. Une seule fois pour toutes les fiches et ressources Majorant.

Gratuit · vos données restent confidentielles.

Valide tes acquis

Quiz — Chaînes de caractères

6 questions · une à la fois · seuil de maîtrise 80 %.

Informatique commune · Terminale → SupQuiz — Chaînes de caractèresQuestion 1 / 6
FacileVrai / Faux1 pt

Une chaîne est modifiable : on peut écrire s[0] = "X" pour changer son premier caractère.

Sélectionne une réponse pour valider.

Fiches associées

Tu veux aller plus loin sur ce chapitre ?

Nos mentors alumni de Polytechnique, CentraleSupélec et Mines Paris t'accompagnent en cours particuliers — démonstrations détaillées, exos type concours, oraux blancs.

Trouver un mentor →