Accueil
Chaînes de caractères
Objectifs du TD : apprendre à parcourir des chaînes de caractères. Utiliser l'énoncé itératif for
Vous avez déjà manipulé des chaînes caractères comme "bonjour". Dans ce TD, vous apprendrez à parcourir pas à pas une chaîne de caractères.
EXERCICES DE COURS
1. Parcours d'une chaîne de caractères
On peut accéder à chaque caractère d'une chaîne de caractères gràce à la notation "[]": le caractère i de la chaine de caractères texte est
texte[i]
. Le premier caractère a le numéro 0.
Par exemple, si texte="elle aime les cerises",
texte[0] vaut e et texte[6] vaut i. La longueur du texte est donnée par la fonction
len. Par exemple, si t="bonjour", len(t)=7.
Le parcours d'une chaîne de caractères consiste à regarder pas à pas chaque caractère de gauche à droite comme dans la boucle suivante :
mot = input("un mot ")
i=0
while i< len(mot):
print(mot[i])
i=i+1
- Exécuter le programme ci-dessus puis modifiez-le pour afficher seulement une lettre sur deux.
- Ecrire une fonction qui prend en argument une chaine de caractères
texte et une lettre l
et qui affiche le nombre de fois où l apparait dans
texte.
Aide Inspirez-vous de la boucle while de l'exercice précédent
et utiliser une variable pour compter.
Quand on manipule des chaînes de caractères, il arrive fréquemment de tomber sur cette erreur :
IndexError: string index out of range
Cela signifie que l'on a accédé à un indice qui n'existe pas donc qui est supérieur ou égal au nombre de caractères de la chaîne, comme par exemple si t="oui",
accéder à t[3]
- Ecrire une fonction palindrome(m) qui renvoie
True si m peut se lire aussi bien de gauche
à droite que de droite à gauche. Par exemple, rever et ressasser
sont des palindromes, relier n'est pas un palindrome. Pour cela, vous devez gérer deux indices, i qui part de 0
et j qui part de len(m)-1, et faire avancer i et reculer j tant que m[i]=m[j].
- Ecrire un programme qui lit des mots tant que l'utilisateur ne tape pas
"fin" et qui affiche le nombre de palindromes qui ont été lus. Exemple d'exécution :
un mot (fin pour finir) il
un mot (fin pour finir) faut
un mot (fin pour finir) rever
un mot (fin pour finir) mais
un mot (fin pour finir) pas
un mot (fin pour finir) ressasser
un mot (fin pour finir) fin
Vous avez entré 6 mots dont 2 palindromes
- Ecrire une fonction supprimeEspace(t) qui prend un texte et renvoie ce texte sans les espaces inutiles : quand il y a plusieurs espaces, alors un seul espace est recopié dans le résultat. Par exemple, si t est " texte avec trop d'espaces " alors supprimeEspace(t) renvoie " texte avec trop d'espaces ". Aide : vous devez utilisez une variable résultat qui contient "" au début et à laquelle vous ajoutez les caractères utiles de t.
Compléments sur les opérateurs logiques
Les opérateurs logiques and et or sont à évaluation paresseuse, c'est à dire que le code n'est pas exécuté en totalité mais seulement si c'est nécessaire. Pour le and par exemple, a and b est évalué de la façon suivante : si a est vrai, alors on évalue b pour savoir s'il est vrai aussi. Par contre, si a est faux, alors b n'est pas évalué, puisque l'expression a and b est fausse dès que a est faux.
Tester ce code ligne après ligne dans l'interprète Python :
c="bonjour"
i=10
i<6 and c[i]==" "
c[i]==" " and i<6
2. Enoncé itératif for
L'énoncé itératif for permet de simplifier l'écriture des
while dans le cas particulier où l'on itère sur les
caractères d'une chaîne (ou plus tard, sur les éléments d'une liste).
La syntaxe de l'énoncé itératif for est la suivante (version
simplifiée pour l'instant) :
for
v in
collection :
bloc_a_répéter
où
v est une variable
collection est une liste de valeurs qui sont énumérées les unes après les autres par un itérateur implicite dans le mécanisme d'évaluation de Python.
Le bloc bloc_a_répéter est répété pour chaque valeur de
collection et la variable
v prend successivement chaque valeur de collection.
Dans le cas d'une chaîne de caractères, la collection est l'ensemble des caractères et les valeurs successives sont les caractères de la chaîne en commençant par le caractère à l'indice 0.
Voici le code pour afficher successivement toutes les lettres dans un texte avec l'énoncé iteratif for :
mot = input("un mot ")
for x in mot :
print(x)
Le vocabulaire itération, itérateur ou iterable provient de l'anglais "to iterate" qui est un synonyme de "repeat", "do again".
Exercices
- Ecrire une fonction qui prend un texte et renvoie le nombre de phrases
de ce texte. On suppose pour simplifier qu'une phrase se termine par . ou ? ou !.
Vous devez écrire deux versions : une en utilisant l'itérateur for, l'autre en utilisant une boucle while.
- Ecrire une version étendue de cette fonction qui prend aussi en compte le ... Aide: avant de coder, réfléchissez s'il vaut mieux utiliser for ou while.