<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>3. Une Introduction Informelle  Python </title> <META NAME="description" CONTENT="3. Une Introduction Informelle  Python "> <META NAME="keywords" CONTENT="tut"> <META NAME="resource-type" CONTENT="document"> <META NAME="distribution" CONTENT="global"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="STYLESHEET" href="tut.css"> <LINK REL="next" HREF="node6.html"> <LINK REL="previous" HREF="node4.html"> <LINK REL="up" HREF="tut.html"> <LINK REL="next" HREF="node6.html"> </head> <body> <DIV CLASS="navigation"><table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td><A HREF="node4.html"><img src="../icons/previous.gif" border="0" height="32"   alt="Previous Page" width="32"></A></td> <td><A HREF="tut.html"><img src="../icons/up.gif" border="0" height="32"   alt="Up One Level" width="32"></A></td> <td><A HREF="node6.html"><img src="../icons/next.gif" border="0" height="32"   alt="Next Page" width="32"></A></td> <td align="center" width="100%">Tutoriel Python</td> <td><A HREF="node2.html"><img src="../icons/contents.gif" border="0" height="32"   alt="Contents" width="32"></A></td> <td><img src="../icons/blank.gif" border="0" height="32"   alt="" width="32"></td> <td><img src="../icons/blank.gif" border="0" height="32"   alt="" width="32"></td> </tr></table> <b class="navlabel">Previous:</b> <a class="sectref" HREF="node4.html">2. Utilisation de l'Interprteur</A> <b class="navlabel">Up:</b> <a class="sectref" HREF="tut.html">Tutoriel Python</A> <b class="navlabel">Next:</b> <a class="sectref" HREF="node6.html">4. D'Autres Outils de</A> <br><hr></DIV> <!--End of Navigation Panel--> <!--Table of Child-Links--> <A NAME="CHILD_LINKS"><STRONG>Sous-sections</STRONG></A>  <UL CLASS="ChildLinks"> <LI><A NAME="tex2html250"   HREF="#SECTION005100000000000000000">3.1 Utiliser Python comme Calculatrice </A> <UL> <LI><A NAME="tex2html251"   HREF="#SECTION005110000000000000000">3.1.1 Nombres </A> <LI><A NAME="tex2html252"   HREF="#SECTION005120000000000000000">3.1.2 Chanes de Caractres </A> <LI><A NAME="tex2html253"   HREF="#SECTION005130000000000000000">3.1.3 Chanes Unicode </A> <LI><A NAME="tex2html254"   HREF="#SECTION005140000000000000000">3.1.4 Listes </A> </UL> <BR> <LI><A NAME="tex2html255"   HREF="#SECTION005200000000000000000">3.2 Premiers Pas Vers la Programmation </A> </UL> <!--End of Table of Child-Links--> <HR>  <H1> <BR> 3. Une Introduction Informelle  Python  </H1>  <P> Dans les exemples suivants, la saisie et l'affichage seront distingus par  la prsence ou l'absence d'invites ("<tt class="samp">&#187;&gt; </tt>" et "<tt class="samp">... </tt>"): pour reproduire  l'exemple, vous devez taper tout ce qui suit l'invite, quand celle-ci apparat;  les lignes qui ne commencent pas par une invite correspondent  l'affichage effectu par l'interprteur. Notez qu'une invite secondaire seule sur une ligne  signifie que vous devez taper une ligne vide; ceci marque la fin des commandes sur plusieurs lignes.  <P> De nombreux exemples de ce manuel, mme ceux qui sont saisis  l'invite interactive, contiennent des commentaires. Les commentaires en Python commencent par un caractre dise, "<tt class="character">#</tt>", et continuent jusqu' la fin de la ligne physique. Un commentaire peut se trouver au dbut d'une ligne derrire un espace ou du code, mais pas  l'intrieur d'une chane de caractres litrale. Un caractre dise  l'intrieur d'une chane est juste un caractre dise.  <P> Quelques exemples:  <P> <dl><dd><pre class="verbatim"> # voici le premier commentaire SPAM = 1                 # et voici le deuxime commentaire                          # ... et maintenant un troisime! STRING = "# Ceci n'est pas un commentaire." </pre></dl>  <P>  <H1> <BR> 3.1 Utiliser Python comme Calculatrice  </H1>  <P> Essayons quelques commandes Python simples. Lancez l'interprteur et attendez l'apparition du prompt principal, "<tt class="samp">&#187;&gt; </tt>".  (a ne devrait pas tre trs long.)  <P>  <H2> <BR> 3.1.1 Nombres  </H2>  <P> L'interprteur fonctionne comme une simple calculatrice: vous pouvez y taper une expression et il va en afficher la valeur. La syntaxe des expression est naturelle: les oprateurs <code>+</code>, <code>-</code>, <code>*</code> et <code>/</code> marchent exactement comme dans la plupart des langages (par exemple Pascal ou C); les parenthses peuvent tre utilises pour les regrouper. Par exemple:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; 2+2 4 &gt;&gt;&gt; # Ceci est un commentaire ... 2+2 4 &gt;&gt;&gt; 2+2  # et un commentaire sur la mme ligne que le code 4 &gt;&gt;&gt; (50-5*6)/4 5 &gt;&gt;&gt; # La division des entiers retourne l'entier immdiatement infrieur: ... 7/3 2 &gt;&gt;&gt; 7/-3 -3 </pre></dl>  <P> Comme en C, le signe gale ("<tt class="character">=</tt>") est utilis pour affecter une valeur  une variable. La valeur d'une affectation n'est pas affiche:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; largeur = 20 &gt;&gt;&gt; hauteur = 5*9 &gt;&gt;&gt; largeur * hauteur 900 </pre></dl>  <P> Une valeur peut tre affecte  plusieurs variables simultanment:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; x = y = z = 0  # Mettre  zro x, y et z &gt;&gt;&gt; x 0 &gt;&gt;&gt; y 0 &gt;&gt;&gt; z 0 </pre></dl>  <P> Il y a un support complet des nombres  virgule flottante; les oprateurs  en prsence de types d'oprandes mlangs convertissent les oprandes  entiers en virgule flottante :  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; 4 * 2.5 / 3.3 3.0303030303030303 &gt;&gt;&gt; 7.0 / 2 3.5 </pre></dl>  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; 1j * 1J (-1+0j) &gt;&gt;&gt; 1j * complex(0,1) (-1+0j) &gt;&gt;&gt; 3+1j*3 (3+3j) &gt;&gt;&gt; (3+1j)*3 (9+3j) &gt;&gt;&gt; (1+2j)/(1+1j) (1.5+0.5j) </pre></dl>  <P> Les nombres complexes sont toujours reprsents comme deux nombres en virgule flottante, les parties relle et imaginaire. Pour extraire ces parties d'un nombre complexe <var>z</var>, utilisez <code><var>z</var>.real</code> et <code><var>z</var>.imag</code>.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; a=1.5+0.5j &gt;&gt;&gt; a.real 1.5 &gt;&gt;&gt; a.imag 0.5 </pre></dl>  <P> Les fonctions de conversion en virgule flottante et en entier (<tt class="function">float()</tt>, <tt class="function">int()</tt> et <tt class="function">long()</tt>) ne marchent pas pour les nombres complexes -- il n'y a pas une  faon correcte et unique de convertir un nombre complexe en un nombre rel. Utilisez <code>abs(<var>z</var>)</code> pour obtenir sa norme (en flottant) ou <code>z.real</code> pour sa partie relle.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; a=1.5+0.5j &gt;&gt;&gt; float(a) Traceback (innermost last):   File "&lt;stdin&gt;", line 1, in ? TypeError: can't convert complex to float; use e.g. abs(z) &gt;&gt;&gt; a.real 1.5 &gt;&gt;&gt; abs(a) 1.5811388300841898 </pre></dl>  <P> En mode interactif, la dernire expression affiche est affecte  la variable <code>_</code>.  Quand vous voulez utiliser Python comme calculatrice, c'est plus pratique pour continuer les calculs, par exemple:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; tva = 17.5 / 100 &gt;&gt;&gt; prix = 3.50 &gt;&gt;&gt; prix * tva 0.6125 &gt;&gt;&gt; prix + _ 4.1125 &gt;&gt;&gt; round(_, 2) 4.11 </pre></dl>  <P> Cette variable doit tre utilise en lecture seule par l'utilisateur. Ne lui affectez pas une valeur de faon explicite -- vous auriez alors cr une variable locale indpendante, avec le mme nom, masquant la variable intgre et son comportement magique.  <P>  <H2> <BR> 3.1.2 Chanes de Caractres  </H2>  <P> En plus des nombres, Python peut aussi manipuler des chanes, qui peuvent tre exprimes de diffrentes faons. Elles peuvent tre incluses entre simples quotes (apostrophes) ou doubles quotes (guillemets):  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; 'spam eggs' 'spam eggs' &gt;&gt;&gt; 'n\'est-ce pas' "n'est-ce pas" &gt;&gt;&gt; "n'est-ce pas" "n'est-ce pas" &gt;&gt;&gt; '"Oui," dit-il.' '"Oui," dit-il.' &gt;&gt;&gt; "\"Oui,\" dit-il." '"Oui," dit-il.' &gt;&gt;&gt; '"N\'est-ce pas," repondit-elle.' '"N\'est-ce pas," repondit-elle.' </pre></dl>  <P> Notez<A NAME="tex2html2"   HREF="#foot190"><SUP>3.1</SUP></A> que les chanes admettent ou non les caractres accentus en mode intractif suivant votre plate-forme. Si les commandes sont lues depuis un fichier, la situation est lgrement diffrente: en gnral vous pourrez, mais les caractres accentus risquent d'tre interprts diffremment si vous transfrez vos fichiers entre des plate-formes diffrentes. Pour ces questions de portabilit, les identificateurs en Python sont limits au code ASCII 7 bits. Vous ne pourrez pas (en mode intractif ou pas) utiliser des lettres accentues dans les noms de variables, fonctions, modules, classes, etc.  <P> Les textes dans les chanes peuvent se poursuivre sur plusieurs lignes de plusieurs faons. Les retours chariot peuvent tre prfixs avec un antislash, par ex.:  <P> <dl><dd><pre class="verbatim"> salut = "Ceci est une chane plutot longue contenant\n\ plusieurs lignes de texte excatement comme on le ferait en C.\n\     Notez que les blancs au dbut de la ligne sont\  significatifs.\n" print salut </pre></dl>  <P> ce qui s'afficherait de la faon suivante:  <P> <dl><dd><pre class="verbatim"> Ceci est une chane plutot longue contenant plusieurs lignes de texte excatement comme on le ferait en C.     Notez que les blancs au dbut de la ligne sont significatifs. </pre></dl>  <P> Ou bien, les chanes peuvent tre entoures par un couple de triple-quotes correspondantes: <code>"""</code> ou <code>'''</code>.  Les fins de lignes n'ont pas besoin d'tre prfixes lorsqu'on utilise les triple-quotes, mais elles seront incluses dans la chane.  <P> <dl><dd><pre class="verbatim"> print """ Usage: trucmuche [OPTIONS]       -h                        Affiche cette notice d'usage      -H hte                   hte auquel il faut se connecter """ </pre></dl>  <P> produit l'affichage suivant:  <P> <dl><dd><pre class="verbatim"> Usage: trucmuche [OPTIONS]       -h                        Affiche cette notice d'usage      -H hte                   hte auquel il faut se connecter </pre></dl>  <P> L'interprteur affiche le rsultat des oprations sur les chanes de la mme faon qu' la saisie: entre quotes, et avec quotes et autres caractres bizarres prfixs par un antislash, pour afficher leur valeur exacte. La chane sera dlimite par des doubles quotes si elle contient une simple quote et aucune double quote, sinon, elle sera dlimite par des simples quotes. (L'instruction <tt class="keyword">print</tt>, dcrite plus loin, peut tre utilise pour crire des chanes sans quotes ni caractres prfixs.)  <P> Les chanes peuvent tre concatnes (accoles) avec l'oprateur <code>+</code>, et rptes avec <code>*</code>:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; word = 'Help' + 'A' &gt;&gt;&gt; word 'HelpA' &gt;&gt;&gt; '&lt;' + word*5 + '&gt;' '&lt;HelpAHelpAHelpAHelpAHelpA&gt;' </pre></dl>  <P> Deux chanes de texte cte  cte sont automatiquement concatnes; la premire ligne ci-dessus aurait pu tre crite "<tt class="samp">mot = 'Help''A'</tt>"; ceci fonctionne seulement avec deux chanes de texte, pas avec des expressions quelconques de type chane.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; import string &gt;&gt;&gt; 'cha' 'ine'                   #  &lt;-  C'est ok 'chaine' &gt;&gt;&gt; string.strip('cha') + 'ine'   #  &lt;-  C'est ok 'chaine' &gt;&gt;&gt; string.strip('cha') 'ine'     #  &lt;-  Ca c'est faux   File "&lt;stdin&gt;", line 1     string.strip('cha') 'ine'                             ^ SyntaxError: invalid syntax </pre></dl>  <P> Les chanes peuvent tre dcomposes (indexes); comme en C, le premier caractre d'une chane est en position (index) 0. Il n'y a pas de type caractre spcifique; un caractre est simplement une chane de taille un. Comme en Icon, les sous-chanes peuvent tre spcifies avec la <i>notation de dcoupage</i> (<i>slice</i>): deux indices spars par deux-points.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[4] 'A' &gt;&gt;&gt; mot[0:2] 'He' &gt;&gt;&gt; mot[2:4] 'lp' </pre></dl>  <P> A la diffrence des chanes de caractres en C, les chanes Python ne peuvent tre modifies. Faire une affectation  l'emplacement d'un indice dans la chane aboutit  une erreur:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[0] = 'x' Traceback (innermost last):   File "&lt;stdin&gt;", line 1, in ? TypeError: object doesn't support item assignment &gt;&gt;&gt; mot[:-1] = 'Splat' Traceback (innermost last):   File "&lt;stdin&gt;", line 1, in ? TypeError: object doesn't support slice assignment </pre></dl>  <P> Cependant, il est facile et efficace de crer une nouvelle chane avec un contenu combin:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; 'x' + mot[1:] 'xelpA' &gt;&gt;&gt; 'Splat' + mot[-1:] 'SplatA' </pre></dl>  <P> Les indices de dcoupage ont des valeurs par dfaut utiles; un premier index non-dfini prend pour valeur par dfaut zro, un second index omis prend pour valeur par dfaut la taille de la chane qu'on est en train de dcouper.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[:2]    # Les deux premiers caractres 'He' &gt;&gt;&gt; mot[2:]    # Tout sauf les deux premiers caractres 'lpA' </pre></dl>  <P> Voici un invariant utile des oprations de dcoupage: <code>s[:i] +   s[i:]</code> gale <code>s</code>.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[:2] + mot[2:] 'HelpA' &gt;&gt;&gt; mot[:3] + mot[3:] 'HelpA' </pre></dl>  <P> Les indices de dcoupage errons sont grs de faon lgante: un index qui est trop grand est remplac par la taille de la chane, un index de fin infrieur  l'indice de dbut retourne une chane vide.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[1:100] 'elpA' &gt;&gt;&gt; mot[10:] '' &gt;&gt;&gt; mot[2:1] '' </pre></dl>  <P> Les indices peuvent tre des nombres ngatifs, pour  compter  partir de la droite. Par exemple:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[-1]     # Le dernier caractre 'A' &gt;&gt;&gt; mot[-2]     # L'avant dernier caractre 'p' &gt;&gt;&gt; mot[-2:]    # Les deux derniers caractres 'pA' &gt;&gt;&gt; mot[:-2]    # Tout sauf les deux derniers caractres 'Hel' </pre></dl>  <P> Mais notez que -0 est vraiment la mme chose que 0, donc a ne compte pas  partir de la droite!  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[-0]     # (puisque -0 gale 0) 'H' </pre></dl>  <P> Les indices de dcoupage ngatifs hors limites sont tronqus, mais n'essayez pas ceci avec des indices d'accs  des lments uniques (sans dcoupage) :  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; mot[-100:] 'HelpA' &gt;&gt;&gt; mot[-10]    # erreur Traceback (innermost last):   File "&lt;stdin&gt;", line 1 IndexError: string index out of range </pre></dl>  <P> La meilleure faon de se rappeler comment marchent les dcoupages est de penser aux indices comme pointant <i>entre</i> les caractres, avec le bord gauche du premier caractre numrot 0. Alors le bord droit du dernier caractre d'une chane de <var>n</var> caractres porte l'index <var>n</var>, par exemple:  <P> <dl><dd><pre class="verbatim">  +---+---+---+---+---+   | H | e | l | p | A |  +---+---+---+---+---+   0   1   2   3   4   5  -5  -4  -3  -2  -1 </pre></dl>  <P> La premire ligne de nombres donne la position des indices 0...5 dans la chane; la seconde ligne donne les indice ngatifs correspondants. Le dcoupage de <var>i</var>  <var>j</var> consiste en tous les caractres entre les extrmits tiquetes <var>i</var> et <var>j</var>, respectivement.  <P> Pour les indices non ngatifs, la longueur d'une tranche est la diffrence entre ses indices, si les deux sont  l'intrieur des limites, par ex., la longueur de <code>mot[1:3]</code> est 2.  <P> La fonction intgre <tt class="function">len()</tt> retourne la longueur d'une chane:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; s = 'supercalifragilisticexpialidocious' &gt;&gt;&gt; len(s) 34 </pre></dl>  <P>  <H2> <BR> 3.1.3 Chanes Unicode  </H2>  <P> A partir de Python 2.0, un nouveau type de donnes destin  stocker du texte est disponible pour les programmeurs: l'objet Unicode. Il peut tre utilis pour stocker et manipuler des donnes Unicode (voir <a class="url" href="http://www.unicode.org">http://www.unicode.org</a>) et s'intgre bien avec les objets chanes en fournissant des conversions automatiques l o c'est ncessaire.  <P> Unicode offre l'avantage de fournir un numro pour chaque caractre de chaque criture utilise dans les textes modernes et anciens. Auparavant, il n'y avait que 256 numros possibles pour les caractres d'criture et les textes taient donc typiquement associs  une page de codes qui ralisait l'association entre le numros et les caractres d'criture. Ceci conduisait  beaucoup de confusion, spcialement en ce qui concerne l'internationalisation (crite d'habitude comme "<tt class="samp">i18n</tt>" -- "<tt class="character">i</tt>" + caractres 18 + "<tt class="character">n</tt>") des logiciels. Unicode rsout ces problmes en dfinissant une page de codes pour toutes les critures.  <P> Crer des chanes Unicode en Python est exactement aussi simple que de crer des chanes normales:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; u'Bonjour !' u'Bonjour !' </pre></dl>  <P> Le "<tt class="character">u</tt>" minuscule devant les guillemets indique qu'on souhaite crer une chane Unicode. Si vous dsirez placer des caractres spciaux dans la chane, vous pouvez le faire en utilisant l'encodage Python <i>Echappement-Unicode</i>. L'exemple suivant montre comment faire:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; u'Salut\\u0020tout le monde !' u'Salut tout le monde !' </pre></dl>  <P> La squence d'chappement <code> <BR> u0020</code> indique qu'il faut insrer le caractre Unicode dont le numro HEX est 0x0020 (le caractre espace)  l'endroit indiqu.  <P> Les autres caractres sont interprts en utilisant leurs valeurs numriques respectives directement comme des numros Unicode. Comme les 256 premiers Unicode sont les mmes que les encodages standard Latin-1 utiliss dans la plupart des pays occidentaux, le processus de saisie de l'Unicode est grandement simplifi.  <P> Pour les experts, il y a aussi un mode brut exactement comme pour les chanes normales. Vous devez insrer au dbut de la chane un petit 'r' pour que Python utilise l'encodage <i>Echappement-Brut-Escape</i>. Il n'appliquera la conversion <code> <BR> uXXXX</code> ci-dessus que s'il y a un nombre impair d'antislash avant le petit 'u'.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; ur'Salut\u0020tout le monde !' u'Salut tout le monde !' &gt;&gt;&gt; ur'Salut\\u0020tout le monde !' u'Salut\\\\u0020tout le monde !' </pre></dl>  <P> Le mode brut est extrmement utile lorsqu'il s'agit de saisir de nombreux antislash, par exemple dans les expressions rationnelles.  <P> En dehors de ces encodages standards, Python fournit tout un ensemble d'autres moyens de crer des chanes Unicode sur la base d'un encodage connu.  <P> La fonction <tt class="function">unicode()</tt> intgre fournit un accs  tous les codecs (COdeurs et DECodeurs) Unicode enregistrs. Certains des encodages les mieux connus que ces codecs peuvent convertir sont <i>Latin-1</i>, <i>ASCII</i>, <i>UTF-8</i> et <i>UTF-16</i>. Les deux derniers sont des encodages  longueur variable qui permettent de stocker des caractres Unicode avec 8 ou 16 bits. Python utilise UTF-8 comme encodage par dfaut. On s'en apperoit lorsqu'on imprime des chanes Unicode ou lorsqu'on les crit dans des fichiers.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; u"" u'\344\366\374' &gt;&gt;&gt; str(u"") '\303\244\303\266\303\274' </pre></dl>  <P> Si vous avez des donnes dans un encodage spcifique et souhaitez produire une chane Unicode correspondante, vous pouvez utiliser la fonction <tt class="function">unicode()</tt> intgre avec le nom de l'encodage comme second argument.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; unicode('\303\244\303\266\303\274','UTF-8') u'\344\366\374' </pre></dl>  <P> Pour convertir  nouveau la chane Unicode vers une chane en utilisant l'encodage original, les objets fournissent une mthode <tt class="method">encode()</tt>.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; u"".encode('UTF-8') '\303\244\303\266\303\274' </pre></dl>  <P>  <H2> <BR> 3.1.4 Listes  </H2>  <P> Python connat un grand nombre de types de donnes <i>composites</i>, utilises pour regrouper un ensemble de valeurs. La plus riche en possibilits est la <i>liste</i>, qui peut tre crite comme une liste de valeurs (lments) entre crochets et spars par des virgules. Les lments d'une liste n'ont pas ncessairement le mme type.  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; a = ['spam', 'eggs', 100, 1234] &gt;&gt;&gt; a ['spam', 'eggs', 100, 1234] </pre></dl>  <P> Comme les indices des chanes, les indices des listes commencent  0, et les listes peuvent tre dcoupes, concatnes, et ainsi de suite:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; a[0] 'spam' &gt;&gt;&gt; a[3] 1234 &gt;&gt;&gt; a[-2] 100 &gt;&gt;&gt; a[1:-1] ['eggs', 100] &gt;&gt;&gt; a[:2] + ['bacon', 2*2] ['spam', 'eggs', 'bacon', 4] &gt;&gt;&gt; 3*a[:3] + ['Boe!'] ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boe!'] </pre></dl>  <P> A la diffrence des chanes, qui sont <i>non-modifiables</i>, il est possible de changer les lments individuels d'une liste:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; a ['spam', 'eggs', 100, 1234] &gt;&gt;&gt; a[2] = a[2] + 23 &gt;&gt;&gt; a ['spam', 'eggs', 123, 1234] </pre></dl>  <P> L'affectation dans des tranches est aussi possible, et ceci peut mme changer la taille de la liste:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; # Remplacer certains lments: ... a[0:2] = [1, 12] &gt;&gt;&gt; a [1, 12, 123, 1234] &gt;&gt;&gt; # En enlever certains: ... a[0:2] = [] &gt;&gt;&gt; a [123, 1234] &gt;&gt;&gt; # En insrer ... a[1:1] = ['bletch', 'xyzzy'] &gt;&gt;&gt; a [123, 'bletch', 'xyzzy', 1234] &gt;&gt;&gt; a[:0] = a     # Insre (une copie de) soi-mme au dbut &gt;&gt;&gt; a [123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234] </pre></dl>  <P> La fonction intgre <tt class="function">len()</tt> s'applique aussi aux listes:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; len(a) 8 </pre></dl>  <P> Il est possible d'emboter des listes (crer des listes contenant d'autres listes), par exemple:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; q = [2, 3] &gt;&gt;&gt; p = [1, q, 4] &gt;&gt;&gt; len(p) 3 &gt;&gt;&gt; p[1] [2, 3] &gt;&gt;&gt; p[1][0] 2 &gt;&gt;&gt; p[1].append('xtra')     # See section 5.1 &gt;&gt;&gt; p [1, [2, 3, 'xtra'], 4] &gt;&gt;&gt; q [2, 3, 'xtra'] </pre></dl>  <P> Notez que dans l'exemple prcdent, <code>p[1]</code> et <code>q</code> se rfrent rellement au mme objet! Nous reviendrons plus tard sur la <i>smantique des objets</i>.  <P>  <H1> <BR> 3.2 Premiers Pas Vers la Programmation  </H1>  <P> Bien sr, nous pouvons utiliser Python pour des tches plus compliques que d'ajouter deux et deux. Par exemple, nous pouvons crire une sous-squence de la suite de <i>Fibonacci</i> de la faon suivante:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; # Suite de Fibonacci ... # La somme de deux lments dfinit le suivant ... a, b = 0, 1 &gt;&gt;&gt; while b &lt; 10: ...       print b ...       a, b = b, a+b ...  1 1 2 3 5 8 </pre></dl>  <P> Cet exemple introduit plusieurs fonctionnalits nouvelles.  <P>  <UL> <LI>La premire ligne contient une <i>affectation multiple</i>: les   variables <code>a</code> et <code>b</code> prennent simultanment les nouvelles   valeurs 0 et 1. Sur la dernire ligne l'affectation multiple est utilise  nouveau,   montrant que les expressions en partie droite sont d'abord toutes   values avant qu'aucune affectation ne se fasse.  <P> </LI> <LI>La boucle <tt class="keyword">while</tt> s'excute tant que la condition (ici:   <code>b &lt; 10</code>) reste vraie. En Python, comme en C, toute valeur   entire diffrente de zro est vraie; zro est faux. La condition   pourrait aussi tre une chane ou une valeur de type liste, en fait   n'importe quelle squence; n'importe quoi avec une longueur   diffrente de zro est vrai, les squences vides correspondent  faux. Le test   utilis dans l'exemple est une simple comparaison. Les oprateurs de   comparaison standard sont crits de la mme faon qu'en C:   <code>&lt;</code>, <code>&gt;</code>, <code>==</code>, <code>&lt;=</code>, <code>&gt;=</code> et <code>!=</code>.  <P> </LI> <LI>Le <i>corps</i> de la boucle est <i>indent</i>: l'indentation est   le moyen par lequel Python regroupe les instructions. Python ne fournit   pas (encore) une fonction d'dition de ligne intelligente, donc vous   devez insrer une tabulation ou un espace pour chaque ligne indente. En   pratique vous prparerez les saisies plus compliques avec un   diteur de texte; la plupart des diteurs de texte ont une fonction   d'auto-indentation. Lorsqu'une instruction compose est entre en   mode interactif, elle doit tre suivie d'une ligne vide pour   indiquer qu'elle est termine (car l'interprteur ne peut pas   deviner si vous avez tap la dernire ligne).  <P> </LI> <LI>L'instruction <tt class="keyword">print</tt> crit la valeur de la ou des   expressions qui lui sont donnes. Elle diffre de la simple criture   de l'expression (comme tout--l'heure   dans les exemples de la calculatrice) dans la mesure o elle accepte   plusieurs expressions et chanes. Les chanes sont imprimes sans   quotes, et un espace est insr entre les lments, ce qui vous   permet de les afficher dans un format plus sympathique, comme ceci:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; i = 256*256 &gt;&gt;&gt; print 'La valeur de i est', i La valeur de i est 65536 </pre></dl>  <P> Une virgule finale empche le retour chariot aprs l'affichage:  <P> <dl><dd><pre class="verbatim"> &gt;&gt;&gt; a, b = 0, 1 &gt;&gt;&gt; while b &lt; 1000: ...     print b, ...     a, b = b, a+b ...  1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 </pre></dl>  <P> Notez que l'interprteur insre un retour chariot avant d'imprimer le prompt suivant si la ligne n'a pas t complte.  <P> </LI> </UL>  <P> <BR><HR><H4>Notes</H4> <DL> <DT><A NAME="foot190">...Notez</A><A NAME="foot190"  HREF="node5.html#tex2html2"><SUP>3.1</SUP></A> <DD> NDT : Ce paragraphe absent de l'dition originale a t   ajout par Daniel Calvelo Aros  l'intention des utilisateurs de   Python francophones.    </DL> <DIV CLASS="navigation"><p><hr><table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td><A HREF="node4.html"><img src="../icons/previous.gif" border="0" height="32"   alt="Previous Page" width="32"></A></td> <td><A HREF="tut.html"><img src="../icons/up.gif" border="0" height="32"   alt="Up One Level" width="32"></A></td> <td><A HREF="node6.html"><img src="../icons/next.gif" border="0" height="32"   alt="Next Page" width="32"></A></td> <td align="center" width="100%">Tutoriel Python</td> <td><A HREF="node2.html"><img src="../icons/contents.gif" border="0" height="32"   alt="Contents" width="32"></A></td> <td><img src="../icons/blank.gif" border="0" height="32"   alt="" width="32"></td> <td><img src="../icons/blank.gif" border="0" height="32"   alt="" width="32"></td> </tr></table> <b class="navlabel">Previous:</b> <a class="sectref" HREF="node4.html">2. Utilisation de l'Interprteur</A> <b class="navlabel">Up:</b> <a class="sectref" HREF="tut.html">Tutoriel Python</A> <b class="navlabel">Next:</b> <a class="sectref" HREF="node6.html">4. D'Autres Outils de</A> </DIV> <!--End of Navigation Panel--> <ADDRESS> <hr>See <i><a href="about.html">About this document...</a></i> for information on suggesting changes. </ADDRESS> </BODY> </HTML> <!-- DEBUT / Cybermonitor / START --> <script language="javascript"><!-- CM_RUBRIQUE = "edit_PagesPersos_abonnes"; CM_CLIENT = "clubv3"; CM_SECTION1 = "PagesPersos"; // --></script> <script language="javascript" src="http://js.cybermonitor.com/clubv3.js"> </script> <noscript> <img src="http://stat3.cybermonitor.com/clubv3_v?R=edit_PagesPersos_abonnes&S=total;PagesPersos"> </noscript> <!-- FIN / Cybermonitor / END --> 
