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"*3vaut"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