Prepa Help
Prepa Help › Cours › Informatique, 1re année

Chaînes de caractères en Python : cours, algorithmes sur les textes et exercices corrigés

Chaînes Python : codage des caractères, indexation, tranches, immuabilité, méthodes usuelles ; algorithmes sur les textes : comptage d'occurrences, recherche naïve d'un motif, palindromes, et pour le Maroc chiffrements de César et de Vigenère et compression RLE.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

Une chaîne de caractères Python, de type str, est une suite de caractères indexée de 0 à len(s) - 1, qu'on lit par s[i] et qu'on découpe en tranches s[i:j], mais qu'on ne modifie jamais : elle est immuable, et l'on construit une nouvelle chaîne. Le chapitre traite ensuite les algorithmes sur les textes : comptage d'occurrences et fréquences des lettres, recherche naïve d'un motif, prouvée et en O(nm)O(nm) au pire, palindromes, comparaison de deux textes. Il est au programme d'informatique commune de première année en MPSI, PCSI, PTSI, TSI et TPC, au Maroc et en France ; le programme marocain y ajoute le chiffrement de César, celui de Vigenère et la compression RLE. Les exercices reprennent des questions des sujets du CNC, de CCINP, de Mines-Ponts, de X-ENS et de Banque PT.

Ce que tu sauras faire

Un texte, pour un programme, est une chaîne de caractères : une étiquette de caisse, une ligne de cahier, une séquence d'ADN, un message. Ce chapitre apprend à manipuler ces chaînes sans erreur d'indice, puis les algorithmes qui travaillent sur les textes, et d'abord la recherche d'un motif. À la fin de ce chapitre, tu dois savoir :

L'essentiel : La recherche naïve Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

À retenir Positions, preuve, coût
  • Le motif apparaît en position ii si texte[i:i + m] == motif ; positions possibles : 0 à n−mn - m, soit range(n - m + 1).
  • Absent : on renvoie −1-1, jamais False (False == 0 vaut True).
  • Dans le while, la borne d'abord : j < m and texte[i + j] == motif[j].
  • Les occurrences peuvent se chevaucher : "aa" est en 0, 1 et 2 dans "aaaa", alors que "aaaa".count("aa") vaut 2.
  • Terminaison : m−jm - j décroît dans le while, au plus n−m+1n - m + 1 tours de for.
  • Invariants : texte[i:i + j] == motif[0:j] dans le while ; « aucune occurrence avant ii » dans le for.
  • Au plus m(n−m+1)m(n - m + 1) comparaisons, atteint pour un texte de a et un motif de a terminé par un b : O(nm)O(nm), quadratique si mm est de l'ordre de nn.

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 19 méthodes, 20 pièges corrigés, la carte mentale, 35 exercices corrigés, 6 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Les trois premiers chapitres de chaque matière sont offerts avec un compte d’essai gratuit.

Ouvrir l'essai gratuit

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Accéder à un caractère et extraire une tranche sans erreur d'indice
  2. Modifier, c'est reconstruire
  3. Choisir entre parcours par élément et parcours par indice
  4. Construire une chaîne par accumulation
  5. Passer d'un caractère à son code et revenir
  6. Compter un caractère, puis les fréquences des 26 lettres
  7. Comparer deux chaînes
  8. Découper avec split et recoller avec join
  9. Tester si un motif apparaît à une position donnée
  10. Rechercher la première occurrence d'un motif
  11. Rechercher toutes les occurrences
  12. Prouver la recherche naïve
  13. Compter les comparaisons et justifier O(nm)O(nm)
  14. Tester un palindrome avec deux indices
  15. Comparer deux textes position par position ou par leurs lettres
  16. Respecter les fonctions autorisées par un sujet
  17. Chiffrer et déchiffrer avec César, casser par force brute ou par les fréquences
  18. Chiffrer et déchiffrer avec Vigenère
  19. Compresser et décompresser en RLE

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (14)

Entraînement (16)

Approfondissement (5)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Peut-on modifier une chaîne de caractères en Python ?

Non : une chaîne est immuable. s[0] = "T" provoque une TypeError, et s.append(c) une AttributeError, car append est une méthode des listes. Pour « modifier » une chaîne, on en construit une nouvelle avec des tranches et des concaténations, puis on lui donne le nom de l'ancienne : s = "T" + s[1:len(s)]. Pour un très long texte construit dans une boucle, on range les morceaux dans une liste et l'on recolle à la fin avec "".join(L) (en France, join est rappelé par le sujet qui s'en sert).

Comment rechercher un mot dans une chaîne en Python ?

Par la recherche naïve d'un motif : le motif de longueur mm apparaît en position ii du texte de longueur nn si texte[i:i + m] == motif. On essaie les positions de 0 à n−mn - m, soit for i in range(n - m + 1) ; à chaque position, une boucle while j < m and texte[i + j] == motif[j] avance j, et si j == m, on renvoie i. Après la boucle, on renvoie −1-1, jamais False, puisque False == 0 vaut True. Dans le while, le test de la borne vient en premier.

Quelle est la complexité de la recherche naïve d'un motif ?

Au plus m(n−m+1)m(n - m + 1) comparaisons de caractères, pour un motif de longueur mm dans un texte de longueur nn : au plus mm par position, et n−m+1n - m + 1 positions. Ce maximum est atteint quand le texte n'a que des a et que le motif est fait de a suivis d'un seul b : pour n=1000n = 1000 et m=10m = 10, 9 910 comparaisons. On écrit O(nm)O(nm) au pire ; si mm est voisin de n/2n/2, le coût est quadratique en la longueur du texte. Au programme marocain, on donne aussi le meilleur cas : mm comparaisons pour une occurrence en position 0.

Comment tester si un mot est un palindrome en Python ?

Avec deux indices qui se rapprochent : i = 0 et j = len(s) - 1 ; tant que i < j, si s[i] != s[j], on renvoie False, sinon on avance i et l'on recule j. Après la boucle, on renvoie True. La fonction fait au plus ⌊n/2⌋\lfloor n/2 \rfloor comparaisons pour une chaîne de nn caractères et s'arrête au premier désaccord ; j−ij - i diminue de 2 à chaque tour. Construire la chaîne renversée puis comparer est plus simple à écrire, mais parcourt tout le texte. Au programme marocain, s == s[::-1] fait le test en une ligne.

À quoi servent ord et chr en Python ?

ord(c) donne le code du caractère c, et chr(k) le caractère de code k. Les codes de a à z sont consécutifs, comme ceux de A à Z et de 0 à 9 : le rang d'une minuscule est ord(c) - ord("a"), de 0 à 25, et la lettre de rang kk est chr(ord("a") + k). C'est ainsi qu'on compte les fréquences des 26 lettres dans une liste de 26 compteurs, en un seul parcours du texte. En France, ord et chr sont hors de l'annexe du programme : un sujet qui s'en sert les rappelle.

Comment programmer le chiffrement de César en Python ?

Ce chiffrement est au programme marocain. On numérote les lettres de A à Z de 0 à 25 ; la clé kk remplace la lettre de rang rr par la lettre de rang (r+k) mod 26(r + k) \bmod 26, soit chr(ord("A") + (r + k) % 26) avec r = ord(c) - ord("A"), et les autres caractères restent inchangés. Sans % 26, les dernières lettres sortent de l'alphabet. On déchiffre en décalant de 26−k26 - k. Comme il n'y a que 26 clés, on casse César par force brute, ou par l'analyse des fréquences : la lettre la plus fréquente du message chiffré correspond très probablement au E en français.

Comment y accéder

Ce chapitre fait partie de l'accès complet. Les trois premiers chapitres de chaque matière (deux par bloc en économie et droit, en management et gestion) sont offerts avec un compte d'essai gratuit. Créer un compte d'essai ou se connecter. Pour l'accès complet, les tarifs ou une question, écris-nous sur WhatsApp.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France. Avec la plateforme vidéo YOUNESS SCHOOL offerte, dès 600 DH (60 $) par mois, sans engagement.

Prépas scientifiques : voir l'offrePrépas ECS et ECT : voir l'offreTu hésites encore ? Essaie gratuitement Prepa Help.

← Listes et algorithmes de recherche (séquentielle, dichotomique)