{"id":4681,"date":"2012-06-21T17:38:23","date_gmt":"2012-06-21T21:38:23","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=4681"},"modified":"2013-08-07T19:48:25","modified_gmt":"2013-08-07T23:48:25","slug":"13-fr","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/13-fr\/","title":{"rendered":"13: Listes (tableaux)"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version.<br \/>\nMain French translator: Brice Canvel, brice.canvel@gmail.com<br \/>\nOriginal lesson author: David Pritchard, daveagp@gmail.com<br \/>\nLicense: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/<br \/>\nFor the full site, visit http:\/\/cscircles.ca-->\n<p>Une <strong>liste<\/strong> est une s\u00e9quence de plusieurs variables group\u00e9es ensemble sous un seul nom. Au lieu d'\u00e9crire un programme avec plusieurs variables <code>x0<\/code>, <code>x1<\/code>, <code>x2<\/code>, \u2026 vous pouvez d\u00e9finir une seule variable <code>x<\/code> et acc\u00e9der \u00e0 ces \u00e9l\u00e9ments <code>x[0]<\/code>, <code>x[1]<\/code>, <code>x[2]<\/code>, etc. Plus important encore, vous pouvez mettre d'autres expressions et variables \u00e0 l'int\u00e9rieur des <code>[<\/code>crochets<code>]<\/code>, par exemple <code>x[i]<\/code> and <code>x[i+1]<\/code>. Cela permet de g\u00e9rer des groupes de donn\u00e9es assez large en utilisant peu de code.<\/p>\n<p>Une mani\u00e8re de cr\u00e9er une liste est d'encadrer plusieurs valeurs par des crochets et de les s\u00e9parer par des virgules:<\/p>\n<pre>maListe = [\"la premi\u00e8re valeur dans la liste\", 1999, 4.5]<\/pre>Ceci cr\u00e9e une liste\u00a0<code>maListe<\/code> de taille 3. Chaque \u00e9l\u00e9ment de la liste se voit attribuer un nombre appel\u00e9 <strong>index<\/strong>: le premier \u00e9l\u00e9ment a pour index 0, le suivant a pour index 1 et ainsi de suite. Les variables individuelles qui composent la liste ont les noms<\/p>\n<p style=\"text-align: center;\"><code>\u00abnomDeLaListe\u00bb[\u00abnumeroIndex\u00bb]<\/code><\/p>\n<p>Donc dans cet exemple, <code>maListe[0]<\/code> est une variable donc la valeur est la cha\u00eene\u00a0<code>\"la premi\u00e8re valeur dans la liste\"<\/code> et <code>print(maListe[2])<\/code> <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=myList%20%3D%20%5B%22la%20premi%C3%A8re%20valeur%20dans%20la%20liste%22%2C%201999%2C%204.5%5D%0Aprint%28myList%5B2%5D%29\" target=\"_blank\">affiche<\/a> <code>4.5<\/code>. Vous pouvez aussi changer les valeurs des \u00e9l\u00e9ments de la liste et afficher la liste enti\u00e8re:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform0\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox0'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Modifier et afficher une liste.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nnombres = ['zero', 'un', 'deux']\nnombres[0] = 'rien'\nprint(nombres)<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"b9ae91d823eb54813021ac6df6655da7\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit0\").value = \"Run program\";document.getElementById(\"inputInUse0\").value = \"N\";<\/script>\n<\/p>\n<p>Comme vous pouvez le voir, l'\u00e9l\u00e9ment <code>numbers[0]<\/code> est trait\u00e9 comme s'il \u00e9tait lui-m\u00eame une variable: il a une valeur et peut \u00eatre chang\u00e9.<\/p>\n<div class='pybox modeNeutral' id='pybox1'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Multiple Choice Exercise: <\/span><span class='title'>Meta-Truc<\/span><\/div><div>Quelle est la sortie du code suivant?<\/p>\n<pre>truc = [2, 25, 80, 12]\r\ntruc[truc[0]] = truc[3]\r\nprint(truc)<\/pre><\/div><label>Your choice: <\/label><select id=\"pyselect1\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">[2, 25, 80, 80]<\/option><option value=\"w\">[2, 25, 80, 12]<\/option><option value=\"r\">[2, 25, 12, 12]<\/option><option value=\"w\">[12, 25, 80, 12]<\/option><option value=\"w\">Ce fragment de code provoque une erreur.<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"13.indexindex\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(1)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults1\"><\/div><div class=\"epilogue\">Correct! Regardez l'instruction d'affectation (la 2e ligne). La valeur de <code>truc[3]<\/code> sur le c\u00f4t\u00e9 droit est <code>12<\/code>. Pour le c\u00f4t\u00e9 gauche, <code>truc[0]<\/code> est <code>2<\/code>, donc <code>truc[truc[0]]<\/code> se r\u00e9f\u00e8re \u00e0 la variable <code>truc[2]<\/code>. La valeur de cette variable est mis \u00e0 jour (\u00e0 partir de <code>80<\/code>) \u00e0 <code>12<\/code>.<\/div><\/div>\n<p><table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Ce que Python appelle une\u00a0<strong>liste<\/strong> serait appel\u00e9 un\u00a0<strong>tableau<\/strong> (array en anglais) dans la pluspart des langages de programmation. Python a aussi\u00a0<a href=\"http:\/\/docs.python.org\/py3k\/library\/array.html\">quelque chose<\/a> de different &amp; plus avanc\u00e9 appel\u00e9 tableau. <\/span><\/td><\/table><\/p>\n<h3>Un erreur courante<\/h3>\n<p>Si vous demandez \u00e0 Python d'utiliser un index qui n'existe pas, vous obtiendrez une erreur:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox2'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Erreur \"out-of-range\".<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nmaListe=[1, 2, 4, 8]\nprint(maListe[4])<\/textarea><\/div>\n<div id='pbhistory2' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit2' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(2)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(2,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse2\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"2\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"286f210284697b155fa66b61cd7722ef\"\/>\n<div id='pbresults2' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit2\").value = \"Run program\";document.getElementById(\"inputInUse2\").value = \"N\";<\/script>\n<\/p>\n<p>Dans cet exemple, puisque\u00a0<code>maListe<\/code> a une longueur de 4 et que le premier index est 0, l'index maximum est 3. Demander un index de 4, 5 ou quelque chose de plus grand g\u00e9n\u00e8re une erreur.<\/p>\n<p><span style=\"color: #000000; font-size: 23px; line-height: 35px;\">Op\u00e9rations courantes utiles<\/span><\/p>\n<h3>Longueur d'une liste: <code>len(\u00abliste\u00bb)<\/code><\/h3>\n<p>Pour d\u00e9terminer le nombre d'\u00e9l\u00e9ments dans une liste, appelez la fonction <code>len()<\/code> sur cette liste. Regardez comment <code>range<\/code> est utilis\u00e9 dans l'exemple suivant.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox3'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Obtenir la longueur d'une liste et l'utiliser pour parcourir la liste.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\nmaListe = [3, 12, \"pizza\", 3, 4]\nprint(\"maListe a pour longueur\", len(maListe))\nfor i in range(0, len(maListe)):\n   print(\"\u00e9l\u00e9ment \u00e0 l'index\", i, \":\", maListe[i])<\/textarea><\/div>\n<div id='pbhistory3' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit3' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(3)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(3,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse3\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"3\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"6aac2df9c7c6bb4a0a5a177f9a09dd7c\"\/>\n<div id='pbresults3' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit3\").value = \"Run program\";document.getElementById(\"inputInUse3\").value = \"N\";<\/script>\n<\/p>\n<p>Il est courant d'utiliser <code>len<\/code> pour \u00e9crire du code qui fonctionne sur des listes de n'importe quelle longueur comme dans l'exemple ci-dessus et l'exercice suivant.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform4\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox4'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Le singe au milieu<\/span><\/div>Ecrire une fonction\u00a0<code>milieu(L)<\/code> qui prend une liste <code>L<\/code> comme argument et retourne l'\u00e9l\u00e9ment qui se trouve au <em>milieu<\/em> de <code>L<\/code>. (Pour s'assurer que le milieu est bien d\u00e9fini, vous assumerez que <code>L<\/code> est de longueur impaire.) Par exemple, appeler <code>milieu([8, 0, 100, 12, 1])<\/code> donnera <code>100<\/code>\u00a0puisque c'est la valeur qui est positionn\u00e9e exactement au milieu de la liste.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=20   class='pyboxCode RW'>\ndef...\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput4\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode4' value='def...\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch4\" value=\"Input Switch\" onclick=\"pbInputSwitch(4,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect4' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(4,'13.middle')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(4,descape($('#defaultCode4').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(4);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"73e43ec101b35b9689a6b7b9d78e46f3\"\/>\n<div id='pbresults4' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(4);});pbInputSwitch(4,\"Y\");<\/script>\n<\/p>\n<h3>Est-ce que les listes sont comme des cha\u00eenes?<\/h3>\n<p>Vous avez surement d\u00e9j\u00e0 remarqu\u00e9 que les op\u00e9rations sur les listes ressemblent beaucoup \u00e0 celle des cha\u00eenes: dans les deux cas on peut utiliser la fonction <code>len()<\/code> pour obtenir leurs longueurs et les deux utilisent <code>X[\u00abindex\u00bb]<\/code> pour extraire des \u00e9l\u00e9ments individuels. Les listes et les cha\u00eenes sont toutes les deux li\u00e9es: elles sont de \"<a href=\"http:\/\/docs.python.org\/py3k\/library\/stdtypes.html?highlight=sequence#sequence-types-str-bytes-bytearray-list-tuple-range\">types s\u00e9quence<\/a>\" en Python. La diff\u00e9rence majeure est que les caract\u00e8res d'une cha\u00eene ne peuvent pas \u00eatre chang\u00e9s.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform5\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox5'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Erreur g\u00e9n\u00e9r\u00e9e en essayant d'attribuer une valeur \u00e0 un caract\u00e8re d'une cha\u00eene.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode5' id='usercode5'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nword='slack'\nprint(word, word[1])\nword[1]='n'<\/textarea><\/div>\n<div id='pbhistory5' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit5' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(5)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(5,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse5\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"5\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"071e91b26fabcbb7947f2acafc8ec3ec\"\/>\n<div id='pbresults5' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit5\").value = \"Run program\";document.getElementById(\"inputInUse5\").value = \"N\";<\/script>\n<\/p>\n<p>Pour cette raison on dit que les listes sont de type <em>mutable<\/em> et que les cha\u00eenes sont de type <em>immutable<\/em>; vous verrez un peu plus d'information \u00e0 ce sujet \u00e0 la le\u00e7on 17.<\/p>\n<h3>Concat\u00e9nation et cr\u00e9ation<\/h3>\n<p>A la <a href=\"\/7a-strings-fr\/\">le\u00e7on 7A<\/a> concernant le type <code>str<\/code>, vous vous rappellerez qu'il est possible d'utiliser <code>+<\/code> pour accoler (<em>concat\u00e9ner<\/em>) deux cha\u00eenes ensemble. Vous pouvez faire de m\u00eame avec des listes:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox6'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Combiner des listes avec <code>+<\/code>.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode6' id='usercode6'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nlistA = [3, 'zut', 7.1]\nlistB = [4, 'alors', 1]\nlistC = listA + listB\nprint(len(listC))\nprint(listC)<\/textarea><\/div>\n<div id='pbhistory6' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit6' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(6)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(6,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse6\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"6\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"26cd15410e85fb217e1466b9c2e77fe8\"\/>\n<div id='pbresults6' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit6\").value = \"Run program\";document.getElementById(\"inputInUse6\").value = \"N\";<\/script>\n<\/p>\n<p>De m\u00eame, vous pouvez utiliser le symbole <code>*<\/code> pour \u00e9tendre une liste par r\u00e9p\u00e9tition. Ceci est utile pour cr\u00e9er une nouvelle liste de taille voulue.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform7\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox7'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Comment utiliser\u00a0<code><code>*<\/code><\/code>.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode7' id='usercode7'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\nnombreTelephone = [9, 6, 7] + [1]*4\nprint(nombreTelephone)\nlisteVide = [0]*20\nprint(listeVide)<\/textarea><\/div>\n<div id='pbhistory7' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit7' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(7)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(7,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse7\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"7\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"05e3b7c7a3542df2d588b75dcb9917dc\"\/>\n<div id='pbresults7' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit7\").value = \"Run program\";document.getElementById(\"inputInUse7\").value = \"N\";<\/script>\n<\/p>\n<p>Pour r\u00e9soudre cet exercice, utilisez un des op\u00e9rateurs que nous venons d'introduire et une boucle\u00a0<code>for<\/code>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform8\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox8'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>C'est naturel<\/span><\/div>Ecrivez une fonction <code>nombresNaturels<\/code> qui prend un entier positif <code>n<\/code> comme entr\u00e9e et retourne une liste <code>[1, 2, ...]<\/code>, compos\u00e9e des <code>n<\/code> premiers entiers naturels.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode8' id='usercode8'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput8\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit8' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch8\" value=\"Input Switch\" onclick=\"pbInputSwitch(8,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(8)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(8,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect8' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(8,'13.natural')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(8);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse8\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"8\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"6174159be9f8f7d3cd67a556dd06b476\"\/>\n<div id='pbresults8' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(8);});pbInputSwitch(8,\"Y\");<\/script>\n<\/p>\n<h3>Fin de ligne: indices n\u00e9gatifs<\/h3>\n<p>Pour obtenir le dernier \u00e9l\u00e9ment d'une liste, on utilise<\/p>\n<p style=\"text-align: center;\"><code>\u00ablistName\u00bb[-1]<\/code><\/p>\n<p>Plus g\u00e9n\u00e9ralement, <code>L[-k]<\/code> retourne le <code>k<\/code><sup>\u00e8me<\/sup> \u00e9l\u00e9ment depuis la fin de la liste; Python g\u00e8re cela int\u00e9rieurement en le traduisant en <code>L[len(L)-k]<\/code>. Ce raccour\u200eci fonctionne pour les cha\u00eenes \u00e9galement!<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform9\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox9'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Palindrome<\/span><\/div>Un <em>palindrome<\/em> est un mot qui s'\u00e9crit de la m\u00eame fa\u00e7on \u00e0 l'endroit et \u00e0 l'envers. Par exemple le mot<\/p>\n<p style=\"text-align: center;\"><code>ressasser<\/code><\/p>\n<p>est un palindrome: la premi\u00e8re et la derni\u00e8re lettres sont les m\u00eames (r), la deuxi\u00e8me et l'avant derni\u00e8re \u00e9galement (e), etc. Ecrivez une fonction <code>estPalindrome(S)<\/code> qui prend une cha\u00eene <code>S<\/code> comme entr\u00e9e et retourne <code>True<\/code> si la cha\u00eene est un palindrome et<code>False<\/code> autrement.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode9' id='usercode9'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory9' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput9\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit9' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch9\" value=\"Input Switch\" onclick=\"pbInputSwitch(9,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(9)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(9,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect9' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(9,'13.palindrome')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(9);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse9\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"9\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"bf4c739aedec159059ada903f41b9996\"\/>\n<div id='pbresults9' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(9);});pbInputSwitch(9,\"Y\");<\/script>\n<\/p>\n<h3><code>max<\/code> et <code>sum<\/code><\/h3>\n<p>La fonction <code>max<\/code> que nous avons d\u00e9j\u00e0 vue s'applique \u00e9galement aux listes de nombres: elle retourne le plus grand nombre dans une liste. De m\u00eame, la fonction <code>sum(L)<\/code> retourne la somme des \u00e9l\u00e9ments de la liste <code>L<\/code>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform10\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox10'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div><div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode10' id='usercode10'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nlist = [3, 10, 4, 9, 0]\nprint(sum(list))\nprint(max(list))<\/textarea><\/div>\n<div id='pbhistory10' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit10' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(10)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(10,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse10\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"10\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"8391f798f13bdcc5e3debef1c0636f8c\"\/>\n<div id='pbresults10' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit10\").value = \"Run program\";document.getElementById(\"inputInUse10\").value = \"N\";<\/script>\n<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform11\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox11'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Produit<\/span><\/div>D\u00e9finir une fonction <code>prod(L)<\/code> qui retourne le produit des \u00e9l\u00e9ments d'une liste <code>L<\/code>.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode11' id='usercode11'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory11' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput11\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit11' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch11\" value=\"Input Switch\" onclick=\"pbInputSwitch(11,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(11)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(11,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect11' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(11,'13.product')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(11);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse11\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"11\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"a15578764134ce70a6002f64e9a1cf79\"\/>\n<div id='pbresults11' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(11);});pbInputSwitch(11,\"Y\");<\/script>\n<\/p>\n<h3>Listes et boucles<\/h3>\n<p>Il est tr\u00e8s courant (comme dans l'exercice pr\u00e9c\u00e9dent) de parcourir une liste pour obtenir chacune de ses valeurs. Python propose un raccourci pour faire ce type d'op\u00e9ration appel\u00e9 <em>boucle \"for all\"<\/em>\u00a0ou <em>boucle \"for each\"<\/em>. Si L est une liste, le code<\/p>\n<pre>for x in L:\r\n  \u00abcorps de la boucle\u00bb<\/pre>fonctionne de la mani\u00e8re suivante: d'abord <code>x<\/code> prend la premi\u00e8re valeur de <code>L<\/code> et le corps est ex\u00e9cut\u00e9; ensuite <code>x<\/code> prend la seconde valeur de <code>L<\/code> et le code est ex\u00e9cut\u00e9; ceci continue pour tous les \u00e9l\u00e9ments de <code>L<\/code>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform12\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox12'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'><code>for in<\/code><\/span><\/div>D\u00e9finissez une fonction\u00a0<code>prod(L)<\/code> comme avant mais cette fois en utilisant ce nouveau type de boucle.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode12' id='usercode12'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory12' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput12\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit12' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch12\" value=\"Input Switch\" onclick=\"pbInputSwitch(12,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(12)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(12,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect12' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(12,'13.foreach')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(12);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse12\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"12\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"9ce3c28d9fba6297a35bc9d80720b66a\"\/>\n<div id='pbresults12' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(12);});pbInputSwitch(12,\"Y\");<\/script>\n<\/p>\n<p>Les boucles \"for all\" fonctionnent \u00e9galement pour les cha\u00eenes: essayez\u00a0<code><a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=for%20char%20in%20%22hello%22%3A%20print%28char%29\" target=\"_blank\">for char in \"hello\"<\/a><\/code>.<\/p>\n<p><em>Bravo! Vous pouvez passer \u00e0 la le\u00e7on suivante ou essayer les exercices bonus ci-dessous.<\/em><\/p>\n<hr \/>\n<p><div class='pybox modeNeutral' id='pybox13'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Short Answer Exercise: <\/span><span class='title'>Fonction myst\u00e8re<\/span><\/div>Quelle valeur de <code>x<\/code> aura pour effet que que la fonction <code>mystery(x)<\/code> s'ex\u00e9cutera infiniment?<\/p>\n<pre>def mystery(x):\r\n  a = [0, 4, 0, 3, 2]\r\n  while x &gt; 0:\r\n    x = a[x]\r\n  return \"Fini\"<\/pre><label for=\"pyShortAnswer13\">Your answer: <\/label><input type=\"text\" onkeypress=\"{if (event.keyCode==13) pbShortCheck(13)}\" id=\"pyShortAnswer13\"><div class=\"pyboxbuttons\"><input type=\"hidden\" name=\"type\" value=\"trimmableString\"\/><input type=\"hidden\" name=\"correct\" value=\"3\"\/><input type=\"hidden\" name=\"slug\" value=\"13.mystery\"\/><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick = 'pbShortCheck(13)'\/><\/div><div class=\"pbresults\" id=\"pyShortResults13\"><\/div><div class=\"epilogue\">Correct!<\/div><\/div>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform14\" method=\"POST\">\n<div class='pybox modeNeutral scramble' id='pybox14'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Scramble Exercise: <\/span><span class='title'>\u00e0 la Mode<\/span><\/div>Le <em>mode<\/em> d'une liste est l'\u00e9l\u00e9ment qui appara\u00eet le plus souvent (celui qui appara\u00eet le plus grand nombre de fois). D\u00e9chiffrez le programme ci-dessous afin que <code>mode(L)<\/code> trouve correctement le mode en assumant que <code>L<\/code> est une liste de nombre de 0 \u00e0 9. (Pour simplifier l'exercice, il ne pourra y avoir qu'une mode.) <ul class=\"pyscramble\" name=\"pyscramble\" id=\"pyscramble14\">\n <li class=\"pyscramble\">  for i in L:<\/li>\n <li class=\"pyscramble\">  fr\u00e9quence = [0]*10<\/li>\n <li class=\"pyscramble\">def mode(L):<\/li>\n <li class=\"pyscramble\">      return i<\/li>\n <li class=\"pyscramble\">    fr\u00e9quence[i] = fr\u00e9quence[i] + 1<\/li>\n <li class=\"pyscramble\">  for i in range(0, 10):<\/li>\n <li class=\"pyscramble\">    if fr\u00e9quence[i]==max(fr\u00e9quence):<\/li>\n<\/ul>\n<input type='hidden' id='usercode14' name='usercode14'\/>\n<div id='pbhistory14' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit14' value=' '\/><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse14\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"14\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"5a361e282a59820515446ec414d8fef2\"\/>\n<div id='pbresults14' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit14\").value = \"Run program\";document.getElementById(\"inputInUse14\").value = \"N\";<\/script>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une liste est une s\u00e9quence de plusieurs variables group\u00e9es ensemble sous un seul nom. Au lieu d'\u00e9crire un programme avec plusieurs variables x0, x1, x2, \u2026 vous pouvez d\u00e9finir une seule variable x et acc\u00e9der \u00e0 ces \u00e9l\u00e9ments x[0], x[1], &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/13-fr\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4681","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=4681"}],"version-history":[{"count":39,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4681\/revisions"}],"predecessor-version":[{"id":7475,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4681\/revisions\/7475"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=4681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}