Python pour le collège et le lycée. Exercices, Cours, TP, Projets.
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Cours : Les chaines de caractères
Présentation des chaines de caractères
Avec les nombres et les listes, les chaines de caractères sont les éléments informatiques qu'on utilise le plus couramment. Ce sont tout simplement des objets qui représentent du texte. Elles sont entre guillemets (ou apostrophes).
a="Ceci est une chaine de caractères"
b="1+1"
c=1+1
Ainsi, a et b sont des chaines de caractères alors que c est un entier qui vaut 2.
Il y a énormément d'action possible sur les chaines de caractères, nous allons voir les principales.
Les actions de base
len(texte)
: Donne la longueur d'un texte.
-
texte[n]
: Affiche le n-ième terme du texte. Attention : la première lettre commence à l'indice 0 !
Petite astuce : Si on veut commencer par la fin : texte[-1] est la dernière lettre, texte[-2] l'avant dernière etc.1234print("Alea jacta est"[0])print("Alea jacta est"[5])print("Alea jacta est"[-1])Enter to Rename, Shift+Enter to Preview -
texte[debut : fin]
: Affiche les caractères detexte
compris entre l'indicedebut
et l'indicefin-1
.
Attention ici aux pièges : la première lettre du texte correspond toujours à l'indice 0 et on ne prend pas la lettre d'indicefin
.
Astuce : Si on veut commencer du début du texte, on met justetexte[:fin]
. De même si on veut aller jusqu'au dernier caractère, on mettratexte[debut : ]
.1234print("Alea jacta est"[5:10])print("Alea jacta est"[:4])print("Alea jacta est"[5:])Enter to Rename, Shift+Enter to Preview -
texte1+texte2
: Concatène les deux textes c'est à dire les met bout à bout.1234texte1="Vive"texte2="Les Mathématiques"print(texte1+texte2)Enter to Rename, Shift+Enter to PreviewOn peut bien sûr enchainer les concaténations : texte1+texte2+texte3+...
-
str(objet)
: Transforme (quand c'est possible) l'objet
en texte pour pouvoir l'utiliser comme un texte. Très utile pour rajouter des variables dans un texte par exemple ou récupérer les chiffres d'un nombre.12345678c = 1 + 1print("La valeur de c est "+str(c))# On récupère le chiffre d'indice 4 c'est à dire le cinquième :n = 133675184chiffre = str(n)[4]print(chiffre)Enter to Rename, Shift+Enter to PreviewDans
c
il y a le résultat du calcul.str(c)
transforme ce résultat en chaine de caractère contenant ce résultat. On le rajoute ensuite à la chaine"La valeur de c est "
Pour le deuxième exemple, on transforme le nombren
en chaine de caractère ce qui nous permet de récupérer les chiffres un à un sous forme de chaine de caractères. Si on veut les retransformer en nombre pour pouvoir faire des calculs par exemple, on pourra utiliserint(chiffre)
. -
texte*k
: Crée une chaine de caractère dans laquelle on répète le texte k fois d'affilée.123texte = "Monsieur, j'ai pas compris ! "print(texte*5)Enter to Rename, Shift+Enter to Preview -
sous_texte in texte
: Renvoie True si la chaine de caractèresous_texte
est danstexte
et False sinon. A utiliser par exemple comme condition avec if par exemple.12345texte = "C'est un trou de verdure où chante une rivière"print("chante" in texte)print("dur" in texte)print("eau" in texte)Enter to Rename, Shift+Enter to PreviewOn teste ici si les sous-textes "chante", "dur" et "eau" sont dans la chaine de caractères stockée dans
texte
.Voici un exemple d'utilisation dans une structure conditionnelle :
if lettre in "aeiouy": print(lettre + " est une voyelle") else : print(lettre + " n'est pas une voyelle")
Ce code permettrait par exemple de vérifier si la variable lettre est une voyelle ou pas.
-
for caractere in texte
: Nous permet de créer une boucle en énumérant les lettres de texte. Par exemple si je veux afficher les chiffres d'un texte :12345texte="Quatre bonbons à 0,25 euro chacun coûtent un euro"for caractere in texte:if caractere in "0123456789":print(caractere)Enter to Rename, Shift+Enter to PreviewQuelques explications : La boucle
for
va prendre le premier caractère detexte
et le placer dans la variablecaractere
c'est à dire quecaractere
= 'Q'. Ensuite on teste si car fait partie des chiffres. Comme ce n'est pas le cas, et qu'il n'y a rien à faire dans ce cas, on revient à la boucle for avec la deuxième lettre cette fois et on recommence jusqu'au caractère "0" qui faire partie des chiffres donc on l'affiche etc. -
Comparaisons de chaines de caractères : On peut comparer, comme pour les nombres, des chaines de caractères. Le résultat de la comparaison est True ou False et peuvent donc s'utiliser comme condition avec if . Voici les différentes comparaisons possibles :
texte1 == texte2
: Renvoie True si les deux textes sont parfaitement identiques.texte1 != texte2
: Renvoie True si les deux textes ont au moins un caractère de différent.texte1 < texte2
: Renvoie True si letexte1
est strictement avanttexte2
dans l'ordre lexicographique (l'ordre du dictionnaire).texte1 <= texte2
: Comme < mais les deux textes peuvent être les mêmes.texte1 > texte2
: Renvoie True si letexte1
est strictement aprèstexte2
dans l'ordre lexicographique (l'ordre du dictionnaire).texte1 >= texte2
: Comme < mais les deux textes peuvent être les mêmes. Pour ranger dans l'ordre lexicographique, on compare les deux premiers caractères de chaque texte. S'ils sont égaux, on compare le second etc. Par exemple : "azerty"<"azfa" car les premiers termes de chaque chaines sont égaux. De même pour le second. Pour le troisième, comme "e"<"f", on a "azerty"<"azfa". (On ne regarde même pas la suite). Ça fonctionne aussi pour les nombres dans une chaine de caractères : "1234"<"2". En effet, on les compare comme des chaines de caractères et non comme des nombres. On regarde le premier caractère : "1"<"2" donc "1234"<"2". Pour être plus précis, pour comparer deux caractères, on compare en fait leur code ASCII (voir plus loin). Donc on a "1" < "A" < "_" < "a" par exemple.
Fonctions plus spécifiques aux chaines de caractères
Ce sont des fonctions que l'on applique à une chaine de caractères et qui donc devront se mettre après la chaine de caractère à laquelle on l'applique en mettant un point entre.
-
.find(sous_chaine)
: Donne l'indice où se trouve pour la première foissous_chaine
.1234texte="J'ai posé ma brosse sur le bureau"print(texte.find("brosse"))print(texte.find("o"))Enter to Rename, Shift+Enter to PreviewOn fera bien attention au fait que les indices commencent à 0 ! Le 'b' de brosse étant le 14e caractère, son indice est donc 13. Pour le deuxième exemple, on voit que le "o" de brosse n'est pas pris en compte. La fonction find ne renvoie que l'indice du premier "o" qu'il rencontre.
-
.count(sous_chaine)
: Donne le nombre de fois oùsous_chaine
se trouve dans la chaine à qui l'on applique la fonction.1234texte="J'ai posé ma brosse sur le bureau"print(texte.count("os"))print(texte.count("e"))Enter to Rename, Shift+Enter to PreviewIl y a 2 fois "os" dans texte et 3 "e". On remarquera que "é" n'est pas compté comme un "e".
-
.replace(sous_chaine1, sous_chaine2)
: Remplace toutes lessous_chaine1
par lessous_chaine2
.123texte= "Une foncttttion ttttrès prattttique si vous répéttttez ttttrop les tttt"print(texte.replace("tttt","t"))Enter to Rename, Shift+Enter to Preview -
.lower()
,.upper()
: La première permet de mettre tout le texte en minuscule et la deuxième en majuscule. Pas les plus utiles mais elles dépannent car pour Python, "e" est différent de "E". donc pour chercher les voyelles par exemple, il est plus simple de mettre d'abord tous le texte en minuscule sinon il faudra chercher parmi "aeiouyAEIOUY".
QCM
Voici quelques QCM pour voir si vous avez bien compris. N'hésitez pas à relire ce qui précède si vous avez un doute.
QCM 1
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte[5])
QCM 2
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte[:5])
QCM 3
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte[5:10])
QCM 4
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte[-2])
QCM 5
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte[:2]+texte[6:8])
QCM 6
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(...)
QCM 7
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(...)
QCM 8
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte.find("ch"))
QCM 9
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(texte.replace("ss","ch"))
QCM 10
texte = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print("ch" in texte)
print("chant" in texte)
print("Un chien" in texte)
print("r s" in texte)
print("un" in texte)
Entrainement
Exercice 1
Pour le nombre n
donné dans la fenêtre ci-dessous, énumérez ses chiffres.
Pour l'affichage, on utilisera print
et les chiffres seront affichés en allant à la ligne à chaque fois.
Exercice 2
Pour le texte donné dans la fenêtre ci-dessous, créer un programme qui affiche le nombre de voyelle.
Pour l'affichage, on utilisera print
.
Exercice 3
Pour le texte donné dans la fenêtre ci-dessous, créer un programme qui affiche l'indice de tous les "e" dans ce texte.
Pour l'affichage, on utilisera print
et les indices seront affichés en allant à la ligne à chaque fois.