Apprendre les bases de Python pour réussir en N.S.I.
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 délimitées par des guillemets (ou apostrophes).
texte = "Ceci est une chaine de caractères"
calcul = "1 + 1"
addition = 1 + 1
Ainsi, texte
et calcul
sont de type chaines de caractères alors que addition
est de type entier qui vaut 2.
Important. En python, les chaînes de caractères sont des objets immutables, c'est-à-dire qu'il s'agit d'objet que l'on ne peut pas modifier ! En effet, nous verrons que les différents traitements sur les chaines de caractères ne modifient jamais la chaîne de caractères elle-même, elles construisent une nouvelle chaîne de caractères à partir de l'ancienne.
Il y a énormément d'actions possibles sur les chaines de caractères, nous allons voir les principales.
Les actions de base
-
len(chaine)
: Donne la longueur de la chaîne de caractèrestexte
.12345chaine = "une chaîne de caractères"longueur = len(chaine)print(f"La chaîne '{chaine}' est composée de {longueur} caractères.")print(len("anticonstitutionnellement"))Enter to Rename, Shift+Enter to Preview -
chaine[n]
: Affiche le n-ième terme de la chaîne de caractèreschaine
. Attention. La première lettre commence à l'indice 0 !
Astuce. Si on veut commencer par la fin :chaine[-1]
est la dernière lettre,chaine[-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 -
chaine[debut:fin]
: Affiche une partie de la chaîne de caractères. La sous-chaîne de caractères commence à l'indicedebut
et se termine à l'indicefin-1
.Attention. La première lettre de la chaîne
chaine
correspond toujours à l'indice 0 et on ne prend pas la lettre d'indicefin
.Astuce. Si on veut commencer au début de la chaîne
chaine
, on peut omettre l'indice de début :chaine[:fin]
. De même, si on veut aller jusqu'à la fin de la chaînechaine
, on peut omettre l'indice de fin :chaine[debut:]
.1234print("Alea jacta est"[5:10])print("Alea jacta est"[:4])print("Alea jacta est"[5:])Enter to Rename, Shift+Enter to Preview -
chaine1 + chaine2
: Concatène les deux chaînes de caractères, c'est-à-dire les met bout à bout dans l'ordre d'apparition.1234chaine = "Vive "suite = "les Mathématiques"print(chaine + suite)Enter to Rename, Shift+Enter to PreviewRemarque. Le dernier caractère de la chaîne
chaine
est un espace. Lors de la concaténation, les deux chaînes sont simplement mises bout à bout sans ajout de caractères supplémentaires.On peut, bien sûr, enchainer les concaténations :
chaine1 + chaine2 + chaine3 + ...
-
str(objet)
: Transforme (quand c'est possible) l'objet
en chaîne de caractères. Utile pour récupérer, par exemple, tous les chiffres d'un nombre séparément.12345# On récupère le chiffre d'indice 4, c'est-à-dire le cinquième :nombre = 133675184str_5e_chiffre = str(nombre)[4]print(f"Le cinquième chiffre du nombre {nombre} est {str_5e_chiffre}.")Enter to Rename, Shift+Enter to PreviewDans l'exemple, on transforme le nombre
nombre
en chaine de caractères 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(str_5e_chiffre)
. -
chaine * k
: Crée une chaine de caractères dans laquelle on répète la chaîne de caractèreschaine
k
fois.Attention. La variable
k
doit être de type entier !123chaine = "Monsieur, j'ai pas compris ! "print(chaine * 5)Enter to Rename, Shift+Enter to Preview -
sous_chaine in chaine
: Renvoie la valeurTrue
si la chaine de caractèresous_chaine
est danschaine
etFalse
sinon. À utiliser, par exemple, comme condition avec une structure alternativeif
.1234567chaine = "C'est un trou de verdure où chante une rivière."print("chante" in chaine)print("dur" in chaine)print("eau" in chaine)print("vers" in chaine)print("chanter" in chaine)Enter to Rename, Shift+Enter to PreviewOn vérifie si les chaînes de caractères
"chante"
,"dur"
,"eau"
,"vers"
et"chanter"
sont dans la chaine de caractères stockée danschaine
.Voici un exemple d'utilisation dans une structure conditionnelle :
if lettre in "aeiouy": print(f"La lettre {lettre} est une voyelle.") else : print(f"La lettre {lettre} n'est pas une voyelle.")
Ce code permettrait par exemple de vérifier si la variable
lettre
est une voyelle ou pas. -
Comparaisons entre chaines de caractères : On peut comparer, comme pour les nombres, des chaines de caractères.
Le résultat de la comparaison est une booléen :
True
ouFalse
. Il peut donc s'utiliser comme condition avec une structure alternativeif
ou répétitivewhile
.Voici les différentes comparaisons possibles :
chaine1 == chaine2
: RenvoieTrue
si la valeur des deux chaînes sont parfaitement identiques,False
sinon.chaine1 != chaine2
: RenvoieTrue
si la valeur des deux chaînes ont au moins un caractère différent,False
sinon.chaine1 < chaine2
: RenvoieTrue
si la valeur de la chaînechaine1
précède la valeur de la chaînechaine2
dans l'ordre lexicographique (l'ordre du dictionnaire).chaine1 <= chaine2
: Comme<
mais la valeur des deux chaînes peuvent être les mêmes.chaine1 > chaine2
: RenvoieTrue
si la valeur de la chaînechaine1
suit la valeur de la chaînechaine2
dans l'ordre lexicographique (l'ordre du dictionnaire).chaine1 >= chaine2
: Comme<
mais la valeur des deux chaînes 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 deuxième, etc. Par exemple :
"azerty" < "azfa"
car les premiers termes de chaque chaîne sont égaux. De même pour le deuxième. Pour le troisième, comme"e" < "f"
, il en résultat que"azerty" < "azfa"
. Il n'est pas nécessaire de regarder la suite.Ça fonctionne aussi pour les nombres dans une chaîne 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 Unicode. Donc on a
"1" < "A" < "_" < "a"
par exemple.
Codage Unicode
Grâce au codage Unicode, chaque caractère dispose d'une code Unicode unique.
Par exemple,
- la lettre "A" dispose du code Unicode (ou ASCII) 65.
- la lettre "é" dispose du code Unicode 233.
- le caractère "€" dispose du code Unicode 8364.
Remarque. Les codes unicode utilisés par Python sont des nombres entiers exprimés en base décimale. Habituellement, les codes Unicode sont représentés en hexadécimal. Par exemple, le caractère "€" est représenté en Unicode par U+20AC.
Il existe des fonctions en Python qui permettent de passer des caractères à leur code Unicode et vice-versa :
-
ord(caractere)
: Donne le code Unicode du caractère donné.1234print(ord("A"))print(ord("é"))print(ord("€"))Enter to Rename, Shift+Enter to Preview -
chr(code)
: Donne le caractère correspondant au code Unicode donné.1234print(chr(66))print(chr(234))print(chr(8365))Enter to Rename, Shift+Enter to Preview
Exemple. Je veux transformer un caractère en son suivant.
Expliquons un peu :
- On place le caractère "e" dans la variable
caractere
. - On récupère son code unicode dans la variable
code_unicode
. - On récupère le caractère suivant, celui dont le code est
code_unicode + 1
. Et on l'enregistre dans la variablecaractere_suivant
. - On affiche le caractère suivant
caractere_suivant
.
Cet exemple utilise beaucoup de variables.
On pourrait écrire directement print(chr(ord(caractere) + 1))
mais c'est moins clair.
Petite question pour terminer : Qu'obtiendrait-on si caractere = "z"
?
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
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(chaine[5])
QCM 2
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(chaine[:5])
QCM 3
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(chaine[5:10])
QCM 4
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(chaine[-2])
QCM 5
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(chaine[:2] + chaine[6:8])
QCM 6
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print(...)
QCM 7
chaine = "Un chasseur sachant chasser doit savoir chasser sans son chien."
print("ch" in chaine)
print("chant" in chaine)
print("Un chien" in chaine)
print("r s" in chaine)
print("un" in chaine)
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 voyelles.
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.