{"id":4643,"date":"2012-06-21T16:49:14","date_gmt":"2012-06-21T20:49:14","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=4643"},"modified":"2018-03-19T02:04:49","modified_gmt":"2018-03-19T06:04:49","slug":"4-fr","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/4-fr\/","title":{"rendered":"4: Types"},"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 \/>\nOther translation: Andr\u00e9 Roberge, andre.roberge@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><em>\u00c0 partir de cette le\u00e7on, les exemples et les boites de donn\u00e9es aurons des b0uttons \u00e9tiquet\u00e9s <\/em><strong>Ouvrir en console<\/strong> <em>et <\/em><strong>Visualiser<\/strong>. Utilisez ces boutons pour aider \u00e0 r\u00e9soudre les erreurs et \u00e0 explorer le code.<\/p>\n<p>Dans le <a href=\"http:\/\/cscircles.cemc.uwaterloo.ca\/0-fr\/\">Programme Bonjour, monde !<\/a>, nous avons vu que Python a la capacit\u00e9 de r\u00e9p\u00e9ter une phrase \u00e0 l\u2019utilisateur. En plus, nous avons vu plusieurs exemples d\u2019arithm\u00e9tique avec des chiffres. Les chiffres et les phrases sont des objets fondamentalement diff\u00e9rents et ils causent une erreur Python quand nous essayons de les m\u00e9langer de fa\u00e7on incorrecte.<\/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> Essaie de comparer une cha\u00eene et un chiffre.<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'>\nx = \"Bonjour, monde !\"\ny = 35\nz = max(x, y)<\/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=\"75ed0d2d508ab4c6513d1461014ab69c\"\/>\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 voir, on re\u00e7oit une erreur qui dit que les deux arguments sont de genres diff\u00e9rents. Cette erreur est une bonne introduction pour le reste de la le\u00e7on.<\/p>\n<p>&#x25aa;\u00a0\u00a0 \"Bonjour, monde !\" est une valeur de type\u00a0<strong>cha\u00eene<\/strong> (<strong>string <\/strong>en anglais), qui a l\u2019abr\u00e9viation <code>str<\/code> en Python. Une cha\u00eene est n\u2019importe quelle s\u00e9quence de chiffres, lettres et ponctuation; nous allons en apprendre davandage \u00e0 ce sujet \u00e0 la le\u00e7on 7A.<\/p>\n<p>&#x25aa;\u00a0\u00a0 35 est une valeur <strong>enti\u00e8re<\/strong> (<strong>integer <\/strong>en anglais), qui a l\u2019abr\u00e9viation <code>int<\/code> en Python. Un nombre entier est simplement un nombre habituel, sans partie d\u00e9cimale; par exemple, 42, -12 et 0 sont des valeurs enti\u00e8res.<\/p>\n<p>Utiliser un objet du mauvais type est une cause tr\u00e8s courante d\u2019erreurs dans les programmes. C\u2019est comme essayer de boire un sandwich: c\u2019est impossible parce que l\u2019on ne peut boire que ce qui est de type liquide, et un sandwich est de type solide.<\/p>\n<p>Vous pouvez d\u00e9terminer le type d\u2019un objet en appelant la fonction <code>type<\/code>.<\/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>Quelques exemples de types.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nprint(type(\"Bonjour, monde !\"))\nprint(type(34))\nprint(type(1.234))<\/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=\"15cbf9ebbcfc25c48e4f1b9b6ca513ab\"\/>\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<p>(La signification de class est similaire au type.) L\u2019exemple ci-dessus d\u00e9montre que les chiffres, eux aussi, sont divis\u00e9s en deux diff\u00e9rents types : int, que nous avons mentionn\u00e9 ci-dessus ; et float, qui est utilis\u00e9 pour garder des chiffres avec une partie d\u00e9cimale. Vous devriez penser \u00e0 des floats, comme \u00e9tant \u00a0des valeurs inexactes ou des valeurs approximatives (nous allons expliquer cela plus en d\u00e9tails dans la le\u00e7on 7B). Habituellement, vous pouvez m\u00e9langer des valeurs float avec des valeurs int, et avoir un autre float comme r\u00e9sultat.<\/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>Le m\u00e9lange d\u2019un float et d\u2019un int.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nx = 1.2\ny = 2\nz = x * y\nprint(x, y, z)\nprint(type(x), type(y), type(z))<\/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=\"6f21ee769bd3e22ec989fbb8a69edbf5\"\/>\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>En fait, ce que Python fait r\u00e9ellement quand vous m\u00e9langez un float avec un int, est qu\u2019il convertit le int en un float et travaille avec deux floats.<\/p>\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'>Multiple Choice Exercise: <\/span><span class='title'>Flottant<\/span><\/div><div>Si nous changeons la valeur 1.2 \u00e0 1.5 dans le programme ci-dessus, quel est la sortie?<\/div><label>Your choice: <\/label><select id=\"pyselect3\"><option value=\"d\" selected>Select one<\/option><option value=\"r\">1.5 2 3.0<\/option><option value=\"w\">1.5 2.0 3.0<\/option><option value=\"w\">Une erreur est caus\u00e9e<\/option><option value=\"w\">1.5 2 3<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"4.mixing\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(3)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults3\"><\/div><div class=\"epilogue\">Correct ! Nous devons expliquer deux faits ici, pourquoi <code>z<\/code> est imprim\u00e9 comme <code>3.0<\/code>.\n<ul>\n<li>L'expression <code>x * y<\/code> m\u00eale un <code>int<\/code> et un <code>float<\/code>, ce que Python consid\u00e8re comme deux <code>float<\/code>s, et le r\u00e9sultat <code>z<\/code> est donc un float.<\/li>\n<li>La valeur math\u00e9matique de <code>z<\/code> est 1.5 fois 2, qui font 3, mais stock\u00e9 sous forme d\u00e9cimale inexacte, de type <code>float<\/code>. Quand Python imprime un <code>float<\/code>, si sa valeur est un nombre entier, il est imprim\u00e9 avec <code>.0<\/code>  pr\u00e9cisant qu'il s'agit d'une valeur inexacte.<\/li>\n<\/ul>\nEn outre, notez que la valeur et le type de <code>y<\/code> n'ont jamais chang\u00e9.<\/div><\/div>\n<p>Il est souvent n\u00e9cessaire de changer d'un type d\u2019information \u00e0 un autre. De la m\u00eame fa\u00e7on que l\u2019on peut convertir un sandwich de l\u2019\u00e9tat solide \u00e0 l\u2019\u00e9tat liquide, avec l\u2019utilisation d\u2019un mixeur, on peut changer l\u2019information d'un type \u00e0 un autre type en utilisant une <strong>fonction de transtypage <\/strong>(<strong>typecast function <\/strong>en anglais). On peut \u00e9crire le type d\u00e9sir\u00e9 de la m\u00eame fa\u00e7on que l\u2019on appelle une fonction, par exemple<\/p>\n<pre>x = float(\"3.4\")\r\nprint(x-1)<\/pre>change la valeur cha\u00eene \"3.4\" \u00e0 une valeur float 3.4 et imprime la valeur 2.4. Sans la fonction de transtypage, le programme <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%3D%223.4%22%0Aprint%28x-1%29\" target=\"_blank\"> ne fonctionnerait pas<\/a> puisque il ne peut pas soustraire un chiffre d\u2019une cha\u00eene.<\/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> Parfois, Python nous laisse m\u00e9langer des cha\u00eenes et des chiffres. La d\u00e9claration <code>print(\"hots\" * 2)<\/code>\u00a0imprime <code>hotshots<\/code>. Une r\u00e8gle de Python stipule que multiplier une cha\u00eene <em>s<\/em> par un nombre entier <em>n <\/em>\u00e9quivaut \u00e0 faire <em>n <\/em>copies de la cha\u00eene \u00e0 la suite. Nous allons voir que\u00a0\"l\u2019addition de deux cha\u00eenes\" est aussi bien d\u00e9finie en Python.\u2028 <\/span><\/td><\/table><\/p>\n<p>Divers transtypages r\u00e9agissent de fa\u00e7ons diff\u00e9rentes:<\/p>\n<ul>\n<li>la conversion d\u2019un float \u00e0 un int faire perdre l\u2019information apr\u00e8s la virgule d\u00e9cimale, ex. <code>int(1.234)<\/code> donne <code>1<\/code> et <code>int(-34.7)<\/code> donne <code>-34<\/code><\/li>\n<li>la conversion d\u2019un str \u00e0 un int cause une erreur si la cha\u00eene n\u2019est pas format\u00e9 exactement comme un chiffre entier ex. <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%20%3D%20int%28%221.234%22%29\" target=\"_blank\">int(\"1.234\") cause une erreur<\/a>.<\/li>\n<li>la conversion d\u2019un str \u00e0 un float cause une erreur si la cha\u00eene n\u2019est pas un chiffre, ex. <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%20%3D%20float%28%22sandwich%22%29\" target=\"_blank\">float(\"sandwich\") cause une erreur<\/a>.<\/li>\n<\/ul>\n<p>Une utilit\u00e9 fr\u00e9quente\u00a0des transtypages, que nous allons voir, est de convertir une\u00a0donn\u00e9e obtenue d\u2019un utilisateur, qui est toujours sous le format de cha\u00eene, \u00e0 une forme num\u00e9rique. Voici une illustration rapide :<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform4\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox4'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Exemple de transtypage.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\ninputStr = \"12\"                          # entree d'utilisateur\nprint(\"Le type d'entr\u00e9e est\", type(inputStr))\nx = int(inputStr)\nprint(x, \"est de type\", type(x), \"et son carr\u00e9 est\", x*x)\nprint(inputStr * inputStr)               # cause une erreur<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/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,'N')\" ><\/td>\n<\/tr><\/table><\/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=\"c8628c53ad22dd98a43baeca69117e7a\"\/>\n<div id='pbresults4' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit4\").value = \"Run program\";document.getElementById(\"inputInUse4\").value = \"N\";<\/script>\n<\/p>\n<p>Voici un autre exercice pour compl\u00e9ter notre le\u00e7on.<\/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>  Parce qu\u2019il y a maintenant pluieurs commandes d\u2019\u00e9diteur, certaines commandes ont \u00e9t\u00e9 d\u00e9plac\u00e9es dans le menu intitul\u00e9e <strong>Plus d\u2019actions<\/strong>.  <\/span><\/td><\/table><\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform5\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox5'>\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'>D\u00e9licieux transtypage<\/span><\/div>\u00c9crivez un programme qui va vous aider \u00e0 nourrir vos amis \u00e0 une f\u00eate en faisant des maths au sujet de pizzas carr\u00e9es. Supposons que le correcteur\u00a0d\u00e9finisse pour vous une cha\u00eene de caract\u00e8res\u00a0<code>inputStr<\/code>\u00a0qui est une cha\u00eene de caract\u00e8res d\u00e9cimale donnant la longueur <em>L<\/em> d\u2019un c\u00f4t\u00e9 de la pizza, en cm. L\u2019aire de la pizza devrait \u00eatre calcul\u00e9e avec la formule <em>A=L*L. <\/em>En faisant l'hypoth\u00e8se\u00a0que chaque personne a besoin de manger 100 cm<sup>2<\/sup>\u00a0de pizza, calculez le nombre de personnes qui peuvent \u00eatre nourries, arrondi au nombre entier le plus proche. <a class=\"hintlink\"  id=\"hintlink6\">Indice<\/a><br \/>\n<br\/><br \/>\n<em>Exemple: <\/em>si <code>inputStr<\/code> est <code>\"17.5\"<\/code>, l\u2019aire va \u00eatre de 306.25 cm<sup>2<\/sup>, alors <code>3<\/code> sera le r\u00e9sultat correct.<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='usercode5' id='usercode5'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\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,'Y')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(5,'4.pizza')\" ><\/td>\n<\/tr><\/table><select id='pbSelect5' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='help' data-pbonclick=\"helpClick(5);\" >Help<\/option>\n<\/select><\/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=\"ffa5ae9f9793f10e4564e19e10e6b2ca\"\/>\n<div id='pbresults5' class='pbresults avoidline'><\/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>Une fois que vous avez compl\u00e9t\u00e9 cette activit\u00e9, vous pouvez avancer \u00e0 la procha\u00eene.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c0 partir de cette le\u00e7on, les exemples et les boites de donn\u00e9es aurons des b0uttons \u00e9tiquet\u00e9s Ouvrir en console et Visualiser. Utilisez ces boutons pour aider \u00e0 r\u00e9soudre les erreurs et \u00e0 explorer le code. Dans le Programme Bonjour, monde &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/4-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-4643","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4643","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=4643"}],"version-history":[{"count":43,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4643\/revisions"}],"predecessor-version":[{"id":10896,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4643\/revisions\/10896"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=4643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}