1ere - Traitements des chaines de caractères

Le maniement des chaînes de caractères est important dans de nombreuses situations :

  • Extraire une information d'un texte.
  • Formater une chaîne pour un affichage lisible.
  • des algorithmes divers, comme par exemple celui permettant de proposer un mot lorsque l'utilisateur tape les premières lettres, ou des correcteurs ortographiques etc..
Accéder à un caractère dans la chaîne

Les chaînes sont en réalité des listes de caractères, et peuvent être traitée comme des listes : Les caractères sont repérés par leur indice :

Indice0123456789101112
caractèreHello,World!
correspondance caractère <-> indice

Notez que le caractère à l'index 6 est un espace.

Exemple : Extraire un caractère d'une chaîne

Longueur d'une chaîne
Exemple : Longueur d'une chaîne
sous chaîne
Exemple : Sous chaîne
Afficher une sous chaine
Coller des chaînes: +

Nous savons tous que 1+2=3.

Avec les chaînes, nous obtenons le résultat suivant à la place:"

Exemple : Sous chaîne
Concatenation

Attention : On ne peut additionner que des éléments de même type

Exemple : TypeError
Exécutez ce code et prendre note de l'erreur de type, que vous rencontrerez souvent et que vous devez comprendre.
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Donne plusieurs informations :

  • TypeError indique qu'on a effectué une opération entre deux types imcompatibles
  • for + indique l'opération en cause, ici c'est l'opérateur +
  • int and str : les 2 opérandes sont : le premier un entier, le second une chaîne
Conversions de chaînes: +

Conversion de chaine de caractères

Comme vous le savez déjà, nous pouvons convertir une chaine de caractères en entier et inversement.

Pour cela, nous utilisons les fonctions str() et int().

Exemple : int et str
Exécutez ce code.

Mais nous pouvons aussi convertir une chaîne en liste :

Exemple : str en liste
Exécutez ce code.

quelques compléments pour utiliser print

On a parfois besoin d'afficher successivement plusieur texte, sans passer à la ligne. Cela est possible en utilisant, dans la fonction **print**, l'option end=""

Exemple : exemple sans end=..
Exécutez et observez

Ajoutons l'option end = ""

Exemple : avec end=""
Exécutez et observez

ou end = " "

Exemple : avec end=" "
Exécutez et observez

Exercices

Niveau 1


Fonction repeteMot

Exercice de code : Le perroquet
Ecrire une fonction qui répète un même mot un certain nombre de fois au choix.

Il y aura donc 2 arguments : une valeur numérique et un mot.
Ex: Repete(3,"Ok") affichera "OkOkOk"
La fonction ne renvoie rien, elle affiche simplement.

CONTRAINTE :Vous ne devez pas utuliser de concaténation, seulement avec l'option end=..

Parcours de chaîne

Exemple : parcours de chaîne SUR LES INDICES
Parcours de chaine (sur les indices)
Exemple : parcours de chaîne
Parcours sur les caractères

Pour éviter de vous tromper :

Nommez l'itérateur soigneusement l'iterateur :

  • i pour un parcours avec les indices : for i in range( len(lst) ) :
  • caractère (ou lettre) pour un parcours sur les caracteres : for caractere in txt :

Ces deux façons de procéder se retrouvent pour tout les itérables. Un itérable est un type de variable contenant des éléments. Par exemple, les chaînes de caractères, et les listes, sont des itérables : on peut itérer sur les lettres d'un mots, sur les éléments d'une liste etc....

Nous retrouveront donc les mêmes parcours pour les listes, et pour bien d'autres structures plus tard.

exercice avec parcours de chaines

Exercice de code : Première occurence
En étudiant l'exemple précédent, vous pouvez écrire une fonction search(lettre : str,txt:str) qui parcours la chaîne txt et qui renvoie un entier correspondant à l'indice de la première occurrence du caractère lettre dans txt.

Si la lettre n'est pas trouvée, la fonction doit renvoyer -1.
Aide 1 Aide 2
Modifiez pour que la fonction renvoie la dernière occurrence (au lieu de la 1ere)
Exercice de code : Dernière occurence
En modifiant le code de l'exercice précédent, vous pouvez écrire une fonction search(lettre,txt) qui parcours la chaîne txt et qui renvoie un entier correspondant à l'indice de la dernière occurrence du caractère lettre dans txt. Si la lettre n'est pas trouvée, la fonction doit renvoyer -1.
Aide 1

Niveau 2

Fonction renverseSTR
Exercice de code : Retournement
Ecrire une fonction renverseSTR(txt) -> str qui prend une chaine txt en paramètre, et qui renvoie la chaine txt écrite en partant de la fin :
Ex: renverseSTR("NSI") va renvoyer "ISN"
renverseSTR("loi") va renvoyer "iol"

Palindrome

Exercice de code : Palindrome
Un palindrome est un mot qui s'écrit de la même façon à l'endroit et à l'envers. Par exemple le mot

ressasser

est un palindrome: la première et la dernière lettres sont les mêmes (r), la deuxième et l'avant dernière également (e), etc.

Ecrivez une fonction estPalindrome(S) qui prend une chaîne txt comme entrée et renvoie True si la chaîne est un palindrome etFalse autrement.

Le correcteur va générer une fonction reverseSTR similaire à celle de l'exercice précédent. Il est recommandé de l'utiliser dans cet exercice.

Niveau 3

in

Nous allons maintenant chercher non plus un caractère unique, mais une sous chaîne dans la chaine. Tout d'abord, voyons la fonction pythn qui sait déjà faire cela :

Exemple : sous-chaine in chaine
Savoir si une chaine s est une sous chaine d'une autre chaine txt

Mais nous voulons coder une fonction qui fasse cela. Vous aurez besoin d'étudier cet exemple :

Exemple : sous chaine glissée
Un autre parcours d'une chaine, ou l'on extrait une partie de la chaîne

Si vous avez bien compris les 2 exemples ci-dessus, vous pouvez maintenant réussir cet exercice :

Exercice de code : coder in
Sans utiliser in tel que montré dans l'exemple précédent, écrire une fonction estDans(s : str,txt:str) -> bool qui renvoie True si la chaine s apparait dans la chaine txt, et False sinon. On se limitera au cas ou chechée, s, est une chaine de 2 caractères seulement.

replace et concaténation

La méthode des chaînes replace() en python permet de remplacer une sous chaine par une autre. Etudiez cet exemple :

Exemple : sous chaine glissée
Remplacement dans une chaine

Par ailleurs, rappelons le principe de la concaténation et au passage de la réplication :

Exemple : concaténation et réplication
Concaténer et réplique une chaine

Exercice de code : remplacer
Sans utiliser replace tel que montré dans l'exemple ci-dessus, écrire une fonction remplacers(s1 : str,s2 : str, txt : str) -> str qui renvoie la chaine txt après remplacement de la première occurence de la chaine s1 par la chaine s2. Si la chaine s1 n'est pas trouvée, la fonction renvoie la chaine de départ.
Attention cet exercice est difficile. Inspirez vous de l'exercice précédent (in) et regardez les sorties attendues, comparez avec ce que vous obtenez. Avec patience vous finirez par y arriver !