II. Les chaînes de caractères en Python¶
Cours¶
A. Les opérateurs¶
Certains opérateurs utilisables sur les entiers et flottants sont aussi utilisables sur des chaînes de caractères.
Opérateur | Signification |
---|---|
+ |
Concaténation |
* |
Répétition |
in |
Inclusion |
Exemples
"abc"+"def"
vaut"abcdef"
"abc"*3
vaut"abcabcabc"
"bc" in "abc"
vautTrue
B. Comparer des chaînes de caractères¶
Définition
La comparaison de chaînes avec les opérateurs inférieur (<
) ou supérieur (>
) est possible car chacun des caractères est représenté dans la machine par un nombre, son code Unicode. On compare donc le code de 2 caractères pour déterminer celui qui est inférieur à l'autre.
Exemple de comparaison d'1 caractère
"a"
est inférieur à "m"
car son code ASCII est inférieur ("a"<"n"
vaut True
). L'ordre des caractères dans le code ASCII respecte l'ordre alphabétique (pour les minuscules et majuscules).
"1"
(code ASCII : 49
) est inférieur à 9
(code ASCII : 57
) pour la même raison. Le code ASCII respecte l'ordre croissant des chiffres.
Une chaîne de caractères est une séquence, c'est-à-dire qu'elle comprend plusieurs éléments qui sont ici de type caractères. il n'y a donc généralement pas qu'une valeur à comparer avec une autre.
Exemple de comparaison de chaînes de caractères
On compare abracadabra
à abc
:
- a
et a
sont identiques, on regarde les caractères suivants.
- b
et b
sont identiques, on regarde les caractères suivants.
- r
et c
sont différents, le code ASCII de c
est inférieur à celui de r
. L'algorithme s'arrête, et abc
est inférieur à abracadabra
.
Algorithme appliqué pour comparer 2 chaînes de caractères
- On compare les premiers caractères de chaque chaîne.
- S'ils n'ont pas le même code Unicode, l'un est inférieur à l'autre. L'algorithme s'arrête, cette relation d'ordre est valable pour la chaîne entière.
- Sinon, on compare les caractères suivant de chaque chaîne, et on réapplique les étapes précédentes.
- Si on arrive au bout d'une chaine, mais qu'il reste des caractères dans l'autre, alors la 1ère est inférieure à la 2ème. Si on arrive au bout des 2, elles sont égales.
C. Indexation des chaînes de caractères¶
Une chaîne de caractères stocke plusieurs plusieurs caractères. On accède à chaque caractère individuellement grâce à leur position dans la chaîne, appelée leur indice (on dit que les caractères sont indexés). On accède à un caractère d'une chaîne qui est d'indice ind
avec la syntaxe caracteres[ind]
.
Exemple
Le tableau suivant donne l'indice des différents caractères de la chaîne caracteres = "hello"
:
Caractère | "h" |
"e" |
"l" |
"l" |
"o" |
---|---|---|---|---|---|
Indice | 0 | 1 | 2 | 3 | 4 |
L'instruction caracteres[2]
renvoie dans cet exemple la valeur l
.
Avec quelle instruction obtient-on la valeur e
? o
?
Avec respectivement l'instruction caracteres[1]
et caracteres[4]
.
L'indice du dernier élément d'une chaîne s'exprime en fonction de sa longueur, c'est-à-dire de son nombre de caractères, que l'on obtient avec la fonction len
qui prend un paramètre une chaîne. Comme on commence à 0
, au va au maximum jusqu'à l'indice len(caracteres)-1
.
Exemple
Dans notre cas, il y a 5 éléments dans caracteres
, et l'indice du dernier élément, le "o"
, est 4
. 4
vaut en effet 5-1 = len(caracteres)-1
.
D. Parcours des chaînes de caractères¶
Pour accéder à chacun des caractères les uns à la suite des autres, on peut utiliser une boucle bornée. Il y a deux manières de le faire :
D.I. Parcours par indice¶
Syntaxe
for i in range(len(caracteres)):
print(caracteres[i])
D.II. Parcours par valeur¶
Syntaxe
for c in caracteres: # cette syntaxe est possible car caracteres est une séquence
print(c)
Exercices sur les chaînes de caractères¶
Exercice 1 : comparaison de chaînes¶
-
Laquelle de ces listes de chaînes de caractères est triée en ordre croissant ?
A["112", "19", "27", "45", "8"]
B["8", "19", "27", "45", "112"]
C["8", "112", "19", "27", "45"]
D["19", "112", "27", "45", "8"]
-
Trier dans l'ordre croissant les chaînes suivantes :
"Python"
,"Pygame"
,"Spyder"
,"Py"
,"Anaconda"
.
Exercice 2 : renverser une chaîne¶
Ecrire une fonction renverse(chaine)
prenant en paramètre une chaîne de caractères chaine
et renvoyant une chaîne contenant les mêmes caractères mais dans l'ordre inverse.
Exercice 3 : conversion en binaire¶
Pour écrire un programme effectuant la conversion d'un entier de la base 10 à la base 2, on peut utiliser une chaîne de caractères pour stocker le nombre converti en binaire (on aurait aussi pu utiliser un tableau d'entiers). Il faut ajouter chaque nouveau reste à cette chaîne.
Compléter le code de la fonction ci-dessous, faisant cette conversion :
def dec_to_bin(d: int) -> str:
b = "" # le résultat de la conversion en binaire
q = d # stocke le quotient de chaque division euclidienne
while q != 0:
b = ...
q = ...
return b