{"id":4683,"date":"2012-06-21T17:39:02","date_gmt":"2012-06-21T21:39:02","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=4683"},"modified":"2018-01-30T22:50:40","modified_gmt":"2018-01-31T03:50:40","slug":"14-fr","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/14-fr\/","title":{"rendered":"14: M\u00e9thodes"},"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>Jusqu'\u00e0 maintenant, nous avons vu deux structures de donn\u00e9es en Python: les cha\u00eenes et les listes. Elles supportent plusieurs <em>methodes<\/em>, qui sont des variantes des fonctions.<\/p>\n<p>Par exemple, une <em>methode<\/em> de <code>liste<\/code> est la m\u00e9thode <code>reverse()<\/code>. Comme son nom l'indique, elle inverse une liste (par exemple le premier \u00e9l\u00e9ment devient le dernier et vice-versa). On appelle une m\u00e9thode en utilisant une structure point (<code>.<\/code>) , de cette mani\u00e8re:<\/p>\n<p style=\"text-align: center;\"><code>\u00abnomObjet\u00bb.\u00abnomM\u00e9thode\u00bb(\u00abliste d'arguments, s'il y en a\u00bb)<\/code><\/p>\n<p>Pour comparer, la syntaxe que nous avons d\u00e9j\u00e0 vu pour appeler une fonction \u00e9tait<\/p>\n<p style=\"text-align: center;\"><code>\u00abnomFonction\u00bb(\u00abliste des arguments, s'il y en a\u00bb)<\/code><\/p>\n<p>Voici un exemple d'appel de la m\u00e9thode <code>reverse<\/code> pour une liste.<\/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>Inverser 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'>\nL = [1, 2, 3, 4, 5]\nL.reverse()\nprint(L)<\/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=\"a68c9120529207772697ad707aa355dd\"\/>\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>Un exemple de m\u00e9thode qui prend un argument est <code>str.startswith<\/code> qui indique si une cha\u00eene commence ou non par une cha\u00eene donn\u00e9e:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform1\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox1'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Un exemple de m\u00e9thode pour une cha\u00eene.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nprint('croissant'.startswith('crois'))\nprint('tarte'.startswith('pense'))<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit1' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(1)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(1,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse1\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"1\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"d2fcd60d05edc9d0b10a659fea36adf4\"\/>\n<div id='pbresults1' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit1\").value = \"Run program\";document.getElementById(\"inputInUse1\").value = \"N\";<\/script>\n<\/p>\n<h2>De nombreuses m\u00e9thodes<\/h2>\n<p>Nous mentionnons ci-dessous les m\u00e9thodes les plus courantes pour les cha\u00eenes et les listes. Elles ex\u00e9cutent des t\u00e2ches que vous pourriez \u00e9crire vous-m\u00eame mais l'utilisation de m\u00e9thodes standards a l'avantage de rendre le code plus facile \u00e0 lire et \u00e0 modifier pour les autres. Et pourquoi refaire quelque chose qui existe d\u00e9j\u00e0!<\/p>\n<h3>Listes<\/h3>\n<p>Ces m\u00e9thodes ne modifient pas les listes:<\/p>\n<ul>\n<li><code>list.index(X)<\/code>: trouve\u00a0<code>X<\/code> dans la liste et retourne l'index <code>i<\/code> tel que <code>list[i]==X<\/code> en cherchant tous les \u00e9l\u00e9ments. Le plus petit <code>i<\/code> possible est retourn\u00e9. Si <code>X<\/code> n'existe pas dans la liste, une <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=L%3D%5B0%2C%201%2C%202%5D%0Aprint%28L.index%283%29%29\" target=\"_blank\"><code>ValueError<\/code>\u00a0est g\u00e9n\u00e9r\u00e9e<\/a>.\n<ul>\n<li><code>X in list<\/code>\u00a0retourne\u00a0<code>True<\/code>\u00a0si <code>X<\/code> est un \u00e9l\u00e9ment de la liste sinon\u00a0<code>False<\/code>. L'utiliser pour \u00e9vite l'erreur <code>ValueError<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li><code>list.count(X)<\/code>: retourne le nombre de fois qu'un \u00e9l\u00e9ment <code>X<\/code> appara\u00eet dans une liste.<\/li>\n<\/ul>\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>M\u00e9thodes listes.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\nL = [3, 1, 4, 1, 5, 9]\nprint(L.index(9))\nprint(L[L.index(3)])\nprint(L.count(1))<\/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=\"9993f511a43e0c4b83307fc954f7eeb2\"\/>\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>Ces m\u00e9thodes modifient la liste:<\/p>\n<ul>\n<li><code>list.append(X)<\/code> ajoute <code>X<\/code> \u00e0 la fin de <code>list<\/code><\/li>\n<li><code>list.insert(i, X)<\/code> ajoute <code>X<\/code> \u00e0 la position <code>i<\/code><\/li>\n<li><code>list.extend(L)<\/code> ajoute une liste <code>L<\/code> d'\u00e9l\u00e9ments \u00e0 la fin<\/li>\n<li><code>list.remove(X)<\/code> supprime la premi\u00e8re apparition de <code>X<\/code><\/li>\n<li><code>list.pop(i)<\/code> efface &amp; retourne l'\u00e9l\u00e9ment <code>list[i]<\/code>, tandis que <code>list.pop()<\/code> efface &amp; retourne le dernier \u00e9l\u00e9ment<\/li>\n<li><code>del list[i]<\/code> efface le <code>i<\/code>\u00e8me \u00e9l\u00e9ment de <code>list<\/code><\/li>\n<li><code>list.reverse()<\/code>\u00a0inverse la liste<\/li>\n<li><code>list.sort()<\/code>\u00a0trie la liste<\/li>\n<\/ul>\n<p>Toutes les m\u00e9thodes ci-dessus except\u00e9 <code>pop<\/code> retournent <code>None<\/code>.\u00a0Certaines de ces m\u00e9thodes peuvent \u00eatre appel\u00e9es avec des arguments un peu diff\u00e9rents; pour plus d'informations voir la section\u00a0<a href=\"http:\/\/docs.python.org\/py3k\/library\/stdtypes.html#mutable-sequence-types\">list methods<\/a> de la documentation Python. Les listes supportent aussi des sous-ensemble plus complexe appel\u00e9s \"tranches\" qui permettent l'insertion et l'effacement de toute une sous-liste, similaire \u00e0 la notation <code>string[x:y:z]<\/code> que nous avons vu aux <a href=\"\/12-tips\/\">le\u00e7ons<\/a> <a href=\"\/7a-strings\/\">pr\u00e9c\u00e9dentes<\/a>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox3'>\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'>Les rempla\u00e7ants<\/span><\/div>En utilisant\u00a0<code>index<\/code>\u00a0et d'autres m\u00e9thodes de listes, \u00e9crivez une fonction\u00a0<code>remplace(list, X, Y)<\/code>\u00a0qui remplace toutes les apparitions de\u00a0<code>X<\/code>\u00a0dans\u00a0<code>list<\/code>\u00a0par\u00a0<code>Y<\/code>. Par exemple, si\u00a0<code>L = [3, 1, 4, 1, 5, 9]<\/code>\u00a0alors\u00a0<code>remplace(L, 1, 7)<\/code>\u00a0changera\u00a0<code>L<\/code>\u00a0en\u00a0<code>[3, 7, 4, 7, 5, 9]<\/code>. Pour rendre l'exercice plus int\u00e9ressant, <em>vous n'\u00eates\u00a0<strong>pas<\/strong>\u00a0autoris\u00e9s \u00e0 utiliser<\/em>\u00a0<code>[]<\/code>.\u00a0<br\/>Note: vous n'avez pas besoin d'utiliser\u00a0<code>return<\/code>. <a class=\"hintlink\"  id=\"hintlink4\">Indice<\/a><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='usercode3' id='usercode3'  cols=10 rows=20   class='pyboxCode RW'>\ndef replace(list, X, Y):\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory3' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput3\">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='defaultCode3' value='def replace(list, X, Y):\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit3' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch3\" value=\"Input Switch\" onclick=\"pbInputSwitch(3,'Y')\" ><\/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,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect3' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(3,'14.replace')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(3,descape($('#defaultCode3').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(3);\" >Help<\/option>\n<\/select><\/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=\"899770e18c234c146f1bb70fea7cfe98\"\/>\n<div id='pbresults3' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(3);});pbInputSwitch(3,\"Y\");<\/script>\n<\/p>\n<h2>Cha\u00eenes<\/h2>\n<p>Comme pour les listes, vous pouvez utiliser <code>in<\/code>,\u00a0<code>index<\/code>\u00a0et <code>count<\/code> avec les cha\u00eenes. Elles sont encore plus puissantes puisqu'elles fonctionnent avec les sous-cha\u00eenes \u00e9galement et pas que pour trouver des caract\u00e8res seuls:<\/p>\n<ul>\n<li><code>S in T<\/code> est un bool\u00e9en qui indique si une cha\u00eene <code>S<\/code> est une sous-cha\u00eene de la cha\u00eene <code>T<\/code><\/li>\n<li><code>S.index(T)<\/code> trouve le premier index de <code>S<\/code> o\u00f9 <code>T<\/code> est une sous-cha\u00eene<\/li>\n<li><code>S.count(T)<\/code> donne le nombre d'occurrences de <code>T<\/code> qui ne se chevauchent pas comme sous-cha\u00eene de <code>S<\/code><\/li>\n<\/ul>\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>Appel de <code>index<\/code> et <code>count<\/code> sur des cha\u00eenes.<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'>\nprint(\"marmelade\".count(\"ma\"))\nprint(\"trouve une sous-cha\u00eene\".index(\"sous-cha\u00eene\"))\nprint(\"os\" in \"d\u00e9soss\u00e9\")<\/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=\"71231e7a5e11deba05f2fb57469220f3\"\/>\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>Voici les m\u00e9thodes de <code>str<\/code> les plus couramment utilis\u00e9es:<\/p>\n<ul>\n<li>Casse des lettres: <code>capitalize, lower, upper, islower, isupper<\/code><\/li>\n<li>Caract\u00e8res: <code>isalpha, isdigit<\/code><\/li>\n<li>Padding: <code>center, ljust, rjust<\/code>; <code>strip<\/code> efface le padding<\/li>\n<li>Sous-cha\u00eenes:\u00a0<code>endswith, startswith, find, replace<\/code><\/li>\n<li>Parcours: <code>split, splitlines<\/code><\/li>\n<\/ul>\n<p>Nous introduirons ces m\u00e9thodes plus en d\u00e9tails lorsque nous en aurons besoin. Une liste d\u00e9taill\u00e9e de\u00a0<a href=\"http:\/\/docs.python.org\/py3k\/library\/stdtypes.html#string-methods\">m\u00e9thodes pour cha\u00eenes<\/a> est donn\u00e9e dans la documentation Python.<\/p>\n<p><strong>Les cha\u00eenes sont immuables<\/strong>. Nous avons mentionn\u00e9 <code>list.reverse()<\/code> qui change une liste en l'inversant, mais il n'y a pas de m\u00e9thode <code>str.reverse()<\/code>. Ceci est parce que les objets cha\u00eenes ne peuvent pas \u00eatre modifi\u00e9s une fois qu'il ont \u00e9t\u00e9 cr\u00e9\u00e9s. La le\u00e7on 17 donnera plus d'explications \u00e0 ce sujet.<\/p>\n<p>Voici un exemple d'une m\u00e9thode cha\u00eene: <code>S.replace(ancien, nouveau)<\/code> retourne une version modif\u00e9e de <code>S<\/code> dans laquelle chaque occurrence de la sous-cha\u00eene\u00a0<code>ancien<\/code> est remplac\u00e9e par <code>nouveau<\/code>. Cela cr\u00e9\u00e9 une nouvelle cha\u00eene sans changer l'ancienne:<br \/>\n<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>Exemple: <code>replace<\/code> retourne une nouvelle cha\u00eene et ne modifie pas l'originale.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode6' id='usercode6'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\nsnack = 'Mange le chocolat'\nnouvelSnack = snack.replace(\"le chocolat\",\"l'orange\")\nprint(snack)\nprint(nouvelSnack)<\/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=\"f44fdfc6388851dd36fcb2a0758e9f3d\"\/>\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>Pour l'exercice suivant, ces m\u00e9thodes seront utiles:<\/p>\n<ul>\n<li><code>str.replace<\/code>, que nous venons de d\u00e9crire<\/li>\n<li>la m\u00e9thode bool\u00e9enne\u00a0<code>str.isalpha()<\/code>\u00a0qui retourne <code>True<\/code> si <code>str<\/code> est une cha\u00eene (ou caract\u00e8re) compos\u00e9e de lettres uniquement<\/li>\n<li>la m\u00e9thode bool\u00e9enne\u00a0<code>str.isdigit()<\/code>\u00a0qui retourne\u00a0<code>True<\/code>\u00a0si <code>str<\/code> est une cha\u00eene (ou caract\u00e8re) compos\u00e9e de chiffres uniquement<\/li>\n<li><code>str.upper()<\/code> qui retourne une version de <code>str<\/code> convertie en majuscule.<\/li>\n<\/ul>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform7\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox7'>\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 postal exact<\/span><\/div>D\u00e9finissez une fonction\u00a0<code>valideCodePostal<br \/>\n(S)<\/code> qui v\u00e9rifie si <code>S<\/code> repr\u00e9sente un code postal Canadien qui est <em>valide<\/em>:<\/p>\n<ul>\n<li>d'abord, on efface tous les espaces;<\/li>\n<li>ensuite, on examine\u00a0la cha\u00eene restante: elle est valide si elle est de la forme\u00a0<code>L#L#L#<\/code> ou les\u00a0<code>L<\/code>'s sont des lettres (en majuscules ou minuscules) et les\u00a0<code>#<\/code>'s sont des chiffres.<\/li>\n<\/ul>\n<p>Si <code>S<\/code> n'est pas un code postal Canadien valide, retournez le bool\u00e9en <code>False<\/code>. Si <code>S<\/code> est valide, retournez une version du m\u00eame code postal au format <code>L#L#L#<\/code> o\u00f9 chaque <code>L<\/code> est convertie en majuscule. <br\/> Par exemple, si on appelle <code>valideCodePostal(\" e5 t \u00a0 3S4\")<\/code> elle doit retourne <code>\"E5T3S4\"<\/code>.\u00a0<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='usercode7' id='usercode7'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory7' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput7\">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='submit7' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch7\" value=\"Input Switch\" onclick=\"pbInputSwitch(7,'Y')\" ><\/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,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect7' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(7,'14.postal')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(7);\" >Help<\/option>\n<\/select><\/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=\"0d1bdfe7112f20c603afd3b036c96dbc\"\/>\n<div id='pbresults7' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(7);});pbInputSwitch(7,\"Y\");<\/script>\n<\/p>\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> Le reste de cette le\u00e7on est technique et n'est pas requis pour la suite des le\u00e7ons. <\/span><\/td><\/table><\/p>\n<h3>A propos des objets<\/h3>\n<p>Au fur et \u00e0 mesures que vous allez apprendre Python, vous allez d\u00e9couvrir d'autres classes que les cha\u00eenes et les listes. D'autres classes que vous rencontrerez surement sont les <em>objets fichier<\/em>, les <em>sets<\/em> et les <em>dictionnaires<\/em>. Elles ont toutes de nombreuses m\u00e9thodes tr\u00e8s utiles. Vous pouvez demander \u00e0 Python toutes les m\u00e9thodes d'une objet donn\u00e9 en utilisant la fonction <code>dir<\/code>:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform8\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox8'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Les m\u00e9thodes de <code>str<\/code>. Notez que <code>startswith<\/code> est une des m\u00e9thodes.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode8' id='usercode8'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nmonNom = 'Jacques'\nprint(dir(monNom))<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit8' value=' '\/><\/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,'N')\" ><\/td>\n<\/tr><\/table><\/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=\"23066f3c184a313d05ea4aaebf1ffa33\"\/>\n<div id='pbresults8' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit8\").value = \"Run program\";document.getElementById(\"inputInUse8\").value = \"N\";<\/script>\n<\/p>\n<p>Regarder les propri\u00e9t\u00e9s d'un objet s'appelle <em>introspection<\/em>. Tout en Python peut avoir des m\u00e9thodes:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform9\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox9'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Les membres de\u00a0<code>int<\/code>.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode9' id='usercode9'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nx = 42\nprint(dir(x)) # 'bit_length' est inclus \nprint(x.bit_length()) # une m\u00e9thode pour int<\/textarea><\/div>\n<div id='pbhistory9' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit9' value=' '\/><\/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,'N')\" ><\/td>\n<\/tr><\/table><\/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=\"8d988d9e1207336b1ce051bd9d6151f2\"\/>\n<div id='pbresults9' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit9\").value = \"Run program\";document.getElementById(\"inputInUse9\").value = \"N\";<\/script>\n<\/p>\n<p>Certaines entr\u00e9es de\u00a0<code>dir<\/code> sont en fait des\u00a0<em>variables membre<\/em> au lieu de m\u00e9thodes, par exemple <code>int.denominator<\/code>\u00a0est un nombre et pas une fonction. Techniquement, <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=def%20f%28%29%3A%20return%2042%0Ag%20%3D%20f%0Aprint%28g%28%29%29%0Aprint%28type%28f%29%29\" target=\"_blank\"> les fonctions sont des objets<\/a> en Python, donc les fonctions membres sont des cas sp\u00e9ciaux de variables membres.<\/p>\n<p>Vous pouvez faire des introspections de modules \u00e9galement. Si vous importez le module math (<code>import math<\/code>) et appelez <code>dir(math)<\/code> vous obtiendrez une liste de tout ce qui est contenu dans le module <code>math<\/code>, y compris le nombre <code>pi<\/code> et la fonction <code>sqrt<\/code>.<\/p>\n<h3>Pourquoi des objets?<\/h3>\n<p>Pourquoi avons-nous des m\u00e9thodes comme <code>S.index(T)<\/code> au lieu d'un simple appel de fonction comme <code>index(S, T)<\/code>? C'est-\u00e0-dire, pourquoi avons-nous l'<em>objet<\/em>\u00a0<code>S<\/code>\u00a0et la <em>m\u00e9thode<\/em> <code>str.index()<\/code> du tout?<\/p>\n<p>Les principaux avantages des objets deviennent plus claires quand vous commencer \u00e0 programmer avec des types de donn\u00e9es\u00a0plus complexes et vari\u00e9s. Chaque type d'objet (par exemple, la classe <code>str<\/code>) repr\u00e9sente \u00e0 la fois les donn\u00e9es sous-jacentes stock\u00e9es (p. ex., une s\u00e9quence de caract\u00e8res et sa longueur) et les types d'op\u00e9rations qui peuvent \u00eatre effectu\u00e9es sur celui-ci (p. ex., la conversion en majuscules et la production d'un sous-cha\u00eene). Un exemple plus complexe est les objets de fichiers: ils repr\u00e9sentent le nom du fichier qui est ouvert, votre position actuelle dans le fichier, et les m\u00e9thodes pour les lire et \u00e9crire. Vous pouvez m\u00eame d\u00e9finir vos propres types de donn\u00e9es!<\/p>\n<p>Cette approche g\u00e9n\u00e9rale est appel\u00e9e \u00abprogrammation orient\u00e9e objet\u00bb (POO). Certains de ses avantages sont les suivants:<\/p>\n<ul>\n<li><strong>organisation<\/strong>:\u00a0Tout dans le module <code>math<\/code> peut \u00eatre acc\u00e9d\u00e9\u00a0par la syntaxe <code>math.\u00abnom\u00bb<\/code>. Ca \u00e9viter incompatibilit\u00e9s\u00a0avec les noms de variables dans votre programme.<\/li>\n<li><strong>encapsulation<\/strong>:\u00a0Tout comme un programme peut travailler avec plusieurs cha\u00eenes\u00a0ou plusieurs objets fichiers en m\u00eame temps, vous pouvez travailler avec plusieurs copies distinctes (<em>instances<\/em>) de n'importe quel type de donn\u00e9es tu d\u00e9finisse.<\/li>\n<li><strong>r\u00e9utilisation<\/strong>:\u00a0Une fois que vous avez d\u00e9fini un type de donn\u00e9es (comme <code>str<\/code>) ou une biblioth\u00e8que de m\u00e9thodes (comme <code>math<\/code>), vous pouvez le r\u00e9utiliser encore et encore, ou le donner \u00e0 d'autres personnes \u00e0 utiliser.<\/li>\n<li><strong>d\u00e9bogage<\/strong>:\u00a0Nous avons vu comment l'\u00e9criture des fonctions \u00e9vite la n\u00e9cessit\u00e9 d'avoir de nombreuses copies du m\u00eame code, et que \u00e7a\u00a0rend le d\u00e9bogage plus facile. On obtient le m\u00eame effet quand on definit\u00a0toutes les fonctions associ\u00e9es \u00e0 un type de donn\u00e9es en un seul endroit (la d\u00e9finition de la classe).<\/li>\n<li><strong>relations entre les classes<\/strong>:\u00a0Python sait que la m\u00e9thode <code>index<\/code>\u00a0signifie une chose pour une cha\u00eene et quelque chose d'autre pour une liste. De m\u00eame, non seulement peut Python lire et \u00e9crire des fichiers sur votre ordinateur, mais il peut \u00e9galement lire et \u00e9crire des donn\u00e9es sur Internet. Dans les deux cas (s\u00e9quences des\u00a0caract\u00e8res\u00a0ou de quelque d'autre, et\u00a0les fichiers locaux ou distants) les classes li\u00e9es peuvent \u00eatre trait\u00e9es de mani\u00e8re uniforme en utilisant le concept d'<em>h\u00e9ritage<\/em>.<\/li>\n<\/ul>\n<p>Dans le reste du Cercles Informatiques nous allons seulement <em>utiliser<\/em> des objets et des m\u00e9thodes. Vous pouvez en apprendre davantage sur la <em>cr\u00e9ation<\/em> de vos propres classes plus tard (voir la page Ressources).<\/p>\n<p>Les trois le\u00e7ons\u00a0suivants peuvent \u00eatre compl\u00e9t\u00e9es dans n'importe quel ordre. Ils donnent une vari\u00e9t\u00e9 de d\u00e9fis combinant les th\u00e8mes des pr\u00e9c\u00e9dentes le\u00e7ons.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jusqu'\u00e0 maintenant, nous avons vu deux structures de donn\u00e9es en Python: les cha\u00eenes et les listes. Elles supportent plusieurs methodes, qui sont des variantes des fonctions. Par exemple, une methode de liste est la m\u00e9thode reverse(). Comme son nom l'indique, &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/14-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-4683","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4683","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=4683"}],"version-history":[{"count":33,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4683\/revisions"}],"predecessor-version":[{"id":10713,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4683\/revisions\/10713"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=4683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}