7A: Chaînes

La leçon 7 est composée de trois parties, A, B, C qui peuvent être complétées dans n'importe quel ordre.

Jusqu'à présent, nous avons utilisé les chaînes (éléments de type str) de manière simple. Dans cette leçon, nous allons vous montrer comment manipuler les chaînes: comment les découper, les combiner et comment voir les caractères individuels qui les composent.

Qu'est-ce qu'une chaîne?

Toutes les données stockées sur un ordinateur sont au final stockées comme une séquence de 0 et de 1. Cela inclut le texte, les livres digitaux, les images, les sons, les vidéos et les "fichiers exécutables" comme les jeux et les applications. Les chaînes, un exemple de données de texte, sont stockées de la manière suivante:

  • une chaîne est une séquence de cartactères (e.g. la chaîne "Hello, World!" contient 13 caractères incluant les lettres, comme par exemple "H", "e" et de la ponctuation, comme par exemple ",", "!")
  • chaque caractère de la chaîne est représenté par un nombre (e.g., "H" est représenté par le nombre 40)

(Les nombres sont stockés en interne au format 0-1 binaire.)

Manipuler les chaînes comme séquences de caractères: S[]

Pour manipuler une chaîne, on doit accéder à chacun des caractères qui la compose. En Python, cela se fait de la manière suivante: pour une chaîne S et un entier index, la notation

S[index]
retourne le caractère S à la position index. Par convention, la chaîne commence à l'index 0: donc S[0] est le premier caractère, S[1] est le second caractère, etc. Dans "Hello, World!" la liste des caractères est:

Index: 0  1  2  3  4  5  6  7  8  9 10 11 12
Char.: H  e  l  l  o  ,     W  o  r  l  d  !
Notez que le caractère à l'index 6 est un espace.

Dans beaucoup d'autres langages de programmation, il y a un type de données séparé pour les caractères. En Python, les caractères sont représentés par des chaînes de longueur , donc leur type est str.

Trouver le nombre de caractères dans une chaîne: len

Pour obtenir le nombre de caractères d'une chaîne, on utilise en Python la fonction len. Par exemple, len("Hello, World!") est 13.

Exercice à choix multiple : Dernier Caractère
Quelle expression peut être utilisées pour déterminer le dernier caractère d'une chaîne S?
Correct! Bien que len(S) vous donne le nombre total de caractères de la chaîne, car il commence avec l'indice 0, le dernier caractère est à l'indice len(S)-1.

Voici un exemple d'utilisation de len et [], les deux outils que nous venons d'introduire.

Exemple : Longueur de chaîne et caractères

Découper des chaînes: S[:]

Découper des partie de chaînes donne des sous-chaînes. Par exemple, les chaînes "vide" et "ment" sont des sous-chaînes de "évidemment". Pour extraire une sous-chaîne en Python, on utilise la syntaxe

S[premierIndex:dernierIndex]
pour obtenir la sous-chaîne commençant à l'index premierIndex et se terminant à dernierIndex-1. Essayez de deviner la sortie de ce code avant de l'exécuter.
Exemple : Sous-chaînes

Notez qu'en prenant les sous-chaînes, premierIndex est inclu alors que dernierIndex ne l'est pas. C'est une source d'erreur courante. Cependant, cela a des effets intéressants. Par exemple, la longueur de la sous-chaîne S[i:j] est toujours j-i.

Exercice de code : Rasage de chaîne
Ecrivez un programme qui lit une chaîne en utilisant input() et qui écrit la même chaîne mais en ayant au préalable effacé le premier et le dernier caractère. (Vous assumerez que la chaîne a une longueur d'au moins 2.) Par exemple, pour l'entrée Fairy, un programme correct écrira air.
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Coller des chaînes: +

Nous savons tous que 1+2=3. Avec les chaînes, nous obtenons le résultat suivant à la place:

Exemple : Addition de Chaînes

Comme vous pouvez le voir, l'effet de S+T est de créer une nouvelle chaîne qui commence avec S et a T immédiatement après. Ce collage de chaîne s'appelle également concaténation.

Exercice de code : Pile ou Face
Ecrivez un programme qui lit une chaîne en utilisant input() et qui écrit comme sortie la même chaîne mais avec le premier et le dernier caractères échangés. (Vous assumerez que la chaîne a comme longueur au moins 2.) Par exemple, pour l'entrée Fairy, un programme correct écrira yairF. Indice: utilisez votre solution de l'exercice précédent comme point de départ.
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Si vous voulez concaténer deux nombres, il faut d'abord les convertir en str. Sinon vous obtiendrez une de deux erreurs possibles suivant l'ordre dans lequel vous essayez. Exécutez ce programme pour voir les erreurs qui peuvent se produire.
Exemple
Réarrangez les deux lignes pour voir les deux erreurs de concaténations.
  • print("high " + 5)
  • print(110 + " pour cent")
Voici un exemple correct: la fonction str() convertie le nombre en chaîne avant la concaténation.
Exemple
Convertir un nombre en chaîne avec str()

Comme nous l'avons mentionné dans la leçon 4, vous pouvez multiplier chaînes et entiers: S * n est un raccourci pour S + S + ... + S.

Exemple
Multiplication d'une chaîne

Codes de caractères: ord, chr

Comme nous l'avons mentionné dans l'introduction de cette leçon, l'ordinateur représente chaque caractère comme un nombre. Quel nombre correspond à quel caractère? En général, cela dépend de l'encodage que votre ordinateur utilise, mais presque tous les ordinateurs ont un ensemble standard de caractères pour les nombres compris entre 32 and 255. Voici une liste des caractères avec les nombres entre 32 et 127:

ord: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
ord: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
ord: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
ord: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
ord: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
Plus tard, dans la leçon 8, nous écrirons un programme qui génère cette table.
Il n'est pas utile de mémoriser cette table mais voici quelques points dont il faut se souvenir:

  • les lettres minuscules a, b, c, ..., z ont des codes consécutifs
  • les lettres majuscules A, B, C, ..., Z ont des codes consécutifs
  • les chiffres 0, 1, 2, ..., 9 ont des codes consécutifs

Le caractère 32 est un espace alors que le caractère 127 est un des caractères spéciaux de "contrôle". Des caractères de contrôle utiles sont par exemple 9 pour la tabulation, 10 et 13 pour les fins de lignes.

En Python, vous pouvez convertir un caractère en son code numérique correspondant en utilisant la fonction ord. La fonction chr fait le contraire: elle prend un nombre comme paramètre et retourne le caractère correspondant à ce code.

Exemple
Exemples pour ord et chr

Exercice de code : Prochaine lettre
Ecrivez un programme qui prend un caractère comme entrée (une chaîne de longueur 1), que vous assumerez être une majuscule; la sortie devra être la prochaine lettre dans l'alphabet. Si l'entrée est 'Z', votre sortie sera 'A'. (Vous devrez utilisez l'instruction if. Pour un autre indice cliquez ici.)
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Certains systèmes supporte les caractères imprimables entre 32 et 127; d'autres ont des caractères imprimables jusqu'à 255 ou 65535; en Unicode, il y a des centaines de milliers de caractères. Vous pouvez lire plus sur leur historique ici ou ici.

Voici deux exercices pour finir cette leçon.

Exercice de code : Latin Cochon
Latin Cochon est un langage qui ne veut rien dire. Pour transformer un mot d'anglais en latin cochon, vous déplacez la première lettre à la fin et ajoutez "ay" après cela. Par exemple, singe devient ingesay en latin cochon et mot devient otmay. Ecrivez un programme qui prend un mot en entrée et le traduit en latin cochon. (En réalité, Latin Cochon utilise des règles plus complexes que cela mais nous les ignorons pour cet exercice.)
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Exercice de code : Le Nouveau Jeu
Le Nouveau Jeu vous permet de créer une chanson à partir du prénom d'une personne. Ecoutez la chanson pour vous donnez une idée de comment cela fonctionne:
Votre programme prendra le nom d'une personne comme entrée, par exemple "pearl" et écrire la chanson suivante

pearl, pearl, bo-bearl
banana-fana fo-fearl
fee-fi-mo-mearl
pearl!
Notez que le nom entier apparaît trois fois; de plus, le nom apparaît trois autre fois avec la première lettre remplacée par b, f, ou m. (En réalité, la chanson utilise des règles plus complexes que cela mais nous les ignorons pour cet exercice.)
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Continuez à la leçon suivante!