|
| 1 | +\documentclass[12pt,class=report,crop=false]{standalone} |
| 2 | +\usepackage[screen]{../python} |
| 3 | + |
| 4 | +\pagestyle{empty} |
| 5 | + |
| 6 | +\begin{document} |
| 7 | + |
| 8 | +%==================================================================== |
| 9 | +\chapitre{Chaînes de caractères -- Analyse d'un texte} |
| 10 | +%==================================================================== |
| 11 | + |
| 12 | +\section*{Caractère et chaîne} |
| 13 | + |
| 14 | + |
| 15 | +\begin{itemize} |
| 16 | + \item Un \defi{caractère}\index{caractere@caractère} est un symbole unique, par exemple une lettre minuscule \codeinline{"a"}, une lettre majuscule \codeinline{"B"}, un symbole spécial \codeinline{"\&"}, un symbole représentant un chiffre \codeinline{"7"}, une espace \codeinline{" "} que l'on notera aussi \lstinline[showstringspaces=true]!" "!. |
| 17 | + |
| 18 | + \bigskip |
| 19 | + |
| 20 | + \item |
| 21 | +Pour désigner un caractère, il faut le mettre entre guillemets simples \codeinline{'z'} ou entre guillemets doubles \codeinline{"z"}. |
| 22 | + |
| 23 | + \bigskip |
| 24 | + |
| 25 | + \item Une \defi{chaîne de caractères}\index{chaine@chaîne} est une suite de caractères, comme un mot \codeinline{"Bonjour"}, une phrase \codeinline{'Il fait beau.'}, un mot de passe \codeinline{"N[w5ms\}e!"}. |
| 26 | + |
| 27 | + \bigskip |
| 28 | + |
| 29 | + \item Le type d'un caractère ou d'une chaîne est \codeinline{str}\index{str@\ci{str}} (pour \emph{string}). |
| 30 | + |
| 31 | + |
| 32 | +\end{itemize} |
| 33 | + |
| 34 | + |
| 35 | + |
| 36 | +\newpage |
| 37 | + |
| 38 | +\section*{Opérations sur les chaînes} |
| 39 | + |
| 40 | + |
| 41 | +\begin{itemize} |
| 42 | + \item La \defi{concaténation}\index{concatenation@concaténation}, c'est-à-dire la mise bout à bout de deux chaînes, s'effectue à l'aide de l'opérateur \codeinline{+}. Par exemple \ci{"para"+"pluie"} donne la chaîne \ci{"parapluie"}. |
| 43 | + |
| 44 | + \bigskip |
| 45 | + |
| 46 | + \item La chaîne vide \ci{""} est utile lorsque l'on veut initialiser une chaîne avant d'y ajouter d'autres caractères. |
| 47 | + |
| 48 | + \bigskip |
| 49 | + |
| 50 | + \item La \defi{longueur} d'une chaîne est le nombre de caractères qu'elle contient. Elle s'obtient par la fonction \ci{len()}\index{len@\ci{len}}. |
| 51 | + Par exemple \lstinline[showstringspaces=true]!len("Hello World")! renvoie $11$ (l'espace compte comme un caractère). |
| 52 | +\end{itemize} |
| 53 | + |
| 54 | +\newpage |
| 55 | + |
| 56 | +\section*{Opérations sur les chaînes} |
| 57 | + |
| 58 | +Si \ci{mot} est une chaîne alors on peut récupérer chaque caractère par \ci{mot[i]}. Par exemple si |
| 59 | + \ci{mot = "avion"} alors : |
| 60 | + \begin{itemize} |
| 61 | + \item \ci{mot[0]} est le caractère \ci{"a"}, |
| 62 | + \item \ci{mot[1]} est le caractère \ci{"v"}, |
| 63 | + \item \ci{mot[2]} est le caractère \ci{"i"}, |
| 64 | + \item \ci{mot[3]} est le caractère \ci{"o"}, |
| 65 | + \item \ci{mot[4]} est le caractère \ci{"n"}. |
| 66 | + \end{itemize} |
| 67 | + |
| 68 | +\bigskip |
| 69 | + |
| 70 | +\begin{center} |
| 71 | +\begin{tabular}{|c||c|c|c|c|c|} |
| 72 | +\hline |
| 73 | +Lettre & a & v & i & o & n \\ \hline |
| 74 | +Rang & 0 & 1 & 2 & 3 & 4 \\ \hline |
| 75 | +\end{tabular} |
| 76 | +\end{center} |
| 77 | + |
| 78 | + |
| 79 | +\bigskip |
| 80 | + |
| 81 | +Si \ci{mot} est une chaîne, les caractères s'obtiennent par \ci{mot[i]} pour \ci{i} variant de \ci{0} à \ci{len(mot)-1}. |
| 82 | + |
| 83 | + |
| 84 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 85 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 86 | + |
| 87 | + |
| 88 | +\newpage |
| 89 | + |
| 90 | +\section*{Sous-chaînes} |
| 91 | + |
| 92 | + |
| 93 | +On peut extraire plusieurs caractères d'une chaîne à l'aide de la syntaxe \ci{mot[i:j]} qui renvoie une chaîne formée des caractères numéro $i$ à $j-1$ (attention le caractère numéro $j$ n'est pas inclus !). |
| 94 | + |
| 95 | + \bigskip |
| 96 | + |
| 97 | +Par exemple si \ci{mot = "vendredi"} alors : |
| 98 | +\begin{itemize} |
| 99 | + \item \ci{mot[0:4]} renvoie la sous-chaîne \ci{"vend"} formée des caractères de rang $0$, $1$, $2$ et $3$ (mais pas $4$), |
| 100 | + |
| 101 | + \bigskip |
| 102 | + |
| 103 | + \item \ci{mot[3:6]} renvoie \ci{"dre"} correspondant aux rangs $3$, $4$ et $5$. |
| 104 | +\end{itemize} |
| 105 | + |
| 106 | + \bigskip |
| 107 | + |
| 108 | +\begin{center} |
| 109 | +\begin{tabular}{|c||c|c|c|c|c|c|c|c|} |
| 110 | +\hline |
| 111 | +Lettre & v & e & n & d & r & e & d & i \\ \hline |
| 112 | +Rang & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7\\ \hline |
| 113 | +\end{tabular} |
| 114 | +\end{center} |
| 115 | + |
| 116 | + \bigskip |
| 117 | + |
| 118 | +Autre exemple : \ci{mot[1:len(mot)-1]} renvoie le mot privé de sa première et dernière lettre. |
| 119 | + |
| 120 | + |
| 121 | +\newpage |
| 122 | + |
| 123 | + |
| 124 | +\section*{Un peu plus sur les chaînes} |
| 125 | + |
| 126 | + |
| 127 | +\begin{itemize} |
| 128 | + \item Une boucle \ci{for ... in ...} permet de parcourir une chaîne, caractère par caractère :\index{boucle!pour}\index{for@\ci{for}} |
| 129 | + \begin{center} |
| 130 | + \begin{minipage}{0.4\textwidth} |
| 131 | + \ci{for carac in mot:}\\ |
| 132 | + \indentation \ci{print(carac)} |
| 133 | + \end{minipage} |
| 134 | + \end{center} |
| 135 | + |
| 136 | + \bigskip |
| 137 | + |
| 138 | + \item On peut tester si un caractère appartient à une certaine liste de caractères. Par exemple : \\ |
| 139 | + \centerline{\codeinline{if carac in ["a", "A", "b", "B", "c", "C"]:}} |
| 140 | +\index{in@\ci{in}} |
| 141 | + |
| 142 | + permet d’exécuter des instructions si le caractère \ci{carac} est l'une des lettres a, A, b, B, c, C. |
| 143 | + |
| 144 | + \bigskip |
| 145 | + |
| 146 | + \item |
| 147 | + Pour éviter certaines lettres, on utiliserait : \\ |
| 148 | + \centerline{\codeinline{if carac not in ["X", "Y", "Z"]:}} |
| 149 | + \index{not in@\ci{not in}} |
| 150 | + |
| 151 | + \end{itemize} |
| 152 | + |
| 153 | +\newpage |
| 154 | + |
| 155 | +\section*{Codage des caractères} |
| 156 | + |
| 157 | +\index{codage des caracteres@codage des caractères} |
| 158 | + |
| 159 | +Un caractère est stocké par l'ordinateur sous la forme d'un entier. |
| 160 | +Pour le codage ASCII/unicode, la lettre majuscule \og{}A\fg{} est codé par $65$, la lettre minuscule \og{}h\fg{} est codée par $104$, le symbole \og{}\#\fg{} par $35$. |
| 161 | + |
| 162 | +Voici la table des premiers caractères. Les numéros $0$ à $32$ ne sont pas des caractères imprimables. Cependant le numéro $32$ est le caractère espace \lstinline!" "!. |
| 163 | + |
| 164 | +\index{ascii} |
| 165 | +\index{unicode} |
| 166 | + |
| 167 | +\myfigure{0.8}{ |
| 168 | +\small |
| 169 | + \tikzinput{chaines-unicode} |
| 170 | +} |
| 171 | + |
| 172 | + |
| 173 | +\newpage |
| 174 | + |
| 175 | +\section*{Codage des caractères} |
| 176 | + |
| 177 | +La fonction \ci{chr()}\index{chr@\ci{chr}} est une fonction \Python{} qui renvoie le caractère associé à un code. |
| 178 | + |
| 179 | + \begin{fonctionpython}[\ci{python : chr()}] |
| 180 | + Usage : \ci{chr(code)}\\ |
| 181 | + Entrée : un code (un entier)\\ |
| 182 | + Sortie : un caractère |
| 183 | + |
| 184 | + \medskip |
| 185 | + |
| 186 | + Exemple : |
| 187 | + \begin{itemize} |
| 188 | + \item \ci{chr(65)} renvoie \ci{"A"} |
| 189 | + \item \ci{chr(123)} renvoie \ci{"\{"} |
| 190 | + \end{itemize} |
| 191 | + \end{fonctionpython} |
| 192 | + |
| 193 | +\bigskip |
| 194 | + |
| 195 | + |
| 196 | +La fonction \ci{ord()}\index{ord@\ci{ord}} est une fonction \Python{} correspondant à l'opération inverse : elle renvoie le code associé à un caractère. |
| 197 | + |
| 198 | + \begin{fonctionpython}[\ci{python : ord()}] |
| 199 | + Usage : \ci{ord(carac)}\\ |
| 200 | + Entrée : un caractère (une chaîne de longueur $1$)\\ |
| 201 | + Sortie : un entier |
| 202 | + |
| 203 | + \medskip |
| 204 | + |
| 205 | + Exemple : |
| 206 | + \begin{itemize} |
| 207 | + \item \ci{ord("A")} renvoie \ci{65} |
| 208 | + \item \ci{ord("*")} renvoie \ci{42} |
| 209 | + \end{itemize} |
| 210 | + \end{fonctionpython} |
| 211 | + |
| 212 | + |
| 213 | +\end{document} |
0 commit comments