Skip to content

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" vaut True

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

  1. On compare les premiers caractères de chaque chaîne.
  2. 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.
  3. Sinon, on compare les caractères suivant de chaque chaîne, et on réapplique les étapes précédentes.
  4. 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

  1. 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"]

  2. 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