From 1286c75a00797412408f62ae41be141710e24725 Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Sun, 5 Apr 2020 12:12:39 +0200 Subject: [PATCH] Encore une passe de relecture Ajout aussi d'une explication sur les concepts d'"instruction" et d"expression". --- .../01-introduction/01-introduction.rst | 9 +- .../01-bases-ligne-de-commandes.rst | 29 ++++- .../source/02-premiers-pas/03-code-source.rst | 2 - .../02-premiers-pas/04-maths-simples.rst | 14 --- .../03-variables-et-types/01-variables.rst | 103 ++++++++++++++++-- .../02-chaînes-de-caractères.rst | 2 +- .../source/03-variables-et-types/03-types.rst | 15 +-- .../03-variables-et-types/04-booléens.rst | 24 ++-- cours/source/img/terminal-cd.png | Bin 0 -> 6221 bytes cours/source/img/terminal-ls.png | Bin 0 -> 9793 bytes cours/source/img/terminal.png | Bin 0 -> 3923 bytes cours/source/index.rst | 1 - 12 files changed, 135 insertions(+), 64 deletions(-) create mode 100644 cours/source/img/terminal-cd.png create mode 100644 cours/source/img/terminal-ls.png create mode 100644 cours/source/img/terminal.png diff --git a/cours/source/01-introduction/01-introduction.rst b/cours/source/01-introduction/01-introduction.rst index 68255c6..35f709c 100644 --- a/cours/source/01-introduction/01-introduction.rst +++ b/cours/source/01-introduction/01-introduction.rst @@ -6,13 +6,12 @@ Apprendre la programmation en partant de rien, en utilisant Python et la ligne d Pourquoi Python? ---------------- -* Excellent langage pour débuter +* Excellent langage pour débuter - il a d'ailleurs été créé avec cet objectif en tête * Mon langage préféré -* Vraiment cross-platform (sauf pour le mobile) +* Facile à installer quelque soit le système d'exploitation (Linux, macOS, Windows) Pourquoi la ligne de commande? ------------------------------ -Interface universelle - -La plus simple à utiliser (en Python en tout cas) +C'est un interface universelle. Pour faire des programmes en lignes de commande, +on n'a juste besoin de manipuler du *texte*, et c'est le plus simple au début. diff --git a/cours/source/02-premiers-pas/01-bases-ligne-de-commandes.rst b/cours/source/02-premiers-pas/01-bases-ligne-de-commandes.rst index fdd5329..a120257 100644 --- a/cours/source/02-premiers-pas/01-bases-ligne-de-commandes.rst +++ b/cours/source/02-premiers-pas/01-bases-ligne-de-commandes.rst @@ -13,11 +13,30 @@ Pourquoi la ligne de commande? Les bases ---------- -On tape un commande, on appuie sur entrée, l'ordinateur interprète ce qui a été tapé et affiche un message: +Les lignes de commandes sont à taper dans un *terminal*. -* `cd chemin/vers/fichier` -* `ls` (ou `dir` sous Windows) -* `pwd` +* Sur linux, vous en avez probablement un insallé par défaut. +* Sur macOS, il se trouve dans `Applications/Utilitaires` +* Sum Windows, il se lance en tapant ``cmd.exe`` -* Le premier mot est une *commande*, les autres mots sont des *arguments* +Dans tous les cas, cela ressemble à ceci: +.. image:: /img/terminal.png + +Notez le petit bout de texte avant le curseur : on appelle ça +une *invite* de commande (``prompt`` en anglais). + +Pour lancer une commande, on tape son nom, suivi parfois d'un certain +nombre de mots séparés par des espaces, puis on appuie sur entrée. + +Par exemple, on peut utiliser ``ls`` (ou ``dir``) sous Windows pour lister +le contenu du répertoire courant: + +.. image:: /img/terminal-ls.png + +Et on peut utiliser ``cd`` suivi du nom d'un répertoire pour changer de répertoire +courrant: + +.. image:: /img/terminal-cd.png + +Notez que l'invite de commande a changé. diff --git a/cours/source/02-premiers-pas/03-code-source.rst b/cours/source/02-premiers-pas/03-code-source.rst index c8bff9c..eddc7f5 100644 --- a/cours/source/02-premiers-pas/03-code-source.rst +++ b/cours/source/02-premiers-pas/03-code-source.rst @@ -59,8 +59,6 @@ Revenons sur ce qu'il s'est passé : nous avions le mot `print` avec des parenth et quelque chose à l'intérieur des parenthèses, et ceci a provoqué l'affichage du contenu des parenthèses dans le terminal. -C'est *la* principale façon d'intéragir avec du code Python : on peut demander -à l'interpréteur d'afficher n'importe quel valeur. Commentaires ------------ diff --git a/cours/source/02-premiers-pas/04-maths-simples.rst b/cours/source/02-premiers-pas/04-maths-simples.rst index 1ffadc5..b03ec68 100644 --- a/cours/source/02-premiers-pas/04-maths-simples.rst +++ b/cours/source/02-premiers-pas/04-maths-simples.rst @@ -75,17 +75,3 @@ et on peut utiliser des parenthèses pour grouper les opérations:: print((1 + 2) * 3) # affiche: 9 -Combiner opération et assignation ----------------------------------- - -La notation ``+=`` permet de combiner addition et assignation:: - - x = 3 - x = x + 1 - print(x) - # affiche :: 4 - - x = 3 - x += 1 - print(x) - # affiche :: 4 diff --git a/cours/source/03-variables-et-types/01-variables.rst b/cours/source/03-variables-et-types/01-variables.rst index babee96..d0ec64e 100644 --- a/cours/source/03-variables-et-types/01-variables.rst +++ b/cours/source/03-variables-et-types/01-variables.rst @@ -1,22 +1,86 @@ Variables ========= +Expressions +----------- + +Un peu de vocabulaire avant de continuer. + +Quand on écrit ``1 + 2`` en Python, on a ce qu'on +appelle une *expression* - + +Un expression est toujours *évaluée* pour retourner une +*valeur* (ici 3) + +Quand on écrit ``print(1 + 2)`` on a une *instruction*. + +Un instruction ne renvoie pas de valeur, mais a un +effet sur le programme, ici l'affichage de la valeur +de l'expression évaluée dans le terminal. + +Enfin, l'expression ``1 + 2`` est constituée de trois +éléments: + +* Le *litéral* 1 +* L'*opérateur* ``+`` +* Le *litéral* 2 + +Pour évaluer une expression, Python remplace les litéraux +par leur valeur, puis calcule la valeur finale en +utilisant les opérateurs. + +Variables et valeurs +-------------------- + On peut associer des *variables* à des *valeurs* en les plaçant -de part et d'autre du signe `=`: on appelle cette opération -une *assignation*. +de part et d'autre du signe ``=`` : on appelle cette opération +une *assignation*:: -Ensuite, on peut utiliser la variable à la place de sa valeur: -à chaque fois que l'interpréteur essaye d'exécuter du code, -il commence par remplacer les variables par leurs valeurs:: a = 2 + +Notez qu'une assignation *n'est pas* une expression, c'est une +*instruction*. + +On dit aussi que ``a`` est une *référence* vers la valeur ``2``. + +Si plus tard dans le code, on utilise le nom de la variable, +tout se passera comme si nom de la variable avait été +remplacé par sa valeur:: + + a = 2 + print(a) + # affiche: 2 + +Variables et expressions +------------------------- + +En fait, on peut assigner une variable à n'importe quelle +*expression*, et pas simplement des littéraux:: + + a = 1 + 2 print(a) - # affiche: 2 + # affiche: 3 + + +Variables et expressions contenant d'autres variables +------------------------------------------------------ + +Les expressions peuvent également contenir des variables. + +Quand Python évalue une expression qui contient des noms de variables, +il remplace celles-ci par leur valeur:: + + x = 1 + y = 2 + z = x + y + print(z) + # affiche: 3 - b = 3 - print(a + b) - # affiche: 5 +Ici on a créé ``z`` en *évaluant* l'expression ``x+y``. +Changer la valeur d'une variable +--------------------------------- On peut aussi *changer* la valeur d'une variable en l'assignant à une nouvelle valeur:: @@ -24,12 +88,27 @@ On peut aussi *changer* la valeur d'une variable en l'assignant a = 2 print(a) - # affiche: 2 - a = 3 print(a) - # affiche: 3 + # affiche: 2, puis 3 + +Combiner opération et assignation +---------------------------------- + +La notation ``+=`` permet de combiner addition et assignation:: + + x = 3 + x = x + 1 + print(x) + # affiche :: 4 + + x = 3 + x += 1 + print(x) + # affiche :: 4 + +Cela fonctionne aussi pour ``-=``, ``/=`` etc. Nom des variables ----------------- diff --git a/cours/source/03-variables-et-types/02-chaînes-de-caractères.rst b/cours/source/03-variables-et-types/02-chaînes-de-caractères.rst index 4e5b1e2..2b70028 100644 --- a/cours/source/03-variables-et-types/02-chaînes-de-caractères.rst +++ b/cours/source/03-variables-et-types/02-chaînes-de-caractères.rst @@ -47,7 +47,7 @@ Concaténation ------------- On peut construire de longues chaînes de caractères en -en concaténatant de plus petites:: +en concaténatant de plus petites, avec l'opérateur ``+``:: name = "John" message = "Bonjour " + name + " !" diff --git a/cours/source/03-variables-et-types/03-types.rst b/cours/source/03-variables-et-types/03-types.rst index b20d546..6f0fd54 100644 --- a/cours/source/03-variables-et-types/03-types.rst +++ b/cours/source/03-variables-et-types/03-types.rst @@ -7,13 +7,13 @@ d'un côté et un entier de l'autre:: a = 42 b = 4 - a + b # ok + c = a + b # ok salutation = "bonjour, " prénom = "Bob" salutation + prénom # ok - message = "La réponse est " + a + résultat = a + prénom # affiche: # TypeError: can only concatenate str (not "int") to str @@ -32,14 +32,11 @@ Entier vers string ++++++++++++++++++ On peut convertir un entier en string en utilisant le mot ``str`` et des parenthèses -autour de la variable ou de la valeur:: +autour de l'expression:: - message = "La réponse est: " + str(42) - print(message) - # affiche: La réponse est 42 - - réponse = 42 - message = "La réponse est: " + str(42) + x = 40 + y = 2 + message = "La réponse est: " + str(x + y) print(message) # affiche: La réponse est 42 diff --git a/cours/source/03-variables-et-types/04-booléens.rst b/cours/source/03-variables-et-types/04-booléens.rst index 019785b..16c2e69 100644 --- a/cours/source/03-variables-et-types/04-booléens.rst +++ b/cours/source/03-variables-et-types/04-booléens.rst @@ -1,25 +1,19 @@ -Booléens et conditions -====================== +Booléens +======== -En Python, les variables ``True`` et ``False`` sont toujours définies -et servent à représenter une valeur vraie ou fausse. +On appelle *booléenne* une valeur qui peut être soit vraie, soit fausse. -(Notez qu'elles commencent par une majuscule) +En Python, les littéraux ``True`` et ``False`` représentent respectivement les valeurs +vraies et fausses. -Assignation ------------ - -On peut assigner des variables à True ou False:: - - - la_terre_est_plate = False - python_c_est_genial = True +(Notez qu'ils commencent par une majuscule) Comparaisons ------------ -Certaines opérations renvoient des booléens: +Certaines expressions renvoient des booléens, c'est à dire +soit la valeur ``True``, soit la valeur ``False`` +------+-----------------------------+ |``=`` | égal | @@ -35,7 +29,7 @@ Certaines opérations renvoient des booléens: |``<=``| inférieur | +------+-----------------------------+ -Par example:: +Par exemple:: a = 2 b = 3 diff --git a/cours/source/img/terminal-cd.png b/cours/source/img/terminal-cd.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a13f228791ff6e7ff43659913535c2c70f2948 GIT binary patch literal 6221 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 TN)Z11KNt!!s?ueWW`X|$_m1Z; literal 0 HcmV?d00001 diff --git a/cours/source/img/terminal-ls.png b/cours/source/img/terminal-ls.png new file mode 100644 index 0000000000000000000000000000000000000000..6da5fd953508208aa90c3ad933eaf2d42e973a4c GIT binary patch literal 9793 zcmcJUbyQU0*YA&lQqlqnNFxnO*U&wbAYIZTodYwJgovbccZhVC1Bx_K(p@tk(%o>6 zzxTdt-TTK~cdfhDJu`Er&YZJnfA`+cem+mQrn(|NE+sAi0QkyEa#{dz-vWHCihUp4 zOXI690suAw{#xHd%N$1M;^u5)=U`3e;p1XWXYFlg0|4H$<;nJLj3NXfcSnyAnD>3( z_t2kzOrhF7II~ptnp=Rh^1UprdCjXMACwx7$-W(M=i1TkU7~>3%wLL}?BzI{_uTJV z-I~bO2*0@SHPy*)Q*4h46JHWylMQ!=-^_JyaRwh8u6>9R=xmR{Lfqw@W+_Rq_?vE4 z__kM8O7m7!y7ujbU;2m5m;2#QERhbLg=(U4%ECqalG?+CU`DfQ|XWYy#^peSK8NDK$K75H!AsSn}(a=BYP0`l4 z@rRmRF+;O$HFD@>VMIqiPMmdLEaR1kMrufkr~O))r~t$=Da|W$^DtqLUeV~U9dmG5 ziC95rm47$GaLbK>^QY=V5^f!H-jyUtNJqfc!5;NWM!Ew7h3c1NiXU)KwI|8VSA9Ac z+LS^)sDXnbNq=H;toFk1&s}X&q#MXkX<*uS5t3B2#c*gHjF_EXU_hJ!~n0aD+xv2P_fe6L% zSWRy3E3Ll51Vh7WP54uR31et^{e-<+eqoZ4U46Yxd82t>4O!{rud=y6v!pco@SSp_ zJ-)16;Sxs3dxxXjlci|y5H zIn8-3t>x6mt4pBA$D%X+yIJg=bpu3hAKD+YfdhWyvD9GB=YWLR1yNLw99K64_ z!yA}$;zq9KHaRel=Jc9>5+s%i1&#igiCkX46F8=2=dj+GAFwa$$i9&RXy#l)Mc*3%1eUh1g!X728Vd|Gv zgGAMDq<$JJ5G`hL#UR9Uc%hEboG8J1jo zHYBh^^Qiz=L11%ax9~Y%c15A0GNx{RwK)&;v}{xLbWz;|-h@nC?0<74a`{NDKLf(u zUNQahcfLbjg&mz9zbCb4zl443?w=DmsX1s)z%ZMg-Z0e|lEALE&!LwsyH(h2Q!Zid zEz)Mn)N*gY!hj0f!6>-cDjRGIS z2dHhkb}Z|CE6gSh)>2AO=;Szb>untC$(O7zXgIgyUFl_@MqNiFCSryM;w{X3a#Uxm z#eHu5CQapXhu&U}mgsFF&9f}%N0@59W@AZx7v`1XuF1`I92UtyAY;{dM)ptqk?tqV zTe2#5%LTs*gAK7%2VwF&>hfBt*d|!^+lIaVCn>trV$>n=L-<7n+uwBzk6Ik*%Phve ze2Nm8j{K-fry5k<52-}JKW`190!3=G2L(tcl}K1_zp+jk_|#eaC{ zLgsBuiu?YF;Ip1-kq--^1)Uuqnw^BlYdH>6+>A>|T96ZbvkBTK!h=7jt;-Tw!u8Hn znPju6B1IqI$V#8vGbEZ?-S?CrOA^@7?bBY_?QL-UiR&bC8vD7@)6fJ1D~%-f<0wV^ zBe_5&PNBNzH^K@S*vjMGymNE(fVaj@LjANFPomwGU9c#L!;W8kts9F?OI?CM2&&FV z8!3J7=x~ogCo~FT6T-VLP*W@R@D(yz^GMpE0u>dd_P6_)@-y<9peYdsB}ZW+k1qYH z(Pj#hrr2-2l6tqe7g810qv^(f@hubZn&P2NMB^sbtI1Z1)#-J99rrRv-O`z1->50d z3k>i}f`J#4K^XHP9H9dlTcR|jm&Q|qWbUTTuVM4GVjT*zF2S^61SR)fo)x@t z)NgIIE1>SHBR?#=T7U4!vbk)v>FG@DhoaDG+H2Zvl`pzg>K?1rP?MKxZzPY&tjgjI zz59DTBK+;|xl;W4vg9Uvl;x~Pmm(m~s9AsN>&(FDy=wjYipT%Gyon`q#dboin@+Hu zWe~Bm?B^{8306Oj@o0hfl#t>s){V@sV$cr4m`xb$2oVip5JrBD#%k1|e${))WicmVWY=E0 zOnW};y5A%05wX<7)Usrt{qdBsOXgU@BIZNP-#qAhq5Pj^-<_sntDJ>!oin@%$fdSm zw97V~N&vZ%QBlGXzm`P-I*<8RLh81|{a_|-v5Xas*VBK*n;t#(ti(^=zCveb1*Cp? zb}8?`aE+zkW{fq}mFfck_d@MtWi^#$W&gVk0h^Buzt0e*pHkFaW@AZTUsIRSt;Xhl z3V!g4Sg~A&m_5NTR|hK|DjD(|U-?r+{<5LVzGd~_<<+v%;8Hql|3G08QMMMP@H;3j zmxZ|SZci&BrWF>b$-_7CDDvJ{o2Q#{#=q8eJ4ZO~W9O0jJ^7qcGF+sk>>XW+I6sF| ztQjnB+)^*7ELsI>FlCvym=jl$YB(B-ZuqTYb135;h#Y*8reN|%wQL_!ZRGvDKOFfa z^_bcPu&Q=PUUMR7AJ!3buz2 zEue~Wz}>%F4zf5N`~=5E$-o@|@JRnX?g42TPrwhcJe1Ysu~3)~a44uS-j4AB09Avs zob+q&*_{O+V{N@QV1LOZE|!iph&WcwwNNXWd>xhpDWV^LH>?Ck7Sl9=p??=B9}V?}D(C9gk!{@m)dGusN|DSAL3a=GJB zlX-l6j6zv$g|7=O`7$~TSk(yFPZ~G5tQ?{TQd3hW`JQ~rOX4!}y1l+wU0rpYYbcp` zXa9;y$jP|=-9+nNo6+mnuZ@kVsi?Mgb}}fI%bh)i`ggz7Vl2cT~tAx3_ zig@q8F)%QI!&~YzoDykiXl{2Jmu#%8P-t{lcXyT;%;{`*fnN<;H_+8(y)l$&ZEbB9 za8uvd*jVpU-DKfYmCOuHIzK=El_@5~#pMW|9FA)=pUQlhM`zS!uTtyOZ3ir1K|FhPLYpKMJ{jgMpV3=Iqn3=KUD z^xT^CyS>;@S65fauQo!5g@u7%8-x1)E`+|Tzq~xzN=!_op`o#e(qeu5>eVY{Wo7h# zHezDp4xB={R)=-zNW*edB-~R|Q`6cS9sNv9JyTS`=g>+|ZwmBNbt7tHgN2D{Uz{fc z^Gv_-Z#a?6ALZmeM#bpP?rs}v>r62iw~&yKq$DjM4uR;fPb8c9&o~7&a9c7nGdpIx zxx0^Tovii5Ol^9Au?AFu;nmx#v@+A*ud?+}IW8+J>pzxb1om0o2Wn>=7F=9hi0l)> z!m!lFCdKkWB|CW8M!C~{i1J6@;^N^oIxUErcZ9$eeQXDkxI{CZegr)raaM*x`O*g~ zk*BlM)t1Gosc~s(@PpMZnq#N`Sp21QfNA(>(lLmxYz{Qb+}xZp>N!6@KLm0E#whuu z2!M@))9iQEF!-BB!gspD<%2nP5Ygm|t*?{ZbwpE_OBKn^+O5B5>+t~nBr-uxa_C%- zV|QY&tRfa6&0}01c6JpF4HyhoSz5X#te)4vIj}q5%m=!Ko<6svgpG@fi=V%aW6(Da z&JaTMxAzp;S5)*oQH9w70f#sEeXXv3$;ZdX%#4oUX&ZUV59Ca3MJZT6jVws?Y4 zm)6yJobRu^fBzmgltDsb@pAjitNalBfPjD`Yfn)V*g*1|S`$xC&qqJ?oue<$&#|d~ zyNaz#TMXK_mXB=~O!az^Eq?Q<1-I<%>|+ita=f1}a6|KYPUNuZ$0w{0`x7}RqZCSB z6FlX$I^CX`>{(k~wHeCT+}U|XL_|bQ&1w9_%E0UDbO$VFF&{tf9~_Ln66! zsYygbR}C~>~Lzw#4I+va8iZ$WW!U$E5WE5`V5l{ZGyN;6CNJ^SpMSj(vas)rL#U2OU$sr!9ZVsI!8L#igyOgsI;`S3bS_Z8}jJ23RC3e z)zY2+pOIV)EQ0NH(2pZLSvwIGh|_HxT-?i*FxszQzedwQL@m1?tsEpJCCNvSUtC-~ zee?mWl?8=`I57d&2R)DF3yX>fXvFo4$IvL0Qpok+(n>csx8Gx9c(}Ntx7IiBF|bHT zNqeHG^fWd1Z?E>wa(rIK6o6C@p5ciECW+tX%>3=mWRrA#=;wMk0lZlJfGvT10Q&OI= zu&^Ympm%p~IX5Kf=)SKfPh4DG6&DmNpUYwA`pex125PR(_LgdGHL~R)uB&oxZikUi z`P8$-Q$ZzDQqF&QeYef_OZxnI^z^onY@o)ZJp#)z>^0ob_(;!;% zph`)yrRP4SfOj7`XVd<6Q|)KSgwXgu?l+1Q=FB2KRCa&75ezGZcFhiuQ!k@w_08I?t+52$>>GV9^5gw|@OP z;Kl6N9s89@Kz(C-xA~m)uYQkr`4_8g{`2jZZA)bB2CR3Dok^snT*-v@0v)c~#Z<2% zE;^jXHe>un6yJU~^wuWb6x1SaNTB{R6L%HR9-DNdHFq+OdOu-e;hBuOOFB>Bi7&^( z=Osg5i0@~-;E@bpuUy*h`gBNbq^%^}@`~ntzrmgT^a)l)brH|%DaFC*tUdLq)}rtl z zMennf$&$n6DYUfvO!|WaSnTGup#1)p?-69}eW>pMM)fxwib6HphTdSajVPE=blDqc zliV8_xuY?IECeGV2D#tB;)l^dhEm zEv#S7hbqL4wX%;uTaO51{@2BwcNw+V`pOTkS)r5-;a%xxo7?7)^v&sZ5?8V`A#}V^ zK=gQ%vxE`sVl>*y{`&Y!UgW`d20&BcCW?ks+DBuZ(!PaE&%!voVM-aY9HTfhXYFv} zGZQj}J)4UjSAZV;pc%%{m^Q73H)OqdFqn9E+3vH31S4lAouWY9176#nV!!las?83< z@|ZmfXhGG-Ei|Ej?Er{ zLR89)#4!R|n`Id{upqCuBG)VpyS!k|x!Fk?U1kCWz#3yD9F^P2(eg^|7d1FYD=~&fg{@XG{}%U}E|^e7XH%R4{!=c*t&RdB ztwaLK`taDB#{2M8MNL22=`g3+*OE)bC56|m{`h)?@MZ$;YbWMxaijp-fTUl29{2s7 ze$$(dZ;VWGqrzc&fT>LIv}*zRLrCb;x|u})MQL%b@9&7UsvCK|tyc?v5Hx;BKF6kL z5DiVo>ukp%{rkWtwgD7R=a_%H&DS;-tgHJyDR^Vea4rD2ncjOPEO)~r;-c?bCD#M6)sEwtKAA7y`ckH)!rd#CAEMSCVi2uKli%MP3u z&4HH#GrJ$bi^yMAHa!1gV&S@{I}p5akEm$x)`@!_13n7nSQ`LsxO7m36OCX*}Eh4gew&D{F0cVcUU# zk^pc}qpuE?g^55qI$RQSBY5HQozsH6dU$WyqYLVKJfgcS_cuZ=L8c|5&&^ zJxsw~Dkk~Cg6sQBar=8o_kf@zC~B}p^WN~mx{b_Y-_FZT@iSc-%CFeXj3Oi2!fQ;K z5N!1K$%CoPODM{KoQUmiB7m4+$T7M+BLteGI{08&WOqoQ?SdxPqZ&cel+Er9<&*wB zzf&_*S?tN@1iJOyP+m*o$G5`Nat?uwy@a+`w!=-p{K8*F=BgyHIw7Y_f#vi)JlMS% zs*8jxcSt(zc6uX0D0C3x*+$f4Pb=Tv%zVtUbmNv~rN5PDR}D^k{)cEXN@l+w3Jw7j zp#=`6#JkcLStYw zadJvur7aF3IY)oZwU!)^Ao14mEWkWNKZbkGSv*y7CoX!f?*VPz7!oP)s^QQEf22zk zy3w3`_5T}>tOUd7CFZ1W_b37_XIiu@0@FtzMSMmfi5VUT#1#Uh1VgIw+}fX^y|1JDdhGTn zXw!|=Z=Ru|YpTcoyd>@zbOe^4@&QB%+oRI9lOaVyj}u2>Nj@osXM_gMKkk9uRayNeG1P`+GhOeQtal2*4D+(|+u zCiSxZqJ!={Xz3;n^%(!qQVz7p2O5x&I0QGu=Wz`JQo=2sv+W7+N5G2-+rbO5dr}AK zsL3hGrUyU){4qcjT@jLR|L^BWjjxK0<=+Nxcbtqz55@+VR%fa8PAP}IXtSSTCF(

47|J0rNlT4NieY#`!MiuxjFnK?4`$7)~ z%QmY%McuD=VTw;Ot3WYS?D_VCEaru4@UUGc0qiMS{fNT}wdcZHnw9W{Mg5v+qW)8On}QtVuD81&*O1!H4e!eR?yur&t5{nBW=U9 zA7jZk+l}x=A}v;QVpIfbP+>(T_V^V$(EI%6y(Yox)A$SHw6}L8On`EOAoVs zF|92vB5A-3gE?L;!}7+(1v+HLWvz(wZ^%e46fZ`5|IH_Pbg~{~(wSpE@8@?kO7`Z8 z#6V9y$Dtm|#EsZeIa+CKzGUy`i>3Z!$0j)n_xFX9!uFo;(Du*w?y0C&e^bWiF}m2~ z|4%m|&0!^bE{4Cmds1QS{4)FQ@soH^e{}pB_61OV*!-ikbS8%v7Qz?(#RkJW+{l|Kja7tn4+F}kNG$16}|FGc-?|)Ci zdi}9gf3&xBbjYN~w4bj=q)>xIu}PKO%Wvo3+?$ID01?&O`q`VSt2S z&lHfBDJUqI2^y46ysJ0-^zIHq+1AzuP3G=;`H4v8=9}t$DUfP`ljKWY7Y~o)m7ify z6%`QPkP{Oh{PL3W^}Q}LsFiCC>m1gn577+ByJCK)rKJTP2~PE)P$-LfMw8uG5y<$! z%fAW0e$74s!oXs+^dhYi21Z60IG2U(nX2N+V4uv*Scz?JZua%{O_B~ex7pnU>87eS z*bJuOQE(f#`HFz#f{sqgJ0tIl^*~alWI$U}llNSMi?8f&PAQLSBycD81g_-*;}m z5oBa!-V}xD8&``@55zG;eSLk` zhceTXk{VoAWRRvYjAZm7S$Wo4s>a5~N=m)oe2$7VvTrwwvkje#xs03k(aC0}-@IK_ zRaLdM$HHj+r%z2lR%TOckUuIXFAoC5uFg(sQI9XVxgdGM!6KmU?eEtroiH^u?T8>H zApvPC*|TR{$phNj+6YYvz}wsV+u0%lj`RnK>cPPQ$jUPK?c(HGb<6Zu{{9sOnZ?dr zV^0_4@>Kr+KoGRY%vj$r%~PiA-1O4+U}tAV3?Im{N0+W)YH|4dwYKrP|4K<9RZTF#N>aQ zqMRHyO9IJGO)A#QclGd-zZ25Z(jaIQ^V$~n{5y{7i#IVbsjZP~&tjL9l%%JBzu~jO z^n^ZSq`jNh2i5y|dV0F7tPDgW==JsWjSY;z;^JbJ!pp+}o;j{Blh$P*R^QQfa&iJa zczu2#n#s+_M+!7J&XGTzxx~K#FEoiC#{_{uKuFfuj|If{VFEU_Gc7C2%XE{hgoK1? zMddIB4tDksYppyJ!6Q0_{L#ncMG>s(KNnKuSrOmX&pTI_HeHMGb(2 zXTHtxN-_EWiVYi1raHL(AGsk|DXh#I_S6Ig1WI1Bo6n7n)$V9VMMZ%?6`pdx}ra<_gxleg$`?O?ep=k11Dv-eCt*#m3gw7F3bC4CL8$obh@U#vuDs zDRk?Nr3X=Xg9Hr)g^>HYDwx)Rfq~1*Z&qZO2WsXToz2>OedOdqVq#(x@@HzSBjkF6 zf`azoeT~RcGRw{tnk?mQA6OzM$Smj>vLBSqb(dVPdg;{ zS@jPMsjI3Mu=Y<)O~Ehp7%B$Er$=k72Rb@B9^z9n#rOSNPZ=NgxViNFXXN;qgPF$y z2+TA!M+haaHFb16kN=E5<+H(#X{@W`G_30#9v*)4B171ffs0Gc`+6-#vWS&kK)`c< z`3D$kEG&u)C_OX3#Q6C5tSnRTBnLcOgw(>ZDJjAr{R98Q*-}6|78*)qKb0n6FX%80 za$1+Q?x^kU?Sr)*Xb;&yFmilyvZ$Z{^fbrgPhj#fv#?M-diWpXB*6t6aAoI;cXhl( zdpHY1MM}DcLKSG0%r7itqpz_rF{iIMzJDepE z0blJ52P-J}k21u4ctL4izC1|X2^^NV;$&pZ-?@QuBw4rmQ;_~!yYdzU2O>Y*JNOMn ns}{(f|93L@|Lg5Z=^YlE-hqpPb|fRXs0S#^tIJi$yb1arkM%yy literal 0 HcmV?d00001 diff --git a/cours/source/img/terminal.png b/cours/source/img/terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..d9bed227c321214e239e66de73c1fb82ebfa6b5f GIT binary patch literal 3923 zcmc&#hc_GC`;SqpjZwrVud1SoqP15NjZs^zDy`S39eYGjqrMeN)u`Q4v5CegnyMF} zR*WWUt5Hg+HUzQ0dB5lU{)XRk&%NiK=iK|;=X{>$b3e~4&EY@}VGaNQ05mp&SpxtJ z&*^(O8zX%!rK+s}04yTWwhp1zk0QW`;6P7rKM!zd6v6}S5$Wv-07TBr+xut9U*kL> z%2L^kHkia%xnVznF(+mDnct3RR5{$N}JVJfgJK)_3gzkAC z9yNFV!4n(J-HKdSqynK$u4v%HVOfMVm|Bac7JO;&pavvM?p!%O+*s zRlIph12IUce+5@(A+&2lB?y3lwq4zZme>m$A_Ec;Yw$gdI8NP+gET5rE|tKhriap} z^+X;!mv$-4>FO;1;+l}K?ni##iB0HW>(yg)!0?BGx4a4YJ6>?$7u20^zc2+Se=*E3kFLZ=A zu;=8*MV&1IZUF-HF#E?=TCm)dQYyCAD1P>`ya=ZN3+-m!-;;b5=+cuuG3^gvhG6wX!^S)Q}!gRMKAO7nAbF3=Ao}#i};WGH}^yHNzCn z3G|n%@!6a~Kjrk5#&~`YHw=gj2?`52*!fo8rtqLM>=zy`(LMh9i7-f9N0P9lj2(-w ze{#fh<)v4la@fq?wAXM`rmktO!u^l5)LU7&tL~CFbdYzRn|VNGTm9x+Q3qm3(bXAm z_;YcsSlTlcT}LF2ma-y&y%R`2e6%@Au^=ls&FS48%i+ZrJ-G>DT!|IZhfvn)!Y_Xt znp>-5DVNFq_SPl9WWwVT-=H)ZS~_<+I;Z&CuKE0O;7P=Aj_Le)VmssJ*}$xY!_e$H zx#w#wha#rs4UO|4pFQ~l#@wMeAxr)K4Yra2$&{sDCU_}x5~ztCxd>C162W+nvABZ`58cEH|Y@zqS_J-F|-y3#H(R9+kGjCS0 z^j^}KEZ$J&?K5~j;9opGRkEFB#?Bm4_Lx6tF?PoDNknD!c-YiL=DMa90rPXk*X&SO zW2&j;4%8PiG2?jKXgz;7{%+{#0AoO{ppQNvt<0FC`^sB_A(M#OcqeRI*A8xEpc_7s zS_ms-yg|ZtFR|!ETQ`i{v(jS#$9#p=x<6(}fGX~qerL(KNF0ysH_Uc-`^85lQ_Go( zL5}|HcFHe;8p1fYBbqw4FNK0EB1NsYp z6}m+Q!tEl7=UFkxs6DMCmCDH}k5Xmb*#g!XQ@_U4ak@i}^=03T{dD@cR$8N0X&J7d zBC-cp_WfyQ{q~(1HZAxmM8EI#*w>MP0;R9}!@x&|+29(@)}Uj#*I+_oeJ4xn4el|8M_}Ya|l{vk4nng z;f>}lgEn9?utMBFW-*znxlCy;W~Jo=4+NO(WwC!IcQ6jnlChSDbq8??Stt7~C-X_J z__HmbhA{Z-KRM?NgBbUji+%y7blphyhC(fkq0s-63A#8Gp+%61q% zJ2&OH;ij#=)8C2A=!}TBR8%2dN@J+;6#4;k9{z6EJ9eFst&A5X_~KPH5o2u}`MeQ% zco;3P;<&JWCOU7j;2v)wRr09g5lp?dz}Bk_PeT|sZIYEcYixRHs9-&@Hhe1Q44ZwVC;*{!e3MA#FCKF z^^lTv?HKj-_dLviPZGq7HoF2Fo14MYUEY(@cR2wk;}wGsP8kms|6tAqFFoz8=COiOI>Wt*yAVOxFLIqkQfp28+d_j;W9G86#D0JcDHw6wt1Rp!=2y zggbbb^QG>@q@<)MB+y-XdbC(;-sP{rKzSQL>0*w$mezfFkc3uvU1g=$DQ$n9SSleT zbW`xsdnr}Ul$WKYU8v)5`X)Qu*3mKQloodP;!?w4zEi!O4Bs$tsvMrN(c0J;Xk}&P z<+Wa@7APz%EP3V1k5~{oCok{d&zfnmxxJIq;979Lr5CZ}hK!7Q%poEoqRqV0)YNo^ za>S8LKVIJ1iF9)-!{KlrJ~+#RCXZQ}nZJ-o`}_OVBp>O~y5)<>|MX`_OifL-wX{@J zRJ63Uxpsz+^!NAoyk}%&l#`RA(P%ph_@Q-5{?g8$j>44ocM-o9#>U3>_Cj+^ataH5 zn;ftX3>7}0x7OZ%etviE5T1)^H8{8b^TFlw$jE$0*j9-SQtI+El8;Wr&fIW0O!7s~ zH?Xm_)MX$LXe^bb6|oa@^yjLyG^VxHu6!KPK9`xv9qrZb?BeJs3qlLXJ6Jk694apJ zGV_Rv#;gwTp!>4&^JQOtwxd7tsE37XMKgNu@xzA?O-xK29rJDFJZST4VQO3<9wP;} zh$T9>X+Ikqn>*!A_4PnB|1LoN;!vJq+`-QLY+E3Ef>Pnga6R1I+}zVs`qZ^DA%U^j zyniiN4@HCh+C8GIFE6_#fC&V`UFnyQH&qP{R0^e&o^G{GWi%2=EYkQ}Ie(*gc4mg& zMr;Y{DB51Sh}y~N>2~<>ztBQnepXdd+NJILD&%QtYx}7RCnhG&15-yl(Xg_gKYyP6 z&ytduX@tR^_s*k6oJ`Ndb(9X3eFn=mUMdP z>go;`Dkpa9=gD!c1Z!~ZWJ*nwNMZDluU@@^rf}wDXTKWxUQ{H?l~QFZm(tVZJJrzQ zI~6eft^$kQCDqzHG{#%6`O$OsMn;{U7nVii=^;y`KEHpj-r|JXT{7q(b2IaZh#dc3 zf#;2Xj6L1tiwO>%7#c!1T)FEJWMa1Np?ek+lUG!xk&XtlrIu|FdV70^WAmbPhI=wL zH#awy=I7^qS~O*39*2g8`uGg?Ok4Bav$7hWnUTvIs<*2(sYpemkMkcf4mU>Jv#ZVN z`8MV+o}m^p`Sq&<6q;yV{UM4XZJfny;2;m`oLAsxi&frA;gWzrAkop$c6AOsVqznn zI1gnZTo|e5Ug#A`$%HZ)+_d)Wq4;~zsf~?|)m16VJ9$;r?10G8;}z}5DlL^+Puz4! zaj@pMivkMrPR%mf+M-+hmNiBDRBD#gkM;F7zv*|`*?bsRxg6(`{DlAb=zl5(`RUjD1ru9lx8IlL2fes+4zqJ&PfW(WDjkErrCj^uw< zS6AscOQ<83zV)QsF7$8xt%J~L`2G7g27{@qlLw*sK_G&5YV^QXu=saN7Z;b9n3Lr` zGzx{H^P=8vYj;)S3WJu_p zDJ~a>iX^VC-Bpv+$7+Kkx znVH?YM^ZGMo0urGl)22yTdEy3F+TnxC+AjRV>cZt`Umgzk?3a0w@(Rd0RYY(zpqW` o694FOsAhkiu3!IO7T>