From 779024ea47a8347644a8ee6929a593d2545cc63a Mon Sep 17 00:00:00 2001 From: Florian Mathieu Date: Mon, 15 Nov 2021 16:41:55 +0100 Subject: [PATCH] ajout representation construits --- representation_base/.DS_Store | Bin 6148 -> 8196 bytes representation_base/DM.md | 126 --- .../chapitre_1/cours/README.md | 34 +- representation_construits/assets/bo_dico.png | Bin 0 -> 84720 bytes representation_construits/assets/bo_liste.png | Bin 0 -> 145099 bytes representation_construits/assets/bo_tuple.png | Bin 0 -> 33144 bytes .../README-checkpoint.ipynb | 682 +++++++++++++ .../chapitre_1/README.ipynb | 682 +++++++++++++ .../chapitre_1/README.md | 261 +++++ .../chapitre_1/TABLEAUX.md | 40 + .../chapitre_1/projet/README.md | 139 +++ .../chapitre_1/projet/assets/bomb.png | Bin 0 -> 21627 bytes .../chapitre_1/projet/assets/exemple_1.png | Bin 0 -> 12607 bytes .../chapitre_1/projet/assets/exemple_2.png | Bin 0 -> 13837 bytes .../projet/assets/utilisation_paint.png | Bin 0 -> 18894 bytes .../chapitre_1/projet/correction.py | 161 +++ .../chapitre_1/projet/paint.py | 44 + .../chapitre_1/td/TD.ipynb | 572 +++++++++++ .../chapitre_1/td/correction.ipynb | 940 ++++++++++++++++++ .../chapitre_1/tp/README.md | 108 ++ .../chapitre_1/tp/assets/belgique.png | Bin 0 -> 7685 bytes .../chapitre_1/tp/assets/benin.png | Bin 0 -> 7611 bytes .../chapitre_1/tp/assets/botswana.png | Bin 0 -> 7606 bytes .../chapitre_1/tp/assets/cote_ivoire.png | Bin 0 -> 7696 bytes .../chapitre_1/tp/assets/etats_unis.png | Bin 0 -> 7782 bytes .../chapitre_1/tp/assets/finlande.png | Bin 0 -> 7805 bytes .../chapitre_1/tp/assets/france.png | Bin 0 -> 3557 bytes .../chapitre_1/tp/assets/grece.png | Bin 0 -> 7719 bytes .../chapitre_1/tp/assets/guinee.png | Bin 0 -> 7693 bytes .../chapitre_1/tp/assets/hongrie.png | Bin 0 -> 7488 bytes .../chapitre_1/tp/assets/iran.png | Bin 0 -> 7598 bytes .../chapitre_1/tp/assets/irlande.png | Bin 0 -> 7685 bytes .../chapitre_1/tp/assets/jamaique.png | Bin 0 -> 8299 bytes .../chapitre_1/tp/assets/japon.png | Bin 0 -> 7814 bytes .../chapitre_1/tp/assets/mali.png | Bin 0 -> 7684 bytes .../chapitre_1/tp/assets/monaco.png | Bin 0 -> 7528 bytes .../chapitre_1/tp/assets/palaos.png | Bin 0 -> 8127 bytes .../chapitre_1/tp/assets/pays_bas.png | Bin 0 -> 7550 bytes .../chapitre_1/tp/assets/pologne.png | Bin 0 -> 7539 bytes .../chapitre_1/tp/assets/republique_congo.png | Bin 0 -> 7785 bytes .../chapitre_1/tp/assets/suede.png | Bin 0 -> 7730 bytes .../chapitre_1/tp/assets/suisse.png | Bin 0 -> 7745 bytes .../chapitre_1/tp/assets/trinidad.png | Bin 0 -> 7848 bytes .../tp/assets/utilisation_paint.png | Bin 0 -> 21109 bytes .../chapitre_1/tp/correction.py | 276 +++++ .../chapitre_1/tp/paint.py | 44 + .../README-checkpoint.ipynb | 478 +++++++++ .../chapitre_2/README.ipynb | 478 +++++++++ .../chapitre_2/README.md | 131 +++ .../chapitre_2/exercices/CORRECTION.md | 166 ++++ .../chapitre_2/exercices/CORRECTION_2.md | 80 ++ .../chapitre_2/exercices/README.md | 148 +++ .../chapitre_2/exercices/README_2.md | 58 ++ .../chapitre_2/td/TD.ipynb | 279 ++++++ .../chapitre_2/td/correction.ipynb | 394 ++++++++ .../README-checkpoint.ipynb | 396 ++++++++ .../chapitre_3/README.ipynb | 396 ++++++++ .../chapitre_3/README.md | 98 ++ 58 files changed, 7068 insertions(+), 143 deletions(-) delete mode 100644 representation_base/DM.md create mode 100644 representation_construits/assets/bo_dico.png create mode 100644 representation_construits/assets/bo_liste.png create mode 100644 representation_construits/assets/bo_tuple.png create mode 100644 representation_construits/chapitre_1/.ipynb_checkpoints/README-checkpoint.ipynb create mode 100644 representation_construits/chapitre_1/README.ipynb create mode 100644 representation_construits/chapitre_1/README.md create mode 100644 representation_construits/chapitre_1/TABLEAUX.md create mode 100644 representation_construits/chapitre_1/projet/README.md create mode 100644 representation_construits/chapitre_1/projet/assets/bomb.png create mode 100644 representation_construits/chapitre_1/projet/assets/exemple_1.png create mode 100644 representation_construits/chapitre_1/projet/assets/exemple_2.png create mode 100644 representation_construits/chapitre_1/projet/assets/utilisation_paint.png create mode 100644 representation_construits/chapitre_1/projet/correction.py create mode 100644 representation_construits/chapitre_1/projet/paint.py create mode 100644 representation_construits/chapitre_1/td/TD.ipynb create mode 100644 representation_construits/chapitre_1/td/correction.ipynb create mode 100644 representation_construits/chapitre_1/tp/README.md create mode 100644 representation_construits/chapitre_1/tp/assets/belgique.png create mode 100644 representation_construits/chapitre_1/tp/assets/benin.png create mode 100644 representation_construits/chapitre_1/tp/assets/botswana.png create mode 100644 representation_construits/chapitre_1/tp/assets/cote_ivoire.png create mode 100644 representation_construits/chapitre_1/tp/assets/etats_unis.png create mode 100644 representation_construits/chapitre_1/tp/assets/finlande.png create mode 100644 representation_construits/chapitre_1/tp/assets/france.png create mode 100644 representation_construits/chapitre_1/tp/assets/grece.png create mode 100644 representation_construits/chapitre_1/tp/assets/guinee.png create mode 100644 representation_construits/chapitre_1/tp/assets/hongrie.png create mode 100644 representation_construits/chapitre_1/tp/assets/iran.png create mode 100644 representation_construits/chapitre_1/tp/assets/irlande.png create mode 100644 representation_construits/chapitre_1/tp/assets/jamaique.png create mode 100644 representation_construits/chapitre_1/tp/assets/japon.png create mode 100644 representation_construits/chapitre_1/tp/assets/mali.png create mode 100644 representation_construits/chapitre_1/tp/assets/monaco.png create mode 100644 representation_construits/chapitre_1/tp/assets/palaos.png create mode 100644 representation_construits/chapitre_1/tp/assets/pays_bas.png create mode 100644 representation_construits/chapitre_1/tp/assets/pologne.png create mode 100644 representation_construits/chapitre_1/tp/assets/republique_congo.png create mode 100644 representation_construits/chapitre_1/tp/assets/suede.png create mode 100644 representation_construits/chapitre_1/tp/assets/suisse.png create mode 100644 representation_construits/chapitre_1/tp/assets/trinidad.png create mode 100644 representation_construits/chapitre_1/tp/assets/utilisation_paint.png create mode 100644 representation_construits/chapitre_1/tp/correction.py create mode 100644 representation_construits/chapitre_1/tp/paint.py create mode 100644 representation_construits/chapitre_2/.ipynb_checkpoints/README-checkpoint.ipynb create mode 100644 representation_construits/chapitre_2/README.ipynb create mode 100644 representation_construits/chapitre_2/README.md create mode 100644 representation_construits/chapitre_2/exercices/CORRECTION.md create mode 100644 representation_construits/chapitre_2/exercices/CORRECTION_2.md create mode 100644 representation_construits/chapitre_2/exercices/README.md create mode 100644 representation_construits/chapitre_2/exercices/README_2.md create mode 100644 representation_construits/chapitre_2/td/TD.ipynb create mode 100644 representation_construits/chapitre_2/td/correction.ipynb create mode 100644 representation_construits/chapitre_3/.ipynb_checkpoints/README-checkpoint.ipynb create mode 100644 representation_construits/chapitre_3/README.ipynb create mode 100644 representation_construits/chapitre_3/README.md diff --git a/representation_base/.DS_Store b/representation_base/.DS_Store index 7e29ea6bdc2faac2189ce95c5ad960fbfeac41f1..c58741511e5a58be9b4e41e2d29d115e70781288 100644 GIT binary patch delta 510 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20+o*S!d9wn?ALhmE92^rHSSE9`80fJv zBr+5OVJbrjLvd1haY0f}eiBf}j--N|%;FLQgKLaT%q*;I>>TVI+#HiHvItN9z~WNR z$-x;fAW>ayY-psTU}9ljtD{hDX=DIo8(Y@aa&m|&>strKXXoVR<#z#10|G`y2+hC? zrD0Szkb&Zgvf!e;ocz3Wpg2em7eg{b2GErS44FVT76Dxv&!A*Tv{U1#>{K-8OrFRp zDvBlscB0ATbu9fN*urOWAgie&RxQXr-)zB>!?<}VPbM>$1UE1kTtTt8S&-v9^JIPz V&&mEg92~&V0Yxyw=6Iet%mBR}W;Fl+ delta 258 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6x*nGmw7U`fWc-P;Y>zlkYq7KDnlYe z9z!yaj%P6P%*jtq%E?cHXkzT194{=-Xf)YDsGr%y)M&D!NSL8fS#VKaPJUiGPz@sx zqnlxjX2wsD8G*jV_T Yc{0C@C&*I_Ob`!({LHX9o@Wj-0Eve;Hvj+t diff --git a/representation_base/DM.md b/representation_base/DM.md deleted file mode 100644 index ff2e6d4..0000000 --- a/representation_base/DM.md +++ /dev/null @@ -1,126 +0,0 @@ -# Devoir maison 1ère NSI - - - -> Dans cette évaluation, vous allez être confrontés à des exercices de conversions, de représentations, ainsi que de manipulations python basiques. -> Prenez le temps de lire les consignes des exercices, et n'oubliez pas que sur papier, vous n'avez pas la possibilité de tester votre code. Soyez donc vigilant-e-s aux détails. -> -> Ce devoir est à rendre pour le vendredi 12 Novembre - ------------- - - - -## Première Partie : Numération - - - -### Exercice n°1 - -- Prendre sa date de naissance : additionner le jour, le mois, ainsi que l'année. On obtient alors un grand nombre en base 10. -- Représenter ce nombre en base 16 en expliquant la démarche. -- Représenter le jour de sa date de naissance en base 2. Détailler la méthode. - - - -### Exercice n°2 - -- Donner l'écriture en base 10 des nombres suivants en détaillant la démarche : - - 100111002 - - 010100112 - - 101001002 - - BEEF 16 - - 70E 16 - - - - - -### Exercice n°3 - -- Écrire les nombres suivants en base 16. Détaillez votre raisonnement : - - 11110101000010102 - - 1011(10) - - 688710 - -------------- - - - -## Deuxième Partie : Représentation des entiers relatifs & des nombres décimaux - - - -### Exercice n°1 - -Soit l'écriture de l'entier relatif **-3** sur 8 bits : 1000 00112 - -- S'agit-il de binaire signé ou non signé ? -- Représenter -5, -31, -64 et -125 avec cette méthode - -On peut également représenter -3(10) sous cette forme 1111 1101(2) - -- Comment s'appelle la méthode de représentation utilisée ici ? -- En appliquant la même méthode, représenter -5, -31, -64 et -125 en expliquant une fois votre méthode. - - - - - -### Exercice n°2 - - - - **Pour convertir un réel décimal vers la base 2, on applique la méthode suivante, par exemple le nombre 12,6875** : - -- On commence par convertir la partie entière : 12 10 = 1100 (10) -- Puis, avec la partie décimale, on procède à des multiplications par 2 successives. -- Après chaque multiplication, on reprte le résultat sans la partie entière. -- Le calcul se poursuit jusqu'à ce que le résultat soit 1 : - - 0,6875 * 2 = 1,375 - - 0, 375 * 2 = 0,75 - - 0,75 * 2 = 1,5 - - 0,5 * 2 = 1 -- Il ne nous reste plus qu'à noter la partie entière obtenue à chaque opération, de haut en bas : 0,675(10) = 1011(2) -- Alors on peut écrire 12, 6875 10 = 1100, 10112 - - - -**Appliquer cette méthode pour représenter les nombres suivants:** - -- 0,1 -- 0,3 -- 12,4 -- 32,06 - - - --------------- - - - -## Troisième Partie : Codage des booléens - - - -### Exercice n°1 - -Simplifier ces équations logiques: - -1. $`S = (\overline{a} \lor b) \land (a \lor b)`$ -2. $`S = \overline{a} \land b \land \overline{c} \lor \overline{a} \land b \land c \lor a \land b \land \overline{c} \lor a \land b \land c`$ -3. $`S = a \land b \land c \lor b \land c \lor b \land \overline{b}`$ -4. $`S = (a \lor \overline{a} \land b) \land \overline{( a \lor b )} \lor b \land \overline{c} \lor b \land c`$ - - - -### Exercice n°2 - - - -Ecrire les tables de vérités des équations ci dessus. - - - - - diff --git a/representation_base/chapitre_1/cours/README.md b/representation_base/chapitre_1/cours/README.md index 84cd9a6..54580c2 100644 --- a/representation_base/chapitre_1/cours/README.md +++ b/representation_base/chapitre_1/cours/README.md @@ -8,7 +8,7 @@
-![bo_1.png](../../assets/BO_1.PNG) +![bo_1.png](/premiere/representation_base/assets/BO_1.PNG) ## Apport de connaissances @@ -33,7 +33,7 @@ Donc 4138 peut s’écrire : 4 * 103 + 1 * 102 + 3 * 10 →où chaque chiffre (compris entre 0 et 9) est soit celui des unités, dizaines, etc… -![exercice_1.png](../../assets/exercice_1.PNG) +![exercice_1.png](/premiere/representation_base/assets/exercice_1.PNG) ✏ *Un nombre est égal à la somme des valeurs de ses rangs, et on peut décomposer n'importe quel nombre en puissance de sa base.* ✏ @@ -45,9 +45,9 @@ contraction de **_binary digit_**, littéralement **_chiffre binaire_**.
Un En électronique, il est facile d'obtenir un système présentant deux états stables distincts. Prenons l'exemple d'un interrupteur -![interrupteur.png](../../assets/interrupteur.PNG) +![interrupteur.png](/premiere/representation_base/assets/interrupteur.PNG) -![exemples.png](../../assets/exemples.PNG) +![exemples.png](/premiere/representation_base/assets/exemples.PNG) Ainsi, pour coder une information qui peut ne prendre que deux états stables, la numération binaire est la plus adaptée. @@ -63,13 +63,13 @@ l’occurrence 2 et 10), nous adoptons les notations suivantes. → Méthode des divisions successives
Exemple: (11)d = (?)b -![10_vers_2.png](../../assets/10_vers_2.PNG) +![10_vers_2.png](/premiere/representation_base/assets/10_vers_2.PNG) (11)d => (1011)b
- + ✏ Comment représenter des informations complexes ?
  • Avec 1 bit, nous pouvons coder 2 informations. @@ -81,7 +81,7 @@ Si nous généralisons un peu : avec **_k_** bits, nous pouvons coder **_2k Compléter le tableau suivant afin de coder les 8 premiers entiers naturels (entiers positifs ou nul) -![tableau.png](../../assets/tableau.PNG) +![tableau.png](/premiere/representation_base/assets/tableau.PNG) ### À faire vous-même @@ -96,7 +96,7 @@ Un octet ((**byte** en anglais) est un regroupement de 8 bits. On parle aussi de mot. Il permet de coder 28 = 256 mots différents. Si nous codons des entiers naturels, nous coderons les nombres 0 à 255. Dans la littérature, un regroupement de 4 bits est appelé un quartet (cela nous servira plus tard). -![octet.png](../../assets/octet.PNG) +![octet.png](/premiere/representation_base/assets/octet.PNG) ### Unités de mesure @@ -126,7 +126,7 @@ Méthode :
  • Ecrire le nombre binaire dans le tableau de correspondance
  • Faire la somme des valeurs des rangs pour lesquels la valeur du bit vaut 1. -![2_vers_10.png](../../assets/2_vers_10.PNG) +![2_vers_10.png](/premiere/representation_base/assets/2_vers_10.PNG) Somme : ............ @@ -153,11 +153,11 @@ Ce sera donc un système en **base 16**. > Compléter la colonne binaire -![binaire.png](../../assets/binaire.PNG) +![binaire.png](/premiere/representation_base/assets/binaire.PNG) > Passer de la base décimale à la base hexadécimale
    Écrire le nombre 63650 (10) en base 16 -![exercice_2.png](../../assets/exercice_2.PNG) +![exercice_2.png](/premiere/representation_base/assets/exercice_2.PNG) > Faisons la conversion de la base 16 vers la base 10, écrire le nombre 2A3 (16) en base décimale @@ -165,7 +165,7 @@ Méthode :
  • Ecrire le nombre hexadécimal dans le tableau de correspondance en positionnant le chiffre correspondant à chacun des rangs.
  • Faire la somme des produits des chiffres avec la pondération correspondante. -![tableau-hexa.png](../../assets/tableau_hexa.PNG) +![tableau-hexa.png](/premiere/representation_base/assets/tableau_hexa.PNG) > Passer du code binaire au code hexadécimal @@ -189,7 +189,7 @@ Pour passer d'une base à une autre, on passera par la base 10 car c'est sur cet Exemple : (944)10 → ( 12234)5 -![base_quelconque.png](../../assets/Base_quelconque.PNG) +![base_quelconque.png](/premiere/representation_base/assets/Base_quelconque.PNG) ------------------------- @@ -201,24 +201,24 @@ Prenons l'exemple d'un mot de 2 octets (16 bits) comme 5BC9. Il y a deux organis
  • Le gros boutisme (ou ou « mot de poids fort en tête » ou big endian en anglais), qui consiste à placer l'octet de poids fort en premier, c'est à dire à l'adresse mémoire la plus petite. -![gros_boutisme.png](../../assets/gros_boutisme.PNG) +![gros_boutisme.png](/premiere/representation_base/assets/gros_boutisme.PNG) > Quelques architectures respectant cette règle : _les processeurs Motorola 68000, les SPARC (Sun Microsystems) ou encore les System/370 (IBM)_. De plus, tous les protocoles TCP/IP communiquent en gros-boutiste. Il en va de même pour le protocole PCI Express.
  • Le petit boutisme (ou little endian en anglais), qui au contraire place l'octet de poids faible en premier. -![petit_boutisme.png](../../assets/petit_boutisme.PNG) +![petit_boutisme.png](/premiere/representation_base/assets/petit_boutisme.PNG) > Les processeurs x86 ont une architecture petit-boutiste. Celle-ci, au prix d'une moindre lisibilité du code machine par le programmeur, simplifiait la circuiterie de décodage d'adresses courtes et longues en 1975, quand un 8086 avait 29 000 transistors. Elle est d'influence pratiquement nulle aujourd’hui. Généralisons pour 4 octets. Ainsi, le mot 5BC96AF sera représenté de la manière suivante : en **gros boutisme** -![gros_boutisme_2.png](../../assets/gros_boutisme_2.PNG) +![gros_boutisme_2.png](/premiere/representation_base/assets/gros_boutisme_2.PNG) en **petit boutisme** -![petit_boutisme_2.png](../../assets/petit_boutisme_2.PNG) +![petit_boutisme_2.png](/premiere/representation_base/assets/petit_boutisme_2.PNG) La représentation petit ou gros boutisme est en principe transparente à l'utilisateur car cela est géré au niveau du système d'exploitation. Cette représentation prend de l'importance quand on accède aux octets soit en mémoire, soit lors d'échanges d'informations sur un réseau. diff --git a/representation_construits/assets/bo_dico.png b/representation_construits/assets/bo_dico.png new file mode 100644 index 0000000000000000000000000000000000000000..4d08453879abb3d21578ee5c55e2e4eb70188766 GIT binary patch literal 84720 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 literal 0 HcmV?d00001 diff --git a/representation_construits/assets/bo_liste.png b/representation_construits/assets/bo_liste.png new file mode 100644 index 0000000000000000000000000000000000000000..05f2a6fac63c737fd5a00ff24144ce85174d6b8d GIT binary patch literal 145099 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
    *MWUy$ z{Pt?fM0sYS@<|p-j&%6=aK{LF7ZtnQ91|X1d{e-S8DP+25}IDYc&SnNT-Cb(SfQeN zM<~C~Cxa5bE@InIK*P0#dl#kltl<$SuKZAb7VhQ9?<1!#Z}u!LO}!_zleEWu((g-%G@63W;J?ku+S*D{X5wTpLh9(fJlm;5OK2K zdvOAgLGGVl0ThjrR;`utK6D}mwQ~Z5NQ(J>fn4i6IpB~XQn&yhL33yF^VZCIhwepZ z8OxefDlUH&!g-nMrl44xuayIt*w+_^2fKkX5(AD?)h=7~8?cc<w zQVd zaYPg?4GUKtrL29$plGr6xWkL_Mco!l>A|MzpPeE1f1!#IF-S+v_+fx+do1JMIYs%b zP?ICXvdxM}E*vV0V!LVvl$A)rG5fgvVC)zNET=cq>&}6*ym3S>HAD3W9q7XB)~W=q zLUIdO_rKfjmmcJF?<6Z<(Bwc?zufR=-_M~xIyc_Bb>V%KNb+j8QWSBdIA9n6#H`^C zXe&d@fRYtfCxni!^s})jiCh}LvcQ8sCFO`bpaSvQ(>r+eEa*wAs4%YT!9V-M2orut zgTvb?@%PnZU(M)&F0?j7PV zrW??&BP774(V;--=D9i{y|7wpnvD;0_LuqPqGpI06TFM^WK}CyK=SgN02OQ{P&on1 z0fL7hoDKLN-yZfSR23r_4tZ(;7~llyvQha%N5Q7(i`=bV2Z9A%9b-JQtjhw$`0(Qn zpiMTAtmUFjkA;_yoZbZg&j z{qfi1-9QN!X-=cT3!Gw4uT?d80L~ozA*X?9dALGp<&Q7+viW@M-QliRnV5@teO9^& zJ@`m}T>Ol*&3wPpq!???CO^&Lt%Mzk8OoB!Udh*LF@cfj@jjv25ts@nVz*moFjk&d zylLDA?FGKC&N}GH&QD^vvuDIuX^Sag0HPK9AOV(+{{ZN|XcrR!_|(H&AuVjSy=}^C zfq3PHfBE1VWe91`*)~-Q<&K)E9$$eH)Z>r-;qIoab8;xdAQS-`kA@5qhsghu*MJDo zHF@%XA*0ZaT4o=(#ReQg&gQeqZ|~cS`90yNOiVqU)?T5%besVdAm?NX+^GLI)Z}3S zDydl#p385N-g!1`wqwq%6Vmh|uvUOqfZIhAi8xKdS+MOpO)yi$`Iq-+s|Fpfwmc>Z zlmQ94`!oBfG12B-c~0X9uE^dq%~aU(er;6EV>hyYJl5(jn_)vC5hVbRrMEBg2PkuW zI?Nv8rbZM$LrjGN(up3U*(jmQByZgR4_|K?)>Zd>4@;?p- zAN(w|#{M>0+S`vzPJ7IKT7rfTXfr;e>^*ISS)TfS?;5Cwk)BXR=w58z6L5M-GfV$#e1N;KjK5V{G60V^)6k-+skRK*!s#2F3tYcw5g z*JIy8EZpP_*b)RUCqKqs2w!--RQa zZ$1UqH!rG|&03Ar8ixp2LrSm;J=r0ZQBu+XZjKI;4|`1qHmL5-k~&no@fp>5r?E^> z_Mo`u5@bBc*UCw6I)0zPVxCk;v3Gk&&}HT-B4y|%{iUC@Pbyje`*wNi-uZK~s?@!o z^h1 zL}I58Pqrh9FowNrk*c{~1%*$1oA*XDj`youjt1z>ptm_6(H-`!6)yoa}%}Q3MBe6XBC+7ow8k345_`_oHNVCgo=Cc-HAk zz|YZhJ;}(upXa!&YcR$cK=EWm`ey(lN7?P&v|&2)IUsgbA9QWtw4~VH0>4|ON(R3{A!yqZSuOF>!fh6hT26rOmZ#AkHV5jnA zH+XjP%9fljAaq%{-EFY0e;21y63TqJ^94*N%D)is>FtRN*cbBw-PQjEuNdjlxw&_Z zpZSZt({`J&fwg;2O4%0LITdlKhSbnb2~D7kbSSuQ~e zjdWtvB%yViyDpr*7s9q8aTNd-YOEoB)3EDXGXoI6gas1aRnLf% z?gR$)FXPq$9smI;8o6rV0+!+loYv6fSz=+|x~3T?qNdVO8vEY?ival0D=(S+OrVOl zY^>G8V^mwpGk4{_wu?c1QI?K#&*d0Zr}ge6_!kOJ`OKITps)aIz z{QdAP84q;d1xmE&JblOL-vy0y+YvF);>Yj`Dh>gAA88KUhm+`6()~u&DR`OZ11g#C z9BhSf)jwJLvngf4dp%#8M2dW~f3s&(Rnq^)Jd|CqDLB^bngkXUsB7_z zD$}(p8mUuUjYDJpeXRrO%r{1adiPrFxUWnfSikABM~kM=3wGuhQ`IKB7vA=XiT;O+G(0I+$}hTU|LvQ!G|LA?;7* zh~F5vO^Y+9c?CrnsY}s1RdI4j;_9BUp8UGY@bpAGsOM3T`cbOsP8!)G;J`8;qm_1v zExcaSzI;%-IbtJQ=FW2AZqX?9ky_Alqck23z=Itd_i`7*`1W;(DaHUfMS#ajK2@W(AywM2{L* zrFSRGDAc2o3{>1(8t1+)FCrvsa_pp}zT|_hx+d&=Z4k#kE&U6S<_z69cHpcflLIo5 z&Dn7Wr?M(+(R5g@A)Btq-x5n5=^dv%@;0-5LaBf)>x*N^wS=8ME)+lx;f8pBP<09& zMfQIlv4_V$n=RM%ITli^xBmLOF`t1Cz9ZH9<#%jr7Rvbm7ndEjDN|9@oi7%DC{us8 z%8;)ikHg~Tb6$LwQhIytVf#l_VEYdlT+xyi=1^_6bQb55d<(|>{c-2go~%sm=w4%3 z-U(&;q?fQ8`aLOmQNWxiJTx^=ed>%7wer;;I*M>)oGbPcDp9fVcWPn}BY(#%%Wz`; z*od!BWJ_pk@$1&LMHc-}3&40>YLSO`pK6^^$;tMPR$C6?Q}yc(QJg^<5C(ab1MIzK zO$`o*2h?v^eyZ)hL>^jJMg(`Am2Mjua{$n|?bf&nP9x`yK7FggskUhxIij3BpxeY{ z51~C8@-S{rIsSPgyXm8Mr?L$ys1y-jDPdlYf`0lV8tD9mh6MsH=LAmsR=T<+Xq!bh zM*BS#c>=ySOk$|utCbQ#n{|d@=UGHZ29lj=Un1tE2V>Hn(6|GhTB0lH-~8@ZDv(@K zPYq?PnlFtXO*acyUViAox%$=*)b2TU2+%L>NKWB)qX|xl1^g0DK}};wv&6={mBL++ z`XOT|M+{vatLm360ta^kL91TEdB=e|qv0OGFM9rR&ko#vM zxORS`z8h70`11X;a~qgKq4N`kQWLtQ3gYos{-`=XH@>oPFE+SR-RIj$kq7q3_L92D zboQbz|DAIq0X==w4Q#uF<1YDAPHA)meP?cLJn|G_iK)D5VD>TN z@xpw+FR&>|WLScyEF1ezSPlYPkl0Ar*;1EjrTRl%j@}phy=ODct{+S-STb=JRne8- zw@UJRUIQq)%15*{`@MBxck>fJDWV!2QFb{Sq#fHSOe)2k3R}?g9EvnCBDyGHlTA@vby?5lxxq}RGo|b zUOg=h_v`hu0gl5VP#X{g?Ndav9%un%voGa1^@3}_{(-8{;D)!{O}L?V`~upOlf|BB zSj+wTYZo7nB$@fOY-{o}AJ-baGjIvaw%>ZS5)9jQ3C^d%5h#%4=g0ls>2Vdi3l!+5 z9NxIS5)bUl#^zrME8K~0e zPCV=WvKkG!SaNT;#kK8UC4yB!gC{p1(56kRz=secd;qLWTTqSm)sdxyFWhl z)ScVy;j`sTEJ)+E{l-gozRLNjz~y zN1N%D_Q#PCRQq6l&)A3U&rw`(H!OgQ#s*_rrkUJmwb6r9-tx9 zsHGkTZOV@CBVBUp5==h*Q&Nh1<`bejffj=z9ymZ6F?#X#kK_d1^sbL)=kDE%Y1w%( zdEb?z(pCeufg60~3*J|_=>YVo?B@SyY>DS22iD3WMR_X5!0{3toL3U1PgD$so_9c% zQ6@Z7mszDVlZo9;75X@lKl6R45d^`#e?RTSP#kLV#qXqO(zY6NHHqHGhvc}jg(Xz7 z1-TUqPx!S9sVe7jzqjOeVpq>*TM{RVRiu)m*Ny7#cGe|~w=2f0hLd0(-1_#Sz3-5! zyt^J2>GfL8VM?kg>a?-=^<;UICrfjfaZk`MD>3Zx?r(Aq{ST5$11NQ&Y3ALiG5a^o zI7+lDxv%EuYXX&M)y1hFuUU_Oo*FA!xR63>zxA7G*?CgQ!e$4yY!TE$bJi5IURC=| z(*yon)?w$g|2RlMK(6-p_LiW;6&fIxe3SjW@C^w&d{YV7mAjoHH z%8{uRGD+-@$N$amFrJrS4qS{>%~~`jJ{V7DpxHfKZ=$pOJphR@>lK``=3+_h!cM85 z=XILPf$<3uT~-)*R7U7%p?rP-JFhc7q>-(x5!9>)oi>C#Gx1?Lron%QB>Mt81MMXe zy^#bo&%8f9j*k0j?*;lf=md7O$3M)A`z0m31N{%{0d(8o!Ph0YF$|KeZh8Bs*`&|| zmc4VRjqoc0m@3+Hm8GdXDcqAFqU}=Z#AB<;Wrt9<$i17Wy(eIQx50YitH~oPQrxab z468yD@n5k*3l6p{{dv`w2UDiAkUxdnA29G=PS+Phjjm*j8ny2(j&z>8OCQw^<%g$= zAyFUjyB*%Le-TK0oYcQ*eJ~usHcSz6Xu80a=UXt|@5KNEgHz!T5nq*?;ekIB9p zGP+f+x7j#F8<#R*&@av(xX(zIt6yuz55mdc8G6jVQ0aXbfgNVDT6zqdq$QV!!z^XKs5! z>>`IG!X0v7I<}l}YJArBuF9=<({^+EzAp5E$vSAiH{TOes--v5s_mW3NcgTtmf;7E zq#b45JsaxJ^Kl|Wv5%p1pD6r&$1&pU2Gmi8GtfEYeAHqK@sg#f?6X=WvXO01mi)IW zJKR5^`QnR6APkNUxt$g>b3@ZixAXU7PI8)v>Q{tjXmj z(QbX`Lm5p`^i4j+zxEi(iHskGe_8cyBeBw8BPM&Nu{uw0upv$B{!4v?F1HO)-~N)N zyng?;IWEArbp}_=_#Yc%sg;EdL{AWK-c*s%EiV z;Pm#n2*qvI#3%YqO7fnc^uiEJ@(>A*GUhU9%6PMXG1MVp-+6P^C_{ttZIrc7!y&JhGQ(n$pL)3w%{=xsJ z+VrryX@6rsmpdj7I_cF6?H*FB8|BJy{fBhNkK&0P-gHB&T}^kpCu}f>E`FElF-l~j zT1{Dz@uPI^#I9hHc62*EV6p2be7RJsOa|2LxQ(llQ*XRLW6gn#<-?K?8e`!3#G@>S z{Yj}9T`PML>#hX4N9Et-sR|6_jTg>mYriS^F&uar9bH$sW@{qSux*JHUqr6`el=N- zfiv1BTRS|A*ZoWuZqU&&Q%LU3P}9rnvZRzUYae-|Znph|rmEfdBDblx29adC<&?!) zI)CsQehhLeFk~S$Hscjl+{&J{Z$@q?P~uzQ1vf0Yz%8;a77@FIP)6w9VE(Y6jbCIx zIkXIyqd-kt-x>8N<&IBM6s+o5VJMu_dFEDC>WRSOF2ssIUmQ_hl{V|dF!_Rut<2GU zD72U14K&W`=U7ol2NNo+y)|rxZo%Xz=!T$0MFI^|<(`~046u%ph#plj39uvOPv|iB z4OHv7O@I95=i43M97&4>3)?d%hap7EW{FYq@NAdTE$Pr7ZL%!4g4QhO7SMf!A?3Kr zjIb)minHbp{+>k@E`|+8Q_*J|W7|w$e^=VBdI}g}*{_ARtShlc5TqNLMqKy47;Qi7 z)Rbs;vCoG|R-_(rH06Eia3}^eXR;(j+>~;llz30mw)HE4Oc6^C=bA zH#mOjx3LVLsfXu?56tyu_B7%P`W!m?kxL~@TehB1Y7RH13IuIz ztYe_51008Zdq~x#_qp|6^{fps+GwR0<@2KtN{)IyMpWr?`O*R=O=kYUT>ci77R0QH#AG?anDNq_tiho z3qRuy6!LsOu|}mG#{9vwCL8e(N5WFZIq~4r3jZgu3i@02P%({ z(n)4q8XUPCT?E^1E@c~EW;ryuhLUb~Xq%Bt#qkeB^8tQ$jHIR<5RL*(W~pdU2?!?X zmh^$Xgv}Xb0IRZ3pNBkkXHQ1_(?U{1J<{Moe8{?WVWKAS#2N0;bN`n3fH6dPs3mjz zcE3D|s0~5PN6jToVD!N{ImayL(t`bW;LywcbaelIv2UNe-8}cZAERE>zPF9i$Q(Fk zI@s*~yyhEfp34?~_MU{bXH-|Yznn=BG+Hl~&1n`M2B?0Js)kl$)O#BpF{IOzxkLLQ zZyL9H#tHQ=X!&VaY2*LxyUVp6mME*{*ls(%8J^D9_)DKDpVO{>Pm?MSu6Cp;=>%wAHMrK&IQR$m#1x`t6M!otuOD+YOIc;d`SbA?SndML8xV-Je8i#}CzGWMxB4wHCJ$TiKK%*N;Pw zegsMd_;K=q()A8}k*eROtg3!qu%j%pmZ|N#Jdi0~wOmh{OQ61l>Re5iFC|8DGXI%N zTo+q&M4&73K*3}*h{Ne&Z5+NznAw^wnRvP#9NCPpXf<)hxjk^*LOvfU_g9e<&e1)2 z+1!v;`3|B^)lt0EatK@J0Hee6vdM&*NaxhO!oTr3`( z-r#?J-Y)TBfBY6(O|>}Y%egsvvyBv*?CY=4#$Rnx{pRa1O+CFn6-i;W9@YNv{oUKo z!y}1LE#QNc7xjy3aTo&@U1xTpFGm-~dE}S5`jC}?`4{SnyprCu>_7PE!~EDmj|T?m zI&5Qm1uwVDMBf!>1=S3>OcJUUbi}BKmpTjFN*`0S)s(rWHcb9#zaPlVYdN<*e;&O3 za3F;jRmq<^YBZCS#kWD}87=ZEXBEXy>Ch}{1<82jKd$tzIidQ>8&$fiG^dD-$Alr2^#DD!npzv zSvr7&x+2MY@%GWZcwt5EW(KvcgL!Z2jy$yvQB;fk>SgoS$o38=gbArEcXKtM0M)!b zW7uMUpPBI~J>^}P=Va~sW3`;`Pq~=`3mWcq=A?|<-f*^vM#~1!O60Qf?NWj(ANi<3 zQV4!WA02vl*AVLd=FHf4<7<86P%d5B5r)I+9NJjk>%Kd2VHld)k>RtQ#k4-O{VC2s zXAT2bwy~YHpDk`j?x>QUPVs>)>g5N_>Ta{FmRlWiSmSnAN?n_+-e za~c6p^=FB4*M9l!W~8Kd=kc@^zsW%1CwQx-w2`A-DOPxMxVS&bF}N6C*`tZxvxvb>sAm=8vpqu8z1inBwx;nMjX z!ib~uQ5yL;UR##(Md}eZPtif?0@nmo`J@$OiZek|o2@sJ`4sA+WfN%7iU++KbeoGn zEKTX6?Y#ik$}t9X@vG2$TZkSfV*u~jO`?pY_VDnq+TXt%5ovb|=2}WLb78dd+f{yw z;vvs|%q`*FwEI7s{`r;t+*B?0Yi}lIb2=?1due4md^znSO`c_I0w21Tdyw#)E8F?* zuy4}jhmaI_Y_;@@C<>^!=*h%1q$7NVke^w8BHSuu&4hoeQn?#fxA-X@Bt5IS&&YO0 z^TQ8Y3HY}miQa(|l@Dp=mF&6w2i$$d@*=3ATTo-EZuOqx~5 zxHE}cup(BPOSD4acCy3#upF><&+xDKmfaGlZc-LKl}QqLle>Ynty0C^QK+sIF@ZyD z0YbN0Ii{8@VwvewVDp}$xS)SFAB7{bUUgV>6Pc}XdW@`-ba1EGPC?b-_{%H7`mYgI z(2|j5wDMk!9fyStBRm^EPTs;{m*b>0uXlFx0|RuibFc)bR6NmU813Pxsu1iHLGy@! zr}>R3c_^MW4*pOU^7?aOpEHU!YwC2tM;rg1D$knx(EXWZzbp#SV$ChpWY+509q#Kv zGoq*E+Lw*4;XY!&MweF@t|`F9QJa;7@kvcm z8*9277swP%ZZ^l$5eq&#EuNgplq4yQndz~}nr+?eHw*kQBagfexg?8725y0lC; z?C?WB8ZFelj>EYGUO6}hXcj;^r-AMW0pR!0+{wyaG>~(F)^E@{+zcmJmY%%5J$m^K zE__a$VkF0-$~f5{Z?+}hlw9v{AH zFn9e~bUT4TIIQT;`XNZe$oz&)?MrS_s8K7a^XR);PC+a@t;uZv}=1<=~RuWz;SG8eK=XT;*{czbYR69esF%=A{_)4F7dZkX48<*@<*Q zi_pZH+q#roZl2|Wok%Yl78J{wo;GxGd1q*qPLH0g>f)aQvHqq42ZAJBMI1Z{8INO` zs%O>|#;{qfQew*Qp8t184&=>z0e$qV$){Y1MoEMiY!)lF`c^FB1uc_T@wc~JtwZ>_ zKUEs=ueFCdq?y{+Ts`p}PUBm0+OmcXKR>^-B6V=Uxw*Jm5k`y~3DCo(-`+TE!buzz z^EB7w4wN>3aVj1cE`@Z-zJiByairqBx$1N_nY7{<^c+_^SI_i~F!dQ}n>7`IKv~%l z1-8T5Uoh=Py8ZB$D_|?#pO%4*95=yy>F!mz0%iXusBY`D9-q4So?m2q&E{s z3MC)W5)T|(xT0Ist7b?LSVr_HSgqDhDB5O53oL_<1K#K&h3-vHz1Oz7tRy9TuCYJG z=qo*skGwifR<#RLHAl!kbGCm!#u5jwfBg)ah72>=-h4L7%e|3<`6JS-WEFH{Lg|(%zB^Nom{F%*A^r~Jv|>hj@C*Ynzl zQ~JmT8r-C)yfJh1k)Fdi6hUTY+dw<1CI67Ixabk~aJ#pAHk{&HckHEavQ;RTEv0{{@_aMM*eeAX(YU9?a@(B}NC+HsT{4IAp=jEiU!vkqE;yuc` zLOx$M78a5xA(U{{@edB;vY;XMp3F|o!)zY6E9#Yo$Ak;Gd3skeuE);XGn+`1Z01Ac z%=unDNuPTqbIl7z{7u1WeP|l!Z0H*c1-hQqLq@nU+=XL%`c}7o+_7ehcNQYDBse^|uW?h2VO4|C2;S3>Ec@sdOHZW^m3Hq~pAL;`xh^ykY-5lEFb#&?7)Z;fw$vP_V= zC2>@2jI;aZRZLq=S%tXDXP5C`(l+!Ia4f*8T(JfD{VpX1T>{jGa}pGIbACIMCV~Qs zCm$_oGNv8y<ILWgw?9Z5i!;@xl|og;5duelgLF}e zAwK_#6!<)GThGyz_#`Avhr&6Qrq5yyRlmfzaiCJJM(4V7I@>7IS;bl0~gqku^C%m5P zBi#9|qPtDbwQdYtF48XO&l&Sq;LqaLsVzE^vE=%#uRg@*mrlBFq1}H&baS1wQovTT zoqKGDqmLle+b&?osHeHrG8qfjx*jm!sSjIdZKN2t?pCde#Dl^l2!>9&JrWawHF&;b ze{Oq{1@o9_LumIc<$QA_tvT((*c(K)Fs(lZi-?P?jVy;Y5C$!tkg4uuq$6B;sEx=F zcNo0+hw6j-kns9_c4w#0nTySHP10uyyki=cF>9rS&}ob0t$o-{kC%%c@*P1c9te|V zfFeZaQ({>2UN8ce&6*6N2V=$B^l=%Tl``s|j`-2opE@Rm;D9Lv&+ z@tL-*O=6S_#1!h?l^agauN4a56nUvz(?yjD#^uCV|I*7b;qP_2}<;wO|K$MTLcWEv7j z>jLM~g|o9R59~*2j+#3u!j^BOcIHYY0eCcb+`l{~NA{iBg#t_HQrN#J*|RjbRFnK z1R8`1H&K{r8G@Tc`O*)m-`3yW*gK(3tCmN$q+1i>FJ^r!T~jiWa_ApQB3tg19b{_N zqq^Bpu5CG#@bpc|mcA#3xCs5s1NFSSE$JyT0mBxbWYnT~v#$(X5Re=>7cQfv=~MZ$EI zRheFC#-r`Rczx;I5$DaAQ6mPrPCW*4mi+CWswjDd%ugIUT)98aPB#_V6&jx!D0sy8#O&%s2`J*?ODQ9B#++Q?tYR4N)TNPYx_x61>$J(Ymg-Ao zSD0of>&xsxavs{BB-l+5CztlL!m6dqjHlxXDZ*tVHa%{gYZ4y2ud+~>9ft1Be&jSs z7Vi}C^fE#We?GiJN0?a}N`*Cm7{|a`#=gH$SLjR8o2s6CGsiGG^7<7=7$sqh+-PkE z<{dnJ48lhdM0KRfuy!F&tB<=IVObySmb*&6S**wW5VXT#$=;B{{d|rfbjV(&i?K@} zG}v!vN`l$*{!s=QD%8n3cU0a4^p+_!JKGs@?*Y-_Dxd*&#uW3sy5;fV)?fkXrR_^z z>Hk6vgagpB935nh?%#yu91Jf;?4AHn6hD#Uy@p6-T73*VOTibGLuq$%2Q>nBjONQ- zLtE8G%_|Y>FR*Warj4RRTj-q>E1_j(1tO9w;n-#-ce+XJ#&Zg2E>RZ?!qHzuR3A$; zY;PH0s^%EQvrLZEsv}lsp2QDi>^dI^#7e!XTj5r)9P=%8ymC|f>4w|ik}O8xPiDf; zDn&bSaBV*(hI}2ZUPvLO#-2`q??^vRPwrAc?N2o}=l^2iG;Mf*ieO0v_N}!=rX|IK zG(}Az?y&#w85*R9|&@grOCK1FdUZG0;ufQ9{I}V#;6;R(>Q36n`6lD%fsBAi)Bt=6Gmsq)s8M; zYzN?9%Au2Aob)JXB%P~`pyj{H#NxS6R+4UxvWLlI!`N;b7E*JSu6KklAJg$7pL}Er zEIpWxD{9z8jP_wpCg5WYx$hKmXY)RJ1dz z^@s7wu~v!7FZ`3v6xKb8*>2(Z{FZK;#xx<);^MENnh(fSIcYn9l8ha=T5eA906obP z61dZH#*DC21K(w8LZZ7NjpQ5@(08|U*IuP{xBssikhOLB_Y)GFa(B6h*XPq!m*bN> zw2F^$KXNbFmyGQCbZHf09dVC)mCL2wcy`^+x9@y+()Se=ed6%P8M^Q?cB}(BibZFY zf3O`&$)>wDs+cRqj$8Dj$Z^RW6z{B=Y$J?S9P%iAH0W0jo-~uiFddWcpC!m@AZW@j z(vsc`ysQ%_xiQXjzRY$q+4i$8vZ%B#nzhnYST%uHUNiYtsdhEqwG++8Q_!mX_@hU$ zG#97F=m#=eaixjck0xr%wXY9FgySNFu30UQdet*=$^u|IlQ6#X8gY?oh_yZK?8JQ@ zx4UKDjr}lHZqZ@h#g1dujy*3-hxEy4no^5XrpfT-`)a;%`N^j1;D$2g(41Mx=a}OA zpLZXw#NFsmanHLdJQVmkW=z6sUj86$*!y9k9Pm!EWc zlMQPxhROq)p2|TvSh7#pm~s{l4oaz}OW7IHwP-BJ%YtnTt6U@v1I;n!&3d40d8Z~& zJ>QCGIW$wG<`+?wO#Qj?kX;MkdDT`iqPF$sa5BBGj)fI0+C*CMTJO7~h zQcL6{T83NIZf8u4>$n{qGM532sA!P`O?dJUjlM6NX9$BfHl$c^_9LZ!D1--h!<#^C zO>Vt6UKuPn1E|L46=}D&>`YhYL)u>zKuZY{JD?MXI|Fg9anKk#_9RU-%@emXl<5Q1 zs?%q{qb0R2|AJS<5D`+4&zDvNqT4?p%}wC(i8F@jZVG@iH3pGqm?|F8?9-r_y?}`J za6jJJD1zRmj~NqlUT39O4RRRA+f>Juz&x&QhhEy+0z&sI zJ~u#n9k>UowQm_;O_gJ&{0)!R|0+0LewBgzkFU2E0{4j=ha(?43bU=Nk2a@cc1=_XP1hK(r_ML{>HSu%p7uTKXq|~{O_dmc zlzh}7tN=Ig>YX&VLDZ!gZkO|u8oP`)jzCs&sKG9Bqp-$!u>(t6QW8}t)^MK!25}&f zCa5QSmX|)f@t`3X0b$SRmv4u1sfL(j=XIPAet$A6#o1qKU*p@Y>~Q;;62%{wQi+Tm zmFW#AZ9u#Jx9B?_Fs>q_>7zkk04j4xi0*M9s^Etwj5igCii$-4;4SvAwt@|N_t2B} zbOq843%$$JDz)#?{_T8LNzQIIrSO1&S>t?n!aGzU@?@N_Qd`+U+ojogBf3=qYH^=o zkCgd14n|Q$Z$$D;Y6fB?en{{6&>1`68I$UG$4vrm@u86d-)JB_q27eY)v`YrI&{;$ zX860)=wo8?gc#6>dn3YY%hdHWp(I-b1@zwi{;VB}!wi{+QUYO<%AWu#kv#ZC#>r3H zGu1zgag&UPs%E~%YvT3O7)5O>0Db#v+if|}kGV|ccdI+gy^)|d2H_l&C*;TjNF%TK zL&>gcqQ-1`#mI}nIA7>9M3aa8d`x~^+v7eLqE z-_Vpg>90Qh?tc8wa%kTk)PABzx{oM6?R#?G&pcT5?rR5MSwGF+92dhF{A#F&qy<_s zYZ6Nwjp~X~`u660gWbo$Z(ml|FrG6Ohv*&!qAL97DDY@Y)#@zYIF{=q;vruA91sl> zp;2>#`bf*o;hWtCr^hU6dt@W2(D*9lQju*B@GVCdufNpy1eC~AwVIP6EjQh*Q z!|5p`);S%xf`j?SWKNc!J}kWMPVX)d4SH%V=93^ZIm*mzfvjkfD@DpT@4p|7N62i_ z?}HL=Fa8463F%lW#VjC7nGBSQ2u>-@W(&H>+kn!ecrvRc%lR&P!bg)7T`FS=Tnca- z40(m0>oGP@AIM%9wjDOARqNj<3(*%)JRhU=ccK`*dGpXRN`8!a4;mJ-@!SyY$?G&h-op&N+xdK_&=(PlJ#1nAyi}`M4b0s5{4+1g zMjwfWBG?=ne)O+YGRu4N%()JXXoIjoLV~u;JGRXf^w^iIpppGBf%#zS=O2bp{d7HP z?oYdx(-pZk$ms2WUr-2$+SKGpDK1xpmNO|f^UC)`;2pbIyzm&le8*w8Eht^UQ!Y`< z-I*xa)u?=t{DntnBQZ2u`Av5@qu;MCxc3xKeW-gmU_YpdMsBiI2MOyp5Rh}+C0toH zjlp^HUPyR;dwLbkk}PbJ5}*-5>|*vMAE=pxwbGR#po*OU%B&TE zSKaSw?FP_AKJJHvo6-e@v*aNoTx`OO0)aS0<$J$?=%ZY_Ijb%%M`BS`^DQ=w;mHj+OFA?Ma-1Y zL7pTTaFo#7q^K8WQLrjyTFsn#zu(Tl;jMy>&H1!+20g#=ps4n+W0!So`PRCVq3_-T z&V^_g@$c8#id8F9qTM63zqz8A=V!noRRfJ@$J#mT;BgXxG|6gO_;RoXwwVHO6#=IO zHa;$+UgE!(&jO>l(n28Z-jXE4A2 z-|`BHpOy!Soh9r=)l3Xh?^VF;{W6H#b+rIwvv$P3Y*vj*pMu7-`nnUK?%JpfXrOhg zfAQ#BN;p?fd%yZ7W**CL@FAKWuXG&L%^8p61di*Q0@sT#ta%5;VmN?j36v5er5f&S zfu7V~IAXbuF8ET8C-cPU!p1zK{^L`osSNwZ%Lwi}En^m#nS%iZ7W*0e8dd8R*DHpAiKQ2iy9_^l7J4i^CA#%XgsPjThwdVh_5#KOQO--&H{CB-a%tqWJ0N z;HAMpigESGg8QwxCD8c(fGbG~v?|poyMb}A;V9<0W3u`EQ`k1OhZGOkhHM>bqYxxW- z$J@rqv~rLRMtk6Lfw5i}hvUlHQkgYK%Dli4lh5pIo;)}dcd}xy9U!~B4mlG zRKhYgQ9*)@{U8JIoCXJ}NSJNc4~0VhtMWA&VUCcH&V>G#Bt4(vYgMyqLdCOQ>zr^c zdBPwc1xw3*4e>_#&XDB!9mV$QBO3SW+9=FFS2cj`s}zGTAK`49VFjK*$qws%kbcsk z3}2r0N6S>{pMSs!6Kzd@PjQESbsgg4kOXG5y%Pd?O&HKzn@Q6l0&z2d*hFIHu&m%DADv1MyjR0s@N#MDG89@4y zgvMR?4z`;>`bz`M@{pYozAk{Bf=qVP7g*%5-xCGWKNPF-NaM3_ggOhZj_%s*O^u5_ zA~z^PR+v$TMt{lut}O`H)?5ZSwfIYDzDt<|TQG>K>j7wrnE$XgJ}xz!tkxy(e&>; zI%2|S>=mGC=;-K#gTubIf|iMtlqb{n`jouZu@JQt0T1tigWg!khgHGGHr>wykJEqa zW!CIL1r@jKHL>&L;*@-F-?@^>pzMKe_y`yakCH00>54jne11=> z<)3<8ue+Jz#4PxL9C~u0R7sltX+xbK|;dZpg=MoE7M*) z51w74?SUxTA8_io0^;y>)odO$DU~P|VPG~`Bjx|ri1U1e^Z7p?j6jCgjjS0dq>lc2 zbH2Md?|!>qBfjd=(Fg|9Fse3BIT)d< z1;(bCGj&Kh90KL5lUMK8u)p*Rw0D6vMMucMzoJBl2<69_@dcnVzk=nMPCJL%;!o0MP?P)g!2l^P+d5enxW zBGCim&lVzx1`+3kMMo1XPsdF{UtUbHW58ZV+rH66|1g=gDkNdhvanszv8Sg>^P->dAnw>k={|hj% zRv(D7(fXq42$A|u6#cU$a0^0^lfNz|6bJ&-e&$DoQ`3L@vRMmgshFYgerZ1Gp)O?w zWc*7=(c#wa9;jzrNIKdM3jVgR=Zy=cC`{ic;){?`9m~H_?=)x()HC^?9|G?hrkyn{#E1JRoYQaMg# z8u!5|m-S0KoP!zQAf2n#TI>U9m$6&$9n4Y>a;A^bbvhUQ9l(K8U5a+i2m3D|i0pvT zdGohGD!U{QAznls4CQ=BG{Z0-!+0+lmY1rfX~|u ziPDH0=?-m z057(I&pBM2fiY-niCgLn?kd7zc*at=d;@&9uksQp|G>9=(IKw~)2v+J3?k?^zmwxK z4N6`)xZurLjONQ+z9s!orv4vn$P)5AY@`>97lWq{^gE#bhjn6vAXp+wkZk@%pFuV?MO7CRDx1OC_D?G7Fn%-8-kDj%XSXefjpk4-hp7}q z|J8#Z2m3al$h5S+GY!ZHCXP=PY1CKr_HuyMVE^+~-$lS*Im=)sNAIIsHhl%ATpXDK z^L|2E!+xD||GVsM&Hpy!AS}p+Om+ptyh_5w_Es0d486(!y#q+qG{hOODylf<`#&JL z@r_r8kZ=X;TfFr@U2!}m8ucTyy8ifkx<)#`_9D=;?3?dSdM`FXWnwvik$X`6YR(%^ zH0l}0LES1|;&cBy$Uueu)yGSah+JmPYg5OWe2mGmtQOVf<>e8qCP;yTw5Dbt(9-(q5(kc>NU_fsUCfWY1Vol$a$R`X2S z0|=tks(RirViU4~zp!%Q**ZO||4-J@4>O`HrOYKg3&-u zAd~R?rR%0*+YYV~T>wn1;4*}Ml@~Eo#qVv8X{s>|)8aud)C8=wFG~(azr3)KD3slx z#=Jp~#9L18OV`1HFJY8!1f#@QJsw<9h6(?Nk8dDZ3r;fv3(73d&=RM==J zP(eTl6eNKJ1wHd2{P3wm1f+2!T$b-9YGQ_$lAf6w02gy!UGl3n*cy*K0b|V^G4-iC zpO5QcLtMNC`Y2Zs^CbLa^t{+o|K+C+uwPUbUgZv9{vQb6gB&6DaM5ESC|Dd0nlCsc zi=^#YAXzyo-|I*`AGyIau4Xh+;VJnj@Pf~gXmbEHty3_#>SaeOUCY()o42!I80JcM zaVRdU+G#%^o%O|i+AIHKCfEx`#q>Y40I8ZLj>9JTvAo9rt-=?win^Hz`zIIxISQBw zgH@Oj;KxdVRaD?WqCxhx4q)#dgWSOu{P$hF#uxm#TPW|Jmq$D=%s(b*vlx%GukV8%Fw#05C3tiCEBM{H`pSME#sInL zQcVtJVTb=7AM_Fgs{CyWf1dM?Cfj5X-Ug zAt**%gne3pQ|M(OF>?=qq%%Mdm1?FMj$n+WGz`*43SgJ5%m2f6 z;CzP)ahF$$CFB3M%y&4D{pReb@CcZ;oEZ`*Z{9)qwOkx7F5&_<_dbhg`9iacy1cMp zARZ77xdhbqcHR|=`V6* zw*ZisUxQliw9B$DmWC$a*p?$7fjXjbIAloD0)TDv*MQm7-*`TuzHf$3iqUIl}R=yl~n@SsS9JJ7aLHTmZViX3X`VfW0dHr}zlmdz?cWAIm^}`JyiU*=ip+B390*6!&*@ z{qzkaWvWJITSIktJEIHelvTI)KoLllWB?zPW9XF&kmcD&>;4`P4eE*KG0)He+v>?w zLf;|l4oDg?`M-6)_Jyq5q)tHvvTkzNnhO#bFVVOmItdu>)&ki(0gq0Fy=_P< zMio{IOrU`PvYJPr-4j&%2bm*Al}22m%WyDl|LKU$0TCFh?ILiAi7Pec2||Os0GgS( zIOGMepbI}RiYp&hv;LP?rUQ732J=8I%mpIyuqz%;z|{oC8w}k~;0tAtkvt=Dn5i;W zIs;mZQykzxDE@_2!N7~R)&0H+9N^{&;1N&ADt1drPy>MNy~?-vo?aC}glJqyc$wJ* z`JY{YadDsvxsyTpaK{Y{n=2g#1yv`AYDO*C`x^8bvf*NwAXvnhRH?2B7$q!ngAxy{ z8=*_o<|%Md!7_tGK-gyd3ly;N^1;eEu|Uo?THr*xqNcnb^hxxL7hYiL?sV`{=S3is z+l?)xp724J>$BB82%-%UL63YNu+Hs_ysuBOMGu!#(fzsYzm)dIYlW96)^HRIdEA6d z;#MjKX~4x{!6|?KrRougH4Oi{8Na9Ji$Q>h9KCTKKk8@bVpPwws;3|8LjFIv9|Gb3 z0W3=BL_wly!%;8_s2MT?d;yFqZvwiYj=k}8mk_O~+K5db6z(HnV)0k1#Q)O*h!z{J z`tW4A5lD)!${h8E2F8GW+wcPdH+iYx$QrvvbEW&A{t9s=K|aW1ATbX_9j90z#X%D{hE0WUP-SwTvdEfW@H#5#$ z*F5)q?tS)NYwfivKFxu}_Z44Yqc`=W4}j_)#$K~MGUsiev!4cTYeuTg<&N>dbM_7( z6Kp2}9^0DEAPRL66o8{2fc9Agm+0XEK*$yWkzhYBaXDjYId}PV4gUNGNX_$h-yA;K z9L?EVc?*!u$^l~lMz;d%#6DBHlBJzxTGDsmlNY=9z1c`#1fiVEf52cm4~WxNV6ixV zQuX3f(y-H2(P}L)<~;&N`8A$7V8wW9m>??*yz5+gUGRV496bibn~XjGyj=8}cO+zl zrwqtsS0w_}mi-;llgGS6ZEPc`zurjX9tm$p_@>{1s=d1J6z$y#>;UiXdP$wnNd%ns zN6nFN5GZ}mwT{43J*I-LAUnS31opWfpn&;XK&e##f-A;3=F>lh601I zdc$vrFRDY@;z7ccO1`Hlg@733&70!?X<@1GAudOgcduC@ z>`eaqI0Fmi!Qn|ZsGfUGbQ(|0(;IaGlCGO9!KPs;D7v9h_JzC6tzpQ>!>{{E(_e>^ zdqoV@0$U?)y0D?{nxO-L#7Kb&-CcFI+>sJ+rVU_Nu>S?#n7lkZ`wK)F)Ff(Ti@7aI z=hhQM;u_Yv3TpUmsDsgRg1RyxWgRs8dm>SRf|!Mr(`lj*Aydvj+g9tu8;m~2-?!VT z^%tCl8fFB3J~LmuNv2NQ2A2Z{Ti=D539+f^v77E8E5&S?IO)>J`BkFN;|Z4Ds){cSd?%QgSi*%UiSk~cr`2vK7K?;P(rz@~(T zp)u%h4?(Zv+4mr#rNm_UUP=D<&w7OBt9fS$;k}C5ep~+@vc4{o8zDKzj{}f8lqA&o z&o95c;>P4AimlDKWK_@YSNnbduxV*3Wg=*sl&dbhL&u%vo~FOLHgmZ@`#V*|ixE|v z>NylK6KKvlAx*qJ^%8dB*Z1)BwX&+Tb|fn=LT+#sfswk54F2s>!d74WL9{i;~lU$wmX%NbYDuDYh z)CWEQ&!%Q^690h1Y_4{XKG({@Z?X)Q+Dgy_`5|}0q_NiDV+dexA61ucGP^G zbmn;YloGJ~ZtMM$#KrP|fTfsGE-+hMTtU?NSq&)+-THoVgP+V60~6d!n0^D!mF3`a z_zAV#cnmiz&360K14k!1z8y#){7Tkely7yfW1wo@U{CY8g_V=urdGz5N2%tIHMa;S zrPXY{7L(2-7p%C^Ti{KMQk*Ce_%0>Oi~$?5()jz7MW=P_6SqIt9qFs$j@UCOVjXxB zgt_Q8#P-!F9Fsh#Mjtn2uUB`Gr_dyRXEah$>cVV_)@(B#*UUgdnFZSKSkZ&$IXq~t zRq)?L@EiHrr2`ywm$#WP!FnDln$IY_gsK!XDvEV>!S`EIURz13jUe1QC#XLsoDiIJ zluk;6RyZAAe&n;1{D~eS$zTr!D1|+eA-B`xYSuf|79fmR1^))My zct$8H<1@R~J3K5OHSgL-Zh1-_mG5fe6i-b;QOJLrObu@YQ7AgGE^48Ur;Y`1Z@*2r zXs^$RDeuY=lVg#E4C1@qiqQshWE8AK)Zip)YSAKCOO1ioVl>z!jAxhcKnLw0+m(MR zXwwgI1`&>zb=1!sCR?jpeMC{k!$OYHZ_K_xy=X;?B7gqrb&NfGhlL}Vh~8;Y1ZN?^ zA|7!W(eJA$PdX@%Rwv=}gpEIG`(d^S3bi`@xX?9?W0Q!r`Pg&+(Yfv01QiY&_Ssm1 zJU?Ecx|^|}8SkM(vHU(MZXb^om6zCB#3GMPyI0WTBP*EClw)HVaen`>$|G+Ao%8#!-((Cm6Z#W71n zhutJDyZ4gVy&J6ote@JUqKw$pF9`{ECIIgB6nNMDkR`;IwNQyg2g$)Z$lPnSc}X zMqiMEybb8VIIdZY?itEvPE~mHRGDt(3JTl1PITwp$xrH-i(FPOjRFu2uxRj2+(-Dh z+UlEF8;)xc`ffp^mVSoCI5gxd%aF>vn^BFzFc*;NP&1H_RG_cq{csl{nWYNHU_|h^ zi%Wm~XRWmYHto~D_Ds=4EIkJ~L#P<7X`hTF6*{2RkVE^1JLFG3|Md-G5L~g3_i=qf z&gO<0%uaK4%!tEQicBdhEh}fy$wn_o+33Zy&-uZFkWE4Xoi&Q1Km<&%1mhuCN4!o{ zW&po9k;33BD5dlcm~rz$&Y+(+USzt?$5jd-#*omf@@K?>^#b37@T|W4VwWg(+&WHV zLVSsIfD|SKF~F36=PYV()e+BlSHop#LCOj-EXlg@E)+v7AzV-DoRsVdO#Ij|;LvhZ~>*NPijKk((w#?EBl zuL54p>>Rrx&dix~CMC61H$smp;99BGsjFj7o( zXN2p9gG&PUaY0x#+ut01Rq1Mq9M|@E1BdUO8rdF37Fa~2Q&z%;@eJt~!>@C_dvR6v zc`#+4Z6&L3O(e>an0+m>LGqgeAm3wu3~|+$_`Mup4>e3t8{ePn(t*h)K&%O4jbo6E zSC<{5l=Fpjo#1N~XiM{;{@Oxi*BLT@5BcXEx_b`zcQg9SOM86;N)KfvmWQIPxou*V zM%>S7`v?3qMUaI%E@bfVNsP^vguesG)|4S=xeYUO?Gw(@GkDm%*f z5`(5nB1BC?H_R59l`q(Z9ruS1ttu^K6VH%aum!Gttw2S`RSQ&Zl1k&?M$~6_E$Y=cUHw7Z?7u z#Df~@eL<6qKj0B;XCITTHN>phi<8xo3%cYF(V|oXQRerxa>7k>DU`lu4BIW2s9*fM5y}jb z_OTm5%qIF-68_=^{{3hN1d*ot#ANY7@pO4+i-ZJnI9dEa(d7A%0MUNoQ;hxzaEYcC z!vTgFUetA;%^C*QIL$f&h!lY%?6s(+j-+fEWK>G&O+LB*{R#gNum@V1L*hBCXbb`m2=MoaHfA?+vG^Rg^FT_o|J)m0lfEo;_94U5uQ<2f4mYeBjqYM)6C&hGx>N?~MB<;QXpn zVZZ;@v2m;VjNhJw{&`n8;ts0`u30}L3W9A}#!(fjMim@ISTbQO z;2{WCrtG~2{eaHL;k6OOx=m6BqbHtsa{kM{gRZeZU|_Y#lFtQq>g)#WH&|2E?7~&N zP?%tT%(^^%zl7>X2={siJeG%d0wF^ZH=zEnXKZPRTih5dN?BJgH}1Q>qa{tI1*6c4 zf4;%%7rtahtOw?w^t<`oC*3=ObPks1CHis?M6)! z0P5~dGJM36@cYkXHxtRm89=zS8TmiJqWffvr@fv(&|INFCspVZ7c$FYyu)H6=#LGR z=qLJQj9^j3siSmA>Rhx8&%>)!+R-W8i-5xccvgeGd*eYrU~S}H>qUy6#{?mQB#1BO zZ-g=xQwin!h6o`h>oZGSaZCcva%f6J^+nJ> zX^1`H<2h6t!bnJVt0G|vO}u9d_do4M--Q%F{B5YnxhT?&y)tRbtlE!pQb8LkC6*-H zbr16i-CZ$;a8aVW-^q+>?9V5iaHvQHn#A$L=Hy#cq(r|zP^Z?+C^^$BMZAqMbZYLw zHK&@&w`O+jY@_QKSNsog@z~bv3K0Z%LE=QaQyUAc zZfRMNm$(Yf@>b+CjW;wa1}VyLLLHtKBEVTs?;cE{5kib-=9HyTsy2WNcmaninS}ay zdL7%tX?0x29!X0NR0QcEX}>A5wVDBkf{i~VD(N8? zv?Oen8;l)=M)6vkvfRGEMQ1|;GG&0eVLG9l7xX}y+Sth7{kw$T04?%g84^>Dhm~q; z%0x<>xF+$|N$O!QJEd9RJV+qg=q0hBcXDQUZ;3X)bQyIjk!4s zZGUHR9NzFem;_3R7^iIEyAVj+cV5%|iWaCrRH%TBezsh8CRN;m# zH8)rC%SRo8S6DgC9ILTJqk&NVEG+gok^0Cv5R6_?|J+(80A9&PnYd^b-jU5|55S(u zFZ=d`iPn8U%N{Ru1+YZy;e%^Y=YmKNKyC_-uzvDH*t*OX_S{_`l>Va0AbYbn-{}0e zRgUx>QZUM=cJ%b{v>Lh;19k^4EHj3f<{b^r`H)ib2tEVEJCTFBViDi1B?tjJ7Iz z_de_7*+fG5!iV;3>{|0AW(@n|Soz%td2&(n%p|v8tv}y0w4~rq+Xi^|j>#$E7;m6U zc4Y9s18=?N^>EiDj|~-U^Dl|>%X#My^7cP<&4yV-Ewxj$t$U9WUe|Fu5U;@xLqo)M zSgJDd1C!z;XKFt&-Gy%Db8Vf*_)Ffg+Ap>?_qox{e>L#<&{RfrU<>r4?=PF}2--pk z#$@M1`IBT3YXdIPGdGFZoX4<9OaOKxYT1%0JFs3;9F6rx!9XT#mJ6;lp%SD^4)C?& zyPG@2GMB#&LVDLhc%wPg;bqMeJX3$&qwc}tU6^lW?VtT?4$M9%`Jz&=gGQrNaSs-aAw zcQ5NNlcTV4_p<@)N;^dyQwY(Di3PI2b3Ng!WRHJMOB>^RI#L`>I95^xIcsfjo#F<< zwEtCsL+3yM?De^%Ep;Y`!6HnS!Bhc$zsR}yX)i|{weqb1G z4R7d9y7|0EY|5Q`Gx)}oWQ6d;ope+>-kIDKk9n=J)*455(mRIYdRo<($ROJ80E~XT zR?)1guuGX3uAbwV*Xasvdz8Yj7)E2 zHLcFDo`-XP0`;Y!iC`=Ty52q@s=r0E<3-K$Xl01vVGO~G%a<&+O+v$Kb0;)iZoXO8 zF^O7Yu4FPD_|Y?crW$ZDL$^oA^?KXEQWxr`6}8JOM) zId}vps%<0^47si?`%p3m$|-LVC*zL!1U7IV0x*8@rJnIdCP#x&-FW2*C$K>-(D-1ZskMeKJd&Fa+v3B;q%!(iQ+H%7ft{LG=u&zqQ4JWJ=Jh1jvy~3~Q{(&alr+fWN?A?C7#Znh}bYOH|comCNj| z`C9GUHpTTMA46nr{qq5CTG;Am;k50EHv>!NkHhZW&J&N@jQxx3VQH>JhxhDcP_q4< zlUUJzawBl5ut6$V3cL%ZivRm332<-EsR%~+;rPailI$vi@ z6i0nBZ3u;~-sp!{Jf2nvWAVAk&PzdP{S6)+`*Q`Cu*#1BXM)8RTw^mK2hzyg5xI&$;YsE9Z6gshw8SaeZPt+~*rjH>w zn!mD$ka*&JcKgwHBY(8IIXFV@Z|PF8;;pfi;Dzj?9XgJ5*f`4zhEbR&$G>0w_u`!{ z0i@p(Qg*eqwZs`4I1sG*3#E;Eu;1q;mLp+e3$~qFY1gLGH1NBGRP_rUO$0{ zTNum7mq;x$!^T@H=2S4=5$N?QDWjp8SiR;FqiWfLT&1F9*h3N8wxl?3V|t1HlxuYl zgw{}*Bw%-<{){+x4wDmzTZy+$L9`kUMoun4g73!M2hS7!JC+XwX z)uj9jph-MY0&pQ0z09n9 zY5#ws8)b30P2x`w{Q*k(gFx^U9WbEc-`dbb@*tt^%7$R>O1$u8)mY1GwCq z-t1Trc`uUaGz;GZNU7W2D-m-s#t@e$V|iF>3W;6)a~WBW995%fuu}<9<(^ed(r5N4nL?pA6!+ zr3J4xLYmRT*F@uEHFAiO*xyhl|Hw6h<^^1Z6;^>V zRJLx27MOomhQ5;BugZa+iKA@zW>Pg*RH$08pYRh3zj+rVT?5x_9P#91EH$kvZnFlJ zx)oez-&Tx{zxUvwr51)7r7XVmIo%p$W+M@8)e4z2!x5nb94DZKJ4WG_0sNw)>LlIT z5{sg$3O@{5?_N>7IO;H=2j_1f(kle9Eo^DdASF!7KsuhDrUL{GZO|A={nkvXsFBVH zce{%arUzRS@F*lHF<1h6;U{8SH6i~F56!!8f3^2U_)My4kKloNGC+i!;p32Ibuu$t z1)vc^{O<622d?AYeG^NoweFaz-kRZiiQQTMTFR6O*s|SxGx@*$#k0U)fdSs~prsWK z)BaEZ9!XCu_ym6oZg@p2XUJL85F<@}RmY}_OmdYyJS8c+W&c9gkq`SUMYlqKWiSg_ zk;|ailr_PeD)}D8CQ1q%7c|w>PK?{5k3AUF@9d5$vu+})`q4t zbQB4@Eu*X)$$X=^%KVHDZ|w@O2(JofAdq~J?xyt3^3u6^gJ4<$uec)zEqTP6X=VU~ zf+z1+(`{`7Lf*Kc+&5+VL*d>mU%3deLO@kzj9vx)|34aJ{~e8x_=2c^M*{_VG$Kd0 z2-=P@QX=V;DoLH1sLfN|0x^C?gDneO96Tzupj!k-Zt+n=yx4fNLqvr+PJ1*JHz^|` zSi~n;bEQkRL@#3^?*yPioUx2Yh@#>OC?(}B>v~-No8#J*t;i4k{dR`>No~7e3y(65 z?f4xH9BX+8n0NX^G8pl4k|hx{74t%xyRSR+a#g{<%<)+kCGNhNBIA%cbR@ZuL;|~y zp{tND{$SyI zjf>pv_g<-c>b*G2t|RYyUKRYSztA?n3x{(|5$Lk6i9TP0zpqZkMsD$kW>Pt6p_m$H zDsrzHWhjw0o^7O?wp^|Rd`vca=6~FY4=f?92LPkPhLYx!ko+HY;>f&!WVo3VaIfAQ$R9b=`{@0 zc}mBm0HU?Wf)uldU&ZdmSMo0+={;t=?#o9y{ut+>0PwVSdQNs!p4h!5_GOnRNIdzuaC9Y5TZ}4euH?3WrE`JkF@(2 zJHPwLIfhM>J*<{$tW~D#jGie_cQi@MrpkDTTqi*nQnP(xQ0&*J+KsSZN5P1!#qj8- zG_lo%>Bp(!njLTSTy$07v<)WR1f!VMfY>-rQgmfb0c)X}SU~(GF13CGF!B_R@FuKC z50cYgBw6nir7TGkuUYHU7k~Z0>|!Jqnki{xaWAP}`*%jV8$)~zyTlF1U7&R4b6Q2S z(Qxi;I-&GYvd#CnjvMuu5_aZFi_V&1I+Nh{8>4W_*S~8Ny^3ml>G*$&zJ5Q*FpoB% zODP#r|7iul2Gw1eQ2?O4`RyhO40=43pUeRkS1y9dO$`NHr>WJBidDgr9#@BMO)1Jp zC%biY3icB@-DTN-buHTn5=4dN2VjVvKh2WnFDqVfKh-TY`MdcTDfD0}vd9j}LdITb zgY^I-QWplw6i!T5g$5imFdwQx=!fAX|cZm)0MGNk`JpV-_f^Kd+Re`b*D< zp%*JlJLUl(y!&%0rjnAox*`czit4J+NKOGPUjeJ2rCW!R~u@wp+=fvSTY6uY1qA z)Rs4V_lCK0$hNF&&!l}7Da(FwPdx7q|DnOleX!DLu{yggH(dg&?TN2eyNp#8h2y_N zbjOCcJ%un6J0Qpfg^Vv^4jbr8{8%Itt^l0(${`XLD^`bwt z(db#3azJMlk-~g%@;yLnMP}FICdq`rsIb8NDHYLeFfYlNQ^n$^b4`z@G<+2_X)zd_ zC@|{ed=X$|?92M(_WkhytX3SJ<^qk_1IRGaV}t&N^u=#=8*+X}sqSu*iic|4`SHcOzGquL0YNwb5y> zj4+D2Wi!9w8?a)rY?bD#@*4Ad6z+b%{STFN_CTS6RAi(JR@%DG1nvpYrEN)eo}0;I zgR-hjH7fbwW4WT#gH@t(>JfklTCU$T3?)0`xc|QC$ zw8IvjconB9>@2kK8yJ8-zMS7cz4h=#?BlOH6wP|-hK z-eJJ@iYOJMpwf~d=gC=_72$9+A&1vR5&09E0Ko-74d1Eef_Iug>Q~(7<_9q zk{LA^5`?p{AfR4YGy$1d&oKPt32OfXIDv4>2FUwkd>8GTIdXTJQ$*`qd)DO%%nI znv8Y6q-}3~l4^5*KVVj1KkUno=PQ$9kZXTR3)yX3je7o9=sKGv+GQIB3URKGIr!s?v_(2`*E0<_9Je6V@>&6~4#&NE> zlYK)fwncmxs7q?h(zKqIUC1tCC?#^2dC49#tVCwg=|bsN^* zxNQu6C6|RI<98sUc3W?9U30LKB&J#(m%-X#NSae-rIJ9F8OD#{^O65HKzZeE59;Xt z>gCE28XD`AThcn-X@Coy5CS*B*)#DUbb);r_W-xR1lo}>QL0q=cnY=gzfAx}E(e?F z>WJ-`-%_NqBntz}*BE{4q=xpu>PFFQ?Q26v$(Y{&V>nn}ZG)=tzBVE|fhqt1=A=VH*|`g4vh|$1;-S116Tv2aVHbu1?UZNEMV@Uq5pCU*ugq zA=)AMTsQIFfMmY9e!7#P8}Io-xo9Fa1?0pCnC=^Iy~&Qg)%1XF=pyF3{UGfhd0S(v5g`O8~NI3+j?PM?!7bk_7qnB+|o zKa6Utla;m=6Ig|NzgX6~?+ae@2C?NHc>)fqc;+_kx>@9r>|8 zeKm@G;T>51P$enJGuoBCtFbIDL-5pH=Hj_YN|*FrwYUqG zb39tQv3K8}00;7D+5<^4GXVWS0&jb)A}GIj*|t z4a0U&sCX)l%y#iB>(PKW3-hy9=e5&Z=IvO-TkAxx_Oq$qM>aW^TN0rk++SVJy?oJb zLEds1N+(>IeBS~zCjb(>fC=Y3foA@N7* z=d|8+k4N}*_gD4LM*4YRVH@n&Dql6XXy%zP-@!z4V->=u|KZE{U?~c#J2S1uo^1R5 zy{Ap#i++wy&3O&RlXSO!=qysEBNxd=ONjf3VCw3Dnnfw9u`I(hk9W`et(8+PFfXQ1 zRc|*_ zsUS)`qn@LPXkyj@wcO%7lJ*#1SICEIC0ayv(ZxR^Y5AA}&9n8drN2GhIjohtc8E;FhZP#&sYsW;>lZ_>p^!Ej)1VgX&6)0a|LAuj_jWR%ER(ur z>(NWkD_c@~O*{?z+Eg^C?Qc_N+L&+JSD|{gKUFr0e6{=|1C@%NZ$(nr_wRUp@AU57 zAFG;+cD8dGOM1gG3Y=xg8k|kqGZ>bB2Mh1dM|>s;ziC)>o7e14Q}|`ws8JZ|-#0xp zfyYVPV)nm z;{kDkKc0hSrP!~eeBU)`!si!ij5SPu@W+fwT*7>Atn8%gbHTH1U(EIR>)kkEZ`#wo z^l;XV<}ot6p!(5xXZQ?p{QL7Dl-hbz2^q05;qG;j;L#tuTDOaFzmmTjgHUmj1k6v)1*^AO5&5<{&_3K8B8!y1&IYb+ujmL-M zh-asn?*uUyc;j=-gD)oi1OfRxI5AZ9aZ7okv6u}^abPEd3{DE7??%t3X9tqoW+9bh zKsYZb?~d0->Wc1nk#KAd_ek!#50uKKAb2u9KL7l_7V zu;rJAZv=g>?%4^@3uDlgK1?GcJ3!tB4%?D41Wy~e$MTh_Px6mS4dGI1Xb}i@o@2Ek zDZ~(IF)^P5!8lAtzeGwsxN`?Q3ywggyE4> zt1mveX2eki-3Fv3P<%|B6L zIIndB_ej<7!>#TplmjtIz`O|zTN%A3b7`MR94z;KEh2r?}E79vl6357hKQz+BEvBRqMe5N77u` zZYPmYmY~*(nYi3nG^=i5Q^2*wc&E^?<@eW@LkO2bjXsXMlSiJnI;U^s>$;$)kjlYF zdC!&S>kXc&7d8WJ#LUW5GWDSrrT~>c#beGV4p=S1lWjeNDVX3X7z);F&>ejw+q9VF zP$Dto4l>bC`K}tIJ85cOWFqnzR`=Q#X+Z*wqeSRG6|FGjKKicEUdet`7iyxx{SF~- zi>;rO&aN#g0ROazYRlRJQ5K<}OPrzsVE}tQD0qvxpTJfQslLZEhzR9ZwNZmZCcV0# z={Nzb<^50O#@Kt#>9AgZO#`y-zCi%8Dkp@RZ@7?^-cn5m{Q^ZjubNf$UTUyEVqEG1 zLJpt#)2*}2v=D+Gh_i(?cL+up*SX!}l>u++GSwRK_8S4XmKR@iM^ZP0-$mcR=pjm> zz>1hXj(R^Brl?uXVH64^rs54>nrBg_@B`ZL;IkfQmL&f6jNw*s{ze^0;8-Zd{8MR= z>-PLUJWjNVGB)R&antEv7>^b`J+SbV@Q)9F#4145UHgn$FMP>D^0;o5 z1>A~w&o)kY%lov>^P+A@%s0MJs;{-ro8=D_A!wLtFy^?Bk&nMKoOg1%A^&vX%1A^A zld~O#B(6w7T4Zpg8V`RuFL3JEIHcwAXIWvVg!rk5m_tJD%E+JO!09-M-_R+PVe-SN zc0r^KE48j_S*_ReacN*B71m12*Q1&;xWcI8iES_c(V^CL4SI|%qUP;Xn zTH~kJOdf%ycbc@IZRrkFajaNoGD|o>-()K|;S58LJQa@vnZ^P=0>_}sZXBCGNWGWu z#*WssM|CdkP~6}z0$j|`gqTeD^PvfA-iF^VzB%hVmhepI+2+tkM1L0(PUkZ!N$4+*2WH;~3O5Fbz9 zX-C_>ovK%BBfA~*N1D(`Qdk{Da%#jjv!!jc&}mt@k#l`4*7b7{IWV9%rL_%zxJ8_L z=I?^>!(#*X=9Ol1{q|(w(fE?;Y18oDc6WG-wy`C_&PGaE@O$+#f7DTMgR^@IK$5mL zw398vesj2@+K_Iq735TGeoWU%R43!r=qF!5nu!v))wEQp-uN{dz9656VB7R?(nGXc z{hOcQ>dp7d{P<}_ol((S@45Oqclrbmp%-tT3~f6lZnmaQ^#(Ei;L# z0hu2!PU(vK@>_@*!rWC%pIs!EK`Qf6)vU*v*3BzxqA{SJ+&AJ`^PEe#V$x+CJKq{H z{PdE~7I{;%-k7~8Ue>=GrP}sP^0KO8|05UJGOR$qoZ5b^L<5{^D4}*WC&P{DgAY7s zmG-g!;FF)U;6Nz{^sMO+#DRv2{{7W4o*D8ftQtKw95e>pcA4q{Z0yCUO0FAY3qL|C z**`hLOGI)Hc%yoocQK7D<=5ArjoxUXyHeOVaYK!FY!Wlt!=yT}{l{r+aky|od{{+x zj~g-Y#6Qu8VciS%UIf#nKrQkP$>zd1)H8v%orT(dlTSLk@w%Og7f}8;4nPXAZ3=uS zI>AOsN9GU#L5Kw~USa1@WNhb9kO({e(65vf&z;2-!Qe#M=`Yx+B#x&k7=I$;VW&=o zLJglz4lK0uYD$}G_SqW$;_494<<+frT;Ki%yNY|ey++^=vPc=Z%~QFq{T9x0>71#)%6{ar`-BEtKk1-p@l{5#H5!WjbVDoox>(s26>vDsi*dse1h|DBwR4tw(Nq z?~!>X^k=(RM7#iFue~tvfONLS{W)(bDZ>+4k&>J_L?3nlW#p@)muRq!a4J_Cz5m@< zm%{e)K@5NXKsp6%noO)rpS{>f>&f!{{Qjo83a>Z*#~s)(CqiR76lnVSL_{MCai?;v(gvA67+;o z9+d9E!VG4MS26NzlqH8U7F~}$bJ1|dZ0JI3_3-8eriFtmHlns)-FRh`L zO`hn)+&}#gf(Uehu>1fGRTU@LWO>PZi+q~noP)Iq*5{ea(>DZ)$7i1V4;T2CBE%A8 zHF1@m2Xyvu#Q5zVU&+fS&zdYK!s%O)-P#0}e0W$5=lXP-{Yw`j2!O5>EDj?;j_-Ti zpZTK^va1#p+pw`grv;!-U-==%)aj5gZ+7r4--pUia0xJy*vWE9n&TabB(Jh@#vIwP z&iK{eHHO&H=LL^_%7?`Ajs|WIGbg;4kP<5@7nzMcMNVYgDJavT2BodK>9FhGpPC7A>jE$4FGYmX=ov8jnCm`< z@9WF|#!x?8{GF`X1~#(a+9e)U`BSwE@_=CxcY+AzhK7lxismutz#rl0)W5o#R zVp;UZ4f~L^FLOa(-yM6tV&RSR8M*P3r|meMYLm`+J3PJr#^W4W`6r{3K6e=AXVl7a zH;)eb6LHwH$M@;%_VvEvUh{`CWx1_{FB?Mi5#G3;sJOO4+cSSZBBe^Sx!I>e=DN__ z3$TbQAcd1v>JN)4x}g%`?*O%L5-@p}fJE=Z7L?V{&iWK4%o8EK-0^SC%#M)d?Qv5@o{`Kofjk14;FYxY7-jy(ZtysD3S$Br30KizqM zU%c`CS6rdwT?_Q&0clU5>~VW?t>`->cp(IT^>G?hmGMb)gP95Ot&O*u*?mak`E?dO zsCpE0M%j{PEjM*;m7&`SpeHlQm+jvTJoI z7>z=mFIp-%f3L4mbsv8{)HuzV_Gh0sf_h2(Ihgi1O%IkQ911+>2!vmo(yDzuRtj89 z^(CA-z@E$b&ey-tJzAa0bF{vYS?Ct_Y4;exriNxv@NG1EO9XIjQgb*(eR5@`eMVV4 zmC=r=^zPO--aNMdf+{~a@7>Sq)nJyo8=H}=jjFjvliQyLF9vX*^ObM$_(L`$C7OUB z+O$kuXU(Xd@R@{irIgiVIUZ01-*n1sEhJ3@i6M1Y`L-lcd zna@LErq+gWzF8TrC3ik>3M=%Y?Ty%6`vdXh-KgvNWe~pf+7O2%FPy`{{RdkPmD6?2 zSca#PWZZr~x3b_*ZG7(M<()X+=033g8GP$pvdN{s;aKu_n4w#r=4-^Oby`eRr196-c`@>HFbZo#@I`e@7FESoNwr%9P5-m8+8# zY{u)%45Y7-+_jdQA0}|kpmO9G452pLtFv)0g^)4iBcTU}xeC_>^SjkM1)5 zj1$_-XzE0x&2*`aw&;!zE4-CNPFC|OEJxv7&Wd|NXgyc#E6_~sQ$gs}!_^RV0@~6D z^c_o>N2GuqU`%RRbmL;+@ZoZw+5DT9|N0H^YGB$FMSdwB&%|+xX3EejUi!^_%yrKS*8GzAuDtBKh_t6aB%mBc$3q>>ra+W zl|HcIJ@8mS*$kxO%y0gAl$OwUq-v6+shR?*XUxex^Tx*i+lQy28pgVubYnQ%z#AJg zA{Szt_7^ibkSh3^XwhEkYv{wkm8R^6b-KOf7PCjB5hhux@RzbJJHTDb>-0vACwMm{ zODh3^vfkWoE&h^uD2U0j`R;s&Rs&}fBhT_nG%P$~ljSjansQQGZ?#R3jsHyEeTOJ; zw$8A@W=`2yWvhcTzx?R%%8vKzo0RUBW}2Kcmzr1JK`_skLY(~F)fCN2fya^;+sOV0eQ_zf-TumIQjF^*g0s$yVQR>X##+m4 zf1HUrMhgvfXQqNgjQE25rD{0L5Fcdg`N`;9cEm>kA8D~ylXWwbb05&8D8U9-CMaSY zv?4Z(_-wFYAB7rSf#pJvuUeNHMV3%DQb?LAFg&D-mgqv-|9SHqV^@kevrCadw77Y} z!{M4|1)f@!pV{9P+pL57P_9LC~vtuD;?c2U+BU>5D@mH56|G;e7au;bLt+h4P=7pQ6s&x|m{(vq?EiN3_ z3>RYoScpO`I+@Urk3VQ>n&SQVph#(E&fr?3-fAed2FVioYcs=-1DnRAUBFAb-cTar zp-)nrMF&e@h1qwpvc`NBj#6#t{NoS#n)`smLzedG!%tI+qwm1`i%KH0+l_v%>pXK0 z&13WMIl7~dt*k5YV$eHCB8t1JKip3LO)(mYt=Gv3FrWHvk(3fld;bF0sL&`sqwr=Q|)_jdXGFV#9ppth>S_@WioeLSaj`U68lUNG>D%F`O}aCB9=ZHZ33m`+>roJm<4p)1BmLiZZF`Tor}7Hh0P(lqCV+pl_imxY{A{#~^G`ytz0Mpj1K->`%%50nFa3cuP@Zw!a$lY%J} z4?&hDQ8eIlA54G$%=Y?aK6|&H;<65gO}N75U9d_Yq(=Kg*0WVJN^PgbV}_jCvxWu^ zk%sT{C=?a2y1Zu{e6N(>4&O5g!=YoMm|tPw|CQYx>F;w}E?@?_ESK&Lq=eyM-@gGu zb7+bJH`T~AncU{xc_@^~QZ+Ysx@06~pKeV94n*TKV@_Ao$+ZFm^YUPVHMqr*VhgM3 zWLRW$#_~ARl46oMR1z@!$gBo`&J5lDTF^Mh&BB;gC;C_VO+?IVZu+EAI3;Lq4gW{Y zT1VS)q$~BHdVUCO=NQOyir8$isXtS)@&cQZEg!eQR&xVQ`BEz-rW^IX4fBTn3z`Jo z&&;z8^wdB1u&z&68_cI7)&}nBPmM#bj502ugL>T%`}d~X=A0Lbw8THS6K#yKZK@Yx z8nmO)xy>rO_E;(!_1Pirn5#dZlSBdWR7`RGL{VrxKwo_H@(6%O50^88@O)PskPsl~RKWXW{p>=jYFhJ|#Gps6Sw{>T6JLFW8&1d{25g@(s= zw&_Wbb}{Pl&eGa#5b$Ge&J_cX|0T;$#2(h}oUbcVg9>qybsjSPw%oZ0Vm|d*yQXFo z(Tv!G5-Rep3lhPcV*#ZsY5JN;#9Zq;hysY&)C}0l66Fr#%KKc3&VY#?NHBeLhd_TZ zxi3vSkcBe8=-K)x!C^3(#ic>Fo$^0bP=_c_&!_)v?mz8vseOFvp{HtnLMTo0fLhjf zgo!1#=GFZk;mzin3gogV=i=H2?>K)X>dZ6}#7siwI9_pzc|`T-S3 zam-e`TennUZa2#>YZ^H&Av+nrN3_ZH|67C>5P^eGJ{_6oy2qNpR}0*)Ot(3AVFka7 zQ8aqpEt0`~K}LKx^b zZPzG*Ag(M){a~!Sanp@3X-RevN;G??s^KJ|DbZ91y$O;G?mhx@li$X_9iXxd9}aMZ zeVM)b(v3aGC&lWyvkiK;zUUd*U+~6&!qtY{B!nx^hBAfMbm`PV#|KGuX28>T1O#;; z$5oMPWqDr>rMUZ|)&b|lx?_1w)(4CyDkkZT0UjRP+{P!8w5nT`9IREL(D3Yy73~0$}+M zehZRLC5l;pIfZXUua8qONnJ- zeOtRSug+~=PLW!U`@uQ9Pbky=7$_q_~jkWGRiw;*P(4hR5C*Wo(G^9CA^JOf; z&vY4}slhiRgTj4%rdo9{u$8@2D|M!qf2G2m@WqZP3~Vej*#E&N*!g8!`}6@ki@+pM znRt`{q%49tY&G*b$rR+s3XbhV3?;3!6r1X$G>Ksl)*ng>dJyg9X1AN~kQevU1tbvg z17d4-ih4Oc*%{;v#Om|c%BBu%cb_Rto|2bcOM}} zN7Rw!u>~)>!~BNej2q(*owd7|Pt9dBz^I zwfcbc69`ugI3SPBhBp{0<0L5nqch1kN^tS0hjC2m7yi5_Z;XFVUX(_9mU+F9KDJ*?7eaj71v^N@xkNDFv^^VTN z7HgY#0LO~T<+C(1G(SdvPttM`Uj^Z#XRC87#Mj{|pU%?Qt>@zFk3F9@9{SChAe=2Z zEt4YzgkWOwmRr<sLG*vrG;{b_Ahk%|p& z1~7T%!>L&!XkO<4z!4v3snu?!>OMyrwd(fAsrOnqTi48O^j5DPh#Wyc$-hF~;B`_1 z3;0$HuX>=P8H960vl;tDQrDRMyNxHbOdk3f~Wx|&H*?lek+C}!qf!`sNYkE zpGcgB+Q9~4@f)M7=yX0N#5+SF8_Q*w08CQT)>Vn!BN-z>;8W8Kn0RIwC0-&s=beaa zkyAMNsLtblforR#=2Z2#YVf1Y@{#b@UUe%hn> zN$|_J^ZB!`0b}XA4}Y!7N0Vh_^3HGJE)eU0v63*!0I4ZzQ24+WU|(2&D#rX5<@yqk zU5pXmze5`Kdv?E&JP&W&Uu^d1^8Pi4rV_{7Z^_YuX5#ei=BeYQe(IXT`3AL7tGs9c zjP9O!0D?uM(m)kAW{mozpM|xZgtpEBTC~ZhGbKMcOLm+WL<42NhYOda}wu}Fr+rW3Ke4naBCGUJqMC$#b&f%}f8FaM3rxf~9jRpmZGqpDCs9brUVuzV)2 z<<2*zU8^rmmcZijdHdjn>-G~|x{lSP=Lz;Aw~t~Y$!sUOu><~k<+Ie2$su-6hpz@p z?oc5AbPN_-Y;=iHRMMhE+GMM|KT2((%knY9^>Y>nvp9jqXm*`@S^RqYWQ3LD3DeCH z4nwBd%#yxfE}8%`6RY`6vGS^l#XsdUg2^R&36)kp==OeVVue_i1$KMCXPj6!2GRki zV!dNfz28vzH;9px6FW`eM&cS3|2s|QSzAX4U7-iVA5PudF7JNB2NSxVc9=F48NnM= zJy;Pc_+$5k9CBSVvV=&Si|>fdC-Tl;G_x}seq*;?qh_}3-`RcPTffyp%)yiK`s90#Sjpuyp7YwQhF>8$`mDMN0eRyuK`5#b6@ z<2^p|jCIinvkPLz(Hv|-*G94>Xb1hgE0T+9>lkwZ(U5o6ZZ5%7q_X?#&saVuA+@=B1qBFhQ{ULC9%4D8k7OF*|ktOWxUbiZ6rGlqQz`rHdv-U)FObskv>X`NmZDhK&Dn)^ZvJo1jFv|wbck%Ya~Wvq&=yh*tz`l7T=Ccb zH2>pJtv#TT33tz*a`=Y}fmbjzEQpYbP?U1HL8oWX9BB^s7sI}FayF89S5PamIB^hS zSQOo>-lNa1OgHQtYFJtfZO}#5#~g7&nsKpyrKOQD;zNzaB>B93d1L^(j+I}&kvFOz zVlUncmly?-H47Bx_O*@KC;19|PGN}MDxyoabPPGvM;>h(bqFpr?Q|A48cs#&^s(-y^qybGy`qKpyKzzV7G5 z3^;LyRQI0w;qI}tX<{3UQQemu_?(&oF-`eM#5}NhX9$%m5$yYLrypX8FObxK?-`lg<4Mql` z+#7{>3CW{{N=JbG6dkz2xq8K6}mD8Dv8Dspt zdj=La5+wo7TL?XFZISnF%+24K2Y6=E7;H}Pkixm?7aaQ{W9<`CxT=?10glFh8n#jc zdVC3c*bi^$-Knczo^0=oUG7Ap5k}COb>6s&RvPNfL(2{epf7`@*3uLYlJf8e>YH^V zk1auQbjCJ$Y#r*pLci>IJnc*Mh?U5EPWRPwR+n|Z{FgMt!ND{*%#UVl@sdE)(9x5rtkl=(`p@2FimUytP4x@VYn zeQfpPECHf!;@`kjq7d{g_V-58PWmiim88);SQZ=ES?HnAno`X?UR{s<5vK1yw8e9K zp>WwHQekEM;ERpjRj4{E+n=ns7Q-A-O@R0YLS^ z^^$t!@33GP%G(T>8PfK-Jww7GyLbY*HxLD~p8%zxI=GlnTL>IR&7=}?v$hA_=J9bD zZ4VYsMS-+YxY9|0)icnS?NAnsh3~6=YYb!F^M7ZoL>H)sW}G>c6v!({ z<1qw`Mxd!W^Wg}JI`ZBGsQB?*KUDk`RMO-_?nIux$k(SqZoowNG*@Vo2$N*PJD`w~LbVgw?zuJ81snZhN!R;e&~B7DsPNn@H*&XL6;)M16y+wzyL2Bggn2F_ zM18ORQj-LFFu@mKv!X>}vp#MOjma-69LeqT4XPGnOR&pdZ%_M*F%X^a1%r~y53??d zB6LaabJcSm;1NL=_rAUU>*labaq86_sj$l(DQ|!pgetWLl^Df;GoPSn`7cQFV2#W@ zr6pvFLa|+(#J7W9ua2S8#F0c((sQ4dvEN|qRUaM(zY8s_y{njzJ4J-Q;T_gLAeUd#e4W+lUFdps{LwxN_|+k5>UcA6n=`4028fbrUG zBR2xmlVN2*!g{4}R?GCZ!6tXSD)ESBSgnjS6Uk zxg2@t6#$*UgFE?g?#XJZ%4p4#oZl5tV?|pU?!H>|ns3_SnBc9l_`}(Jm)eHC&1)qA zrLDb)T4g*wDGP^f3AXltd=8&|r>Q!H^S*Hp#-ilW)MaP|u)kJ$ z<4mVim91V4i61jPWYFRDqjr)9ij7eg3zD$g1q;*i*C9JdVr-h+@)4(?&|jk>^rrhrWRJ! zbm3kDjN_;PQuz}NJMU%`giPemhB_(_J)A+w-&YuNY!|By#Y8C!87iB)+w+~5Jst_H z$wj+Vp#?=QLRp$S*=hZ4#9tlcBB7jBZ(vizwvo}&9c-n18ET1F);G_gT>k><^1Ct? zIWz;7(HX2R!rrv>=_U)BbED?b2*?UwNk&LscLPAiWaIEC&WC=OfNzEff!r7aV`V|o_rw}WZD5o` z9K`eO{o^(T%^;5D)5rd?0i`wu{+{74^FHSi5c_zfF`LXDP>*!=6WnG~PJ=J)*KRe6 zvqPM5`DGZp6loUkhczks6Rt>#V`AtdO!B3DAUPv@36v8tC4&C?TWzNhEnG0=>m?fH z!5f)0(MbgaJV&VDOVtg#%l#2 zuMS7sIA(EV7SK*Z>-+(C{wW3F!7rCi0P5}SMPaE-hPPC+j6$H%LF~sbixTtzzi^wy zB3pmwr_!0b@|>GB6m6X+U`je_4fOKE%9dQQ+tRn09(E$oS(TzX2+=MoWv@Nu3wQ{Q zO-YSf3Wj%m(6>QN4=5(6nqvP&0#)T2Tw|?lq|QU&D#T@=COdG5l7ozgrNLna7NPI`iR zi$(Iqq#01^%CMb+;>u|Qz53r5ThTA*Bbao-$w>`ELqCPV!3~n9=h1$F5>i@O5Eny* z!udv$o7cpqcu@iu@Ndg6fE^}tzqr_&zMJL&%2CIIZ`_BSl>!c(w4BTk-h|irEx_vd z?zFwp{!IR_w1N-GjXH22s}IcezW;{4FX#8GdEG{U+E_IavYx`}sMOxq@lQ>R+o%f*Np5GG*uh?Kg?j}|lUojhZ5Tva z_&LE5RdZO~i8ZuUKIfbx}S3sS^QUW5^QISob#W&zx#Mxm%iwm?3j z6Jh|9dlTXcM~i>7&IEAKH0(v&qJiL7`34IWjYlB$y>(#+_Q=no#ue&~G+FK$@G=hR zU2p)nRSAeDR4Zw~7+q;AWQlF7aNvWJ5Q?xBJ_JmDVG4<; z;^Ll%)tj~UD`G3PW6UEC7dBIzH#>mQz8lp!sXsrJhu2mjJ-WW7nr>byBVB;KT9wz# z;ER1#ma$J2zk2DNgaV!5G>#Fjvjy!Ql@YfBPfMW;d?NVLq=|M1-X-& zyvqdIsIJJfnHS^+hrto53h2d>fHkpmYJEuMsy^blg+anMQ8=!sV2~1s^Exxq#-p%K zro+W4SC6(aiMygFeK#mDKk{$l?h_yZ(XEO6O}%rF=YYo6-}}qoPj=*IBfdU?;kb9g zIP^a+?schYYx@&rduu2A!U6J@VgwN5i6j8MkD-IOpvdGaSW<6)0=^!aGQeCV#f6Y` zGoM^f>X1R$7Z9s68_&Vf14RnHIu@bocWuZXeSe9;gkUT&mr9iV4kd>QdNJJmWyWub zh0})~;x~Ui-2l3x_>v8_(h(0q)U_86A}#<_>&TX%q=LDV#Q#6tbnPmZkq z-L1woIK5fJAG*fzX9!_n=&2w=0*!LbKm-(N;ew{I;NPvp9A@-SxaGhEmE*Jy>>~HR zNQi&AGmcQ||9v0JP2B;bWd`#2tA?30UjY{GKNMia|I&}0Qemg?W2L$1_WzoK`5z#- zln;WiM;^lOmON>OzkY%21F&oJUWZdB^u$V23IPv{U8v#RxS^AqTsl% z1AW8JCk`WOC(MB+Wx39SCma9#l$|TvVaIz+ZS})rxq8}|j{F55O~5ihGHbgRFG4z_ z`tBvPdP`H~=}RjOy<0d!Sx?O~rncPSH6f&|ql{+}GKP1AuhQHAq477ioGqO?cOI~I zqhw*9BY+m5dQw?@zqqRG_=UY~9NWnX&=$CTHqX+1!W>|n9I%Kr?&ucJ{Wm^7pPVYE zN_Z`IzT8r4U9h!a_?w(ZE7a(i&LxA?YfZu{?X(Hmq&MjxE}`Xx;C`H|#r^G`5kd86U6>Pcv-#YLe78AgX|kYh z(g2;JZ$qnDiC4x*L2)pLykvhIu@C@)#tVt|HjeM7OmrU8L8$#&3$AkVC_LfaaRpd4 z@%pfVV=E)62Y_C?Yppgq{dY{64otz5!Z=}eZFHia?ZT#LP;BPERUJDie8dzC`1J@a z!6CWY2OS<9h^FEuxC?&v7s$#jWJwO3kH2NVpgIT%i9{^nT_C2Si&Id>vtFHOs)B3* zzS`-Gc_fAID78*y+uir^!f?t?aw<}h6_(G${H;0ievi<*&^0zo{VhJg7+!|svN+O; z(90)nHQv`$-a2E`zFbHhEO~f#l462zupU=Rc46<&{B{}IMF22|wYP675=^!iKTuG_ z5eov*LK+R~9|`!iH|_iH0?Gfv{v#7Kqiwk7qZ$kee9g`L*cBNd^u`tWpLH262hgNe zph~}*iFGU}z##BDvwZ1HFu@DNSCLSHxQsHLjOVTB*4CW5SU7J#>5HtE_Tz;P=x4*4(xo*X}T z+zci8T|D^i1zhlG8Xu6-R*L%ZPLuHm2se`({D$9MDsiFypSU4~Qw4*1AfkiPgifJR zQUYFk0xEdbK8+5_=;Lge#w*B`cFl7v% zV+r*~%e41b0N@~;7XB)8mB=2X=nGtRKmbI*a&G3=>BB^K)Zz}y>B5-bfS#<%c`*{K zr_W;^*959h4URRN>MJU(FTkiRd+|yl23YFCA3@{4BjL9mFX~5ij~VXvvD1~qc?bxd zMuB=lQSQ}zfE@+d@e)9O9sJ;`VFjEu*Bb~YRxN>it4s6K2(_Ck9tsz>`F;jX922(5 z-6e=Kg-!&X6NjTGkLyFb9G0uOjGBc;pYt*Uk@*5-012CgxtIYi zw-e3%A90VurYsOqKQVaD>IX@iz3%NKE8DICBQ)M0PVC702_)cV#>#1&A;>m(@eWuJ zBdN%XKs;fAU!Ty=D-?YGfAN$JLE3pPMb=5*`6WE!<6(k69wy#y1&& zD2}VxI$+3oPB3(&)3d69)Xc`|5NK#|7}3FPCIA-yK|hm!Ed#~*NmL%dGwV$SBO(e! zH_-Qeae+Km5_bS9Ns^bBx51;W!~5|H zRRADr9nX9$kdv=|UH@Y16!~5if$P_J>vKPc&wNg1-#?xV`y5{kR>Uz{+>eZ|>)$Vi zTOlE*alEJ#AWsR)!KIjs%0=hb{%_ubM*VNas2Th=4g1JrFmMk7LO{3hAP$|>5%6pi zl*jZ(P33c?2Q1l!o8JIKg&+$q0Hd*wzod}HA^j5ym^^?V&EWk^$)yfl$qmNzUoW*77lT?Z8yF-H z+qi-!A8z;}CU9UKK>{9fd|A#`j}l=`2{96dpp9zyUwPmNm-5Wui2gOE$q7f&##_L2V*Ki&r##z*c%_B1?dZVbcO z8_Q40%p@|J-LW%{L3G@7&Td zMkU77AnOz@6i0^gcLEUBB*PVAhf@EWo=Ji9TzdnBtHUAZ)nujm3nCKn^I3g8hiEzW z$JYPt7L|1zyefVh76O%^fgrsEWtd5afsygXs`Rt4Ai#m1DcAbEuVuWnmFf&YI?<#M z-TjxdOFqD__ohBJ0}W2vjHxiBkI@;j%+0+SbK2=Ie$Nze^xIdKOD;z<;Q#^mHqLF2 z6dPis-V;Ddl>i>gF$#qwHn51e*-W)^x?a}DpXOCNoPg;W>qXoFpaaxX3XY;F51^X( zgMqb7l|UWV2`yg>O25Y025a#@TulxONSga~{P&fUx(+_ZFm^`u@Lf$r~;|!&{o3 z82`Lq{Q*+3<~h=?m&DTw2(udaV!uE4CyRMJ&gokVpT9o?ogkIVP%~)4@M1vlv&5am-(^m3LGZn#~b|odrCZ_ZRWxVe5D0{OE;*^c_!FR^Nd9537HEntZ^o{|)b1R8$DYe!TbVtoQOl#jHwg$8ScQz)UnQm6Yp8Of$maCKS>8 zn0TNW{4y0ZB?JNm*oR=CO1D}|*hkW%ME>W+WuKq{zatU#e1Be5fwIsi+4aPL*3mvt z9H0tR0{)aD+4LY2IPfIONX41|%7so?f2s4rc|9+AZOlA6bF_~W@MZj#>r?g9tuI&E z>wt{vAC%5A4boUGbvavDW3n=K`<>T==D$3{NSf4dpuQfqx2JsP~D>Pl0){Z8dI^I5}P&2l@y;p&O%96Fe)!MvPs@hqKD=Sl;n!jHr>m7+-l;j83iPB;NUgV>r zY8ksq0G&&8fTRRKQyu}WnXS%&i0M^+>~HZ#eq`-~0A6ASP{o$j*4DZZW&qIVGT>so z^ybC|C_AcHt5J_l0KVkYm!cmU0C7?U$X05=0DtNekj+%}^nM=!QeZnT00~cvEKW!r z2uV{0P(YN)^u~ZbybI!Q;D@z+-X8bA@V7?FASo7YA?KrXdgS5(ai&0BxDQ}akjuGS&Gdi}AW`R=PHC;+-6QRV(p~K{DHZ+n4CFsF z48!&xD}X+=*B7_xD`3taYSA48-+r16`O~7eS5I>}n?~^M!Ptm>tPusdTCNjJt96A6 z&Ddo)(HK~qa3Ox4FwkYXyjB1TBnA+bR=r=MVEr=w#{TKQs)QcxBTP+*x#p`)5vms? zberO_SGkjz1sc(2t*>dGssa)gmSk;FpgtW4*&U0^c`DuV1zM_s9@d|Tqh%cFv#=5Q zRmO$1{eI>8sM#h+l8mGYpD@cc%8lhS1=sGisdvX{NKVuJ4N)o05>Zj#^HP)Ub~g1n z$C{44uA)--DNe_^G#RCc(ihdW`3?$cnJewTx24x*yJh%fPH%)whlC3bde0>NvtnVh zSQ|VwHI;!wHB}L4)BJ(t8Nz3QI4MZhb6U#F>W?Ovp4HH=F!ifv_c8Wbb)63`Ho!1& zYXf}RtOQni3AGc0>j(VFLMMnR(HjVl{g~SyjE)xTX#BnFOj)!W7{y`CUvdG2Wax~c zHD?Q;kUj*c)-(+v&Xpo(z;B2y!SVv0Tqt3_CC)n>Rx@ECh01fo zajZjL4ypkR{310mI9cakR-lAL_+`Q~a4uyJVFQqFkRQ8C_6`9DEQgz2%o9U(B|C_y z>E2LH9TDQ9YIl>)G)sULSYc*ETn&Ku*ynSz zae|u{somY#;c>04t1AHr3o%iE`h#b_y5}r->gko(K)DE+>g{mLt#%Jy-lM8H|B1ZFpVh zxg?u|n!&LmeLX~{6Zb^WA&7jk9@_KSLjPH#Uc`ZstC<%2^>zg!;8R#r zQM7v9pQTk_p&PX-1t7Bb$@?+sG)?GyT6D5uEh1^sUh1O`{r<=5t7J@2N9jjZUJpBD z_HVN%6yBKKcyMHdBU!Y8^wwa}?8tVZnr!Dsejq>woU@zCIV@&24rE<=MQnDgx^RIQRXukT3d|MEcYQ#btP($Ghk7hRT>w_MrmH)iwg+GH8C z)bWU<_?U{~FuXv23LJ%*?zv~t#rOwbbc-pn&v?{u3=41*1=>G&`z4ce^e1h?GdU&? zx(pO^)g_bI;mIkV<$&aBs}x&mje>OJi+|g6Lj7YeGi%UmrXxCsl{<3H+YDWIt^#Ye zOie5{=ew1z)v6Dw{O@rxfSHKwRnI;4_o zDm;$uXnP7HjU`u=`gePd+d@SAR7d{TTM|iL%QcO9gDbeB9}@WEB&<>e5*1$4r*-Pn zXFpAJE;plZ=(lI`Onv&pZ^bj!aV9Dh|0?o#Cz%nq2|*gm6{VkPiKYwakVal}Pu4EF ze_KZ`QpudbygMloxz)ZgT1lR4$opDvJ1f^FD7lXI#N>4{k9E^&(f`>8Q=sO={7Q4_ z$0uZOKK({+W0!G+7}-ytoL$9rX-Kd7sfF$K9szf=WZA=*f%V+1Yw}4yJ#^ju2$ZRH zecz}M-I&`}`Y{qT(F_Z5VUg2k>O;KaElN-HhljEFU2-1}I+bIqvsotfZy9f2S!IKpE zx&DebBA&=0DVJRfpdgNCBUCj9VplAlJlcE`_3H~{Fl(;A*V8#}Jiz(qZNV75^Gxrv zqnUQU$$b9Eup%CL-X^{7ij|KQ>s91QIJJxgtu|NoJBPjq3uG5eO+ zS~21Lzlog_9g=<(7EZg##RM;)pr`+emQNc%D+B9~5?45th#YW3|0!Y$EivYX9y}p# z_fK^+T zJe`y-$Rhs+Ix~`IX9Nfo0(ZR!o z*~tuUZGK#A_`j`5n*v2zG7mgqa*e|RY)a!k{+56hpM!TFEbT8cD6ajbfZ@&dKVY5<({s~b`u2`D@#IB|1N-rYYirfWJrP@A|j4*63_l<=_Y&b(7m?9rMeHIYPSBij@ z{-NbsSjpVS0RqQm7iqM}p7s0g&z6Dm$ECIl$~jI0T0EZmC+nP1)*bR9uMlW++l|55 z4y)tU?_9I7Jux|)s5TL5sQ+AbV>C6U;m=n2Yj96xOgPS$v4gxhVY1Cv8IKmaom?iD zTfICGWkS*PxG-(lk>=%Ua<pZ7e4M+855%;<3X*_RY_2=+Jj*Zzubjopu?V#oj zC!@eoc)O&r87y%|_xvh7=?LOyE_-E@@)&;~f@1cifLh~?G=AcW2Z}t3BX`8gpEx3g zuh#pM#Ayhtg{SwIY0|xaaPC?5?n`6fTIDk#U-Y(WOr4A5(zSTrg$Y|AL#esc#@m>h zNLx_OLIOB6Zm+k}0`E5DEbb;HR@ilX;YZPY9ZYem_3uxDOtz&`#`R$pDm(~y#Vp>I zQI#%SU%aPTJ>0&&2#g_9&XDVh{IME|oy0)G6j|3cqST$mhH7^?iYJP5-;&*ZPK5w?{? z;kR|QQ#z+?k$XkfX#X`dBp_+S&_$4}zGgr*)VSv+6)N_qLZB9%NOTnR1*}*Ly0yv(=IC;oespGu#F-jder$) z{ikRqH^64Fz8nb}w_KoWFxX*SC#EoGHf*ZuKT#66)KTCf!DUOJD3VYB09)8zrbK*# z+mx>h3$in({%m#0Mv&?5!~62$RmuNIqh;1u6LN%UY+82uCz>)5u1W5zO*L)vRflK@ zx@%P>#>dSJXP=NXd3_<)JZj*E>uQ>@^2f+NLyQRF8CM%lT*KwOEk4L_pF~TqGxvlr zowU~;@ke=-A=idj<$F5xB0QYgQ`FdT(TB#)|AvHptHPRsLDT5o^B6nw@OpSR9Ev5V zaUG^E*W|&1Ruk*$CdROBPM%IN&F{=A)*9(&_0D+~C?}ryTpSG61_Oh3_+%`lo zv_n$)rth_8f+6h33*IloQ)y@z>jbAhZcA%*yL@sd*W_h`|9c#_)QBW0j}!DIIYkj7 z7wY%(3ErW!A0P{n_3=|$1Bh&2tl=feDJW)Z$-&(&HbmM$dn2jAQ+usIn}2S2JcCz- zi4xs_rTrn-^Q)W7RKD~NU3;hn;0$iGC;`lR-*S2600+;b0Un8V8vsu?ntstzkQ}#R zz@nd;vENrdPQ>qaU>gagX*5vGP3{gXIDbmA&Z==rwWR-V^~E8=X$qt##DYckJ-z)> zJ0327Y`7^s9z5nNS(u&X%$8U% z#hUS>^G~%7R0^M+7yjP`U!s*?@Ps^#j}(bc34|rr_nlSl9zG4okxMa^eN&|f4--+G z7qjCUtJpa%5nJa({l$C1YIvtz(5yDoOq(NL4HuVpGoUnZ^*r1QTCvd>@Z6ngek4tE z1fLkHu^!Xv7fTw8+;3T}W?z_TdJS}z!?&fJ^EsIOu+CStDF?#V)*h zx75Vq*?pSWM@NtE)vx#%S@Slrj~Vomqf^8X zjt2zeCx#zt6C8Obc$Zg2%a>Wp3-Cu?53WZHgQEK}@h)oXTCo0W7-PYYb~mZK9$lWR z!TUe(WZz@lSOzb&rW(^?s%XIXvZ5~8_$TG5^iBu$ebJdcEWr8<#+%HdcBaQVmYbcE zXLgeBtyu*3xc{ns$@~W!WL6prJ%D7ap&ivn^7FgJD?^t@`#H7cRCv)<Z}_TGrKgEJ`(r3WE5n1&sn+lw@*gVj{s@7l8Z@HJ`?YM< zT{cI>M0MUXk|>+FdC!i~;C7*m>n57k`-CR_6Rj=HjIT{KQG|P^$s| z5d!eNrtn#c)?CmZWm?rupBGC*ayTToWWIJ8cHlEsNv!OOeEldpfPs8vF%5KQXo!n*aX2Elp+1ghU+e*Ho``Y&4LrdlP09Yh}-_G!Yj!A088zZFN_1`v7Hx;Hz(OxfMLj=Hk3Ys}v#w1ml@K(fvkP zi>86-(v&cZ?F*P^W)o~0SY&GpZZvz5>b~ypC1c02mzmEY_g^Hq|5c#|}g5C(%Ccd7kvv zNP9l)Sq`M`qpi?Lbw&t=vj?24&siEf+l*?Jb`P`CH>)cvD7;cV)ZqFGF|Cp*iwjOC zE57*ehpQg?LHxn>E4_MYk!fi7bQ(0 zTCt^_FyRyT5!O>%732v5VR5WL%KPbRy-`n<1zE}b<(f?oiGq|&O(ID}TMBS8y5Lh- zZIM2D3`CnV#@|)m_mX-_dKgOJp~(8qspjh@0WqSFw{7gUd7EoF>q&sAM`*9O7Iuvd zRksg@&bPJxXF%J1-Zahh#ZIvIgNFWEj1**hG)6y6P$zU@yE zNeI@^4ol?^SokwdeJ}M|ymYxRu)O{5Bam8#S!IdRZUHuJe!}DqK{-Q%{^yP=+-K<# z`@5(c%1-gCA^@Y1bPDwGY-_~=Q;HOU3AYbPh z7nq744p6TQ)@M2=hMr1wS_t(PhPU&GSXZnMr7eL)M#((s}h42^OF$E&e3CKIjZI_aIETgEBC8$3b$z3QTXTfu9m_ze|?kN z{Sg_*u@hlQ>`}v{{lO51*Wme)sQq+;9uA@{1{_p|a`);U45w|4_M?ZPrebPGsxlOG z;46SojCxW?s8$UnVfuD9<-8yS?1R=&RceS?QF+iFZf-ZQcDdOimgM2w}B%loE`R`*fn0nS^4kE z9erk($9T#4x=@0m*cQ46IY)z%cn}Bzdg?Y8TWlxaBY79x9!hae1a@775+1Bsp5{CW zm+GL0_Y?;P$^@nnf2rVkZ-Bm2XMfPb@Pprf#c*6o5#nSpo`R1J z10O$Px@eRoaa{0Oj>Q}ZKcl_ddHu#jPXJl-gJ9<%lOuyxzzX67usE38CAVz=M)|d4 zL~ab{N>pfuo%*8y7xZHvpu;|xQt>Y6au8RkBsob6+@Iv^hx5o{ND*N-Q=oa!!lkSV zk;n|xV*D3yq-b$)nxsH)L&gq*QE=}IDD6rxO_e#QJ||7ZhB?yFnzB<>|LZg#sXhIu z>S)^+=k`pXRd~jZIs6W2oyYTI*1rlb_M~k|D$+>t$y~B|UD_QY9<{oMD3g>9Y#TS^ zIg4my)7^vqa3(CWX-jFz2?|>$@tnN$mb{|t;8M8r`79i?QP=-`_}a9v^{a0+15_+J zY1#581pe`5k)t@R)YM$Uuets&X3)MDq?Zf(F?G9L*`r`2E#s4|u`(Q#W*UTm06C=- z?{*${PTNng;q{T9VAtkrO>or)s-EU;1dc`bRTu_ylbq7BOl(jKf3WO%GxMy2(7E?^ zeOekEA6$bZRH4-&8DWOk>B`Wp&90}PG~w`@9u1wPtyUsC8X@FATlzCyaisi%;MOd9 zzeAKX+(TT`g=A!9Pk3)*vz0jn^{@2zkA&CZR0TGMjP`7bTYq|VJ6#oMB-(ze@2`Vq zC+oH5kg|qg-1Pc6ysp{L4(Xab3c!IkWHKL|Pg92rBP-7zME#UDk2}00(8mm@Fd6gl zuQm1sqH@>1=DIHsUQu=y{{jX`j&~3rH*&*bjh+BBR~%X39cm6&6kzKl^qN0UV}1@y z?qQUb{U4&fDypt1i4q725JGVGhr0)d;O-XO-Q696Lmut~cL?t8?(Xgo++l9IduIOl zVzDmg)T!FF-= zFa(q+ou!}cbLv67b4yL%@v06@sb=$yxFXM=KU42Z zT`XZ}+Aa!J=e{Ou3)V7XLYmAKM9&6#A8N|NdnIJ=LfqPUjhfV&Dqz9YOh)EUHX2LS z-fUIQ(OejgnNPEa_w9G#R2jj$f6Dcpx?%uuUw6+u~ zIlW~xjLByz8InhBzQf~aap$0B9Q$tQ`^}S*d7s*UnXXxXv6rt1tAewtVHyJdv#o!Y zQ=F}wg0RCnCKN4FjzemYOP6BkPUI zO|M34kP0z>2p?3!=lvAb^P;k1|8V2%A0OHspHz#u0T-(>YIJeh?woun!e3jihLMuu zPO2NUEF@*HYEyx`3FgZwKzTaCu!(Wea(oq;u-tU zSayadA%nT8O3MnVDWBJkcgOf0byV0!Pl@*!-8=kOuah9)J6qkAp%=%>U%?|s_vJ^S zfuG8Sk>5F9cus?%;r?KTyzI-;f0jwleEckEPG>O@{#M!uXF)sPuB$M2SVJapEq~Z) zpvHt=+&HsLbjGuE!+Gg6qLxkF zwHq6LHR_fjIzmOJJ_2_3zo-*TVunY;G(m%nHJ-qvx8eKlJfnkh68;PZgBP2fOVf5^ zK0t~>(P`Ae9!;AgiYl1w_zcC8+3);J(G+RWcYpcKW%OodHF0_mgst-&OF@l(Kym*L z`a6lVxo{+OBJV=_f9s4t^nd0+Ou#_KgR7)qij@fT*|}?83gc_bwyeI{SlKbRt$b=y z)w(bVh<@A)jOBQX80ns$Hxu#$_W0}inHJW+KFE$K@+lbAFq5e7g&Te@eQJ5wNv8xI z32$Yk$3lOL^Xep_(aBz)B8a>0k4}ccSx}brrv)!wIL9QbZvPqfjJ&XW5jVluMnKtg z&4)o2<1{@wL$`mJDYkrSph3#_Geti^yfTw8{H}592|Ln4Ty|33X^fi0ZW#-IS`N6a z*FajW9+Ro*?~;<+9?&~e;Uhg)FYKB2sJjdcF`I?o+OuUV3zsph1;V0v)ubzO**SFb zNEI)b<*b9t82hD*56XOkB)WzJxul6PbZiPr%(q=ii1Yc&p&~-j>kq#fpGwG^DK-<=Y3JBdPls0 zrdL@GuF^l=$l`<`nD3M=fA1B2BDE4F9#)uFwzOoj;BNO*?c7>kQ!6a43FugHL8V0 z8Wh*yo+PiGlEnz+uudL1HKWyiycDkmy%^=}{Yz!;C!FZ*{VIM@!~yZ$v{!2p7mgYd z+WHsE4CrJM3z$#eN`HblXKE+|rGh`^{YZ0%<7URl?->*(heh{zIh>_+MAqA7FX)dP9lUu52OR}l&U$=4Hj_DV=M-Iu=^XrR&zAasXb*8K6h7Fczn zAG~;f1qv|;YBIW;&O}`lIQsqMu^&6MeA9f zFtd=`rz-Ti9ZiOdFQr; z{Us*iClGp$mDu*7ex2FaG}-Y2p*gG^3=zS{f-q6c7ZV`g{wyh=q{uVJ&eSF&Ft(7C z_6ZB=_8AsULSP{fp~)h;TYY3f6lT0EE6Bg6e+yT%o#1{+O_g^3exdf0wLlY-QAUFM zmbK`WIaqm(t@9=6@;H%UYO`s3Fp(bM*!(%(@L$WCa~@w27H%@qD41W!q;d17Yy5?| z;ggzZ6qNA*iTk-enPjyCfIhpu64(gpC$`tOJN+fb*a%H&W33xfUe=97{2pU0i7I$~ z4=TTn;BzoHd|)otD0A5@`Gz-;L%6v)>S7`Pv6~fuBTkd+l6WsIE}gS@N!n2LT8YEI zi|A5(Y;TL}hlxWn5qjMdq!clq5g^Ysd;9woo%s~bpwr1b z-M{FqA3&n|vD^FcT&cg6PCXe=_Mnjrm2W3k6 z%jPAF9UzDZOIclgyFghGc!`6<+psZ@z$T?#+m95ttcRI>lN~cFq{~V zS5MPlqLSk+S{$*QYPSn2A&Uh$T9&mOgJ{nQ@S+sQVdJT4zIEOEwmkFB+c|B%H2Vx* zkm4~X5`=a%`ldE2Vd-#(EZ6gjz-^E8&J=IIm z?>w@+mnHmHS`6r)7<6TZ_vi0!cD{LvqTZ$`DZgo>nVM2rzAjz^1{iFP`gDfU?m zm~IUvoDEHC>XqSswNPZK`vY~ss-ws9PFbg1hvy5_|F9%&3` z+re(Y$?=M0wRvNsPtzf2VCqQQM;s$iM4pLB*6!#BPubco=zLMV_nDXAG3n-pAN?RL zoTdF!b+jxs&Gf*URVEn*3R3jGz-s@#;IJlQN*V#BYhQd{^+AF$fpr1GFz4C*{Db}3 zBd_lg<9XJ@C+BK&e+_!?Wk-cAbg%|oF=2A29#>HiQeHFF zKLJ332>D?{wDb5a1rHj_eD+r{+wCJD8gPTK6ftop0hJxQvA*$pZAy@#w7*e>9KwTY2GliPY`2;a7O?Waj zW_*rk+3r)utEyUITkv~k=}*Rd9&JCcvW2HP7VzsQ4=&HBWSuzwxC$!G1%+cYFAckN zHE>TfWAH?Cb6m}s%^JSBnPp?gH*@V1?2smLLyE%RMvAO#o|K!W-x}KAEpWP>EzvF; zB%1%IeK>V>&FQrN5V1~qKzd*$9@oIvu2oIgkii$TZAfo0GO9zFrqFUgeMjqdoyKB= zqmcCNZegej4XncWu)^DTK06o|!3A`jb)xhX?uqR`7+xw+;Q|s7W>_DMa^rYdv=7s= zelC_;PL7*H0h`31`-Jq}8|-XbgsV^R8$OE=;I7rCS}0p+tmLJYNgVatkGvT%-D9TR zvvsLi(8=#W!+@eUI(#%P+p55o8=gQ%iGuL#6PPP|Rs!St*54hI2BL|G96V?RLy*KR zGDSIB{$OG0m#mcO^DkXyLnd^@=5EIgI&jQ4@Fx_kZ89hA#Da6Rks;hwI6#L-0)yCf z9v?jMc2HxGc?w;}1P+FmYMUm;jV}{xi0wM|Q6+hf8-Kd5Nm)WtS#?p~bi+Jc{zb4p z=eF6IAS2ASxQl=Cx+Lm+NdS)xY&knvoUvrdvo*_f*&bXRq3|_2ejeeo4LhYC|F(Nq z0#~T!c<$D5H}1PJhkfX`hI+*|5Q%?qFQzdk(!ZYj3{ZX}&$$A<}70T~nt;%)$4_V$qo?oXj!4$jYqym8GQ#@z`cK|g+) z$T3_vMjiU>vruG`NEvLO0ljC_Td)S(haBf%1mZ35U>pNObv|OCHd(tB?1VZ@TZ^hv zT|y-M-os%amIg(PWA^y+pO3^mLN2>wNigcu1$On>j1((iGj5y8b|hm~=x7;pe8MTB1#@-dgI|iJPp~<9*cyTqIL=S|25zsKKyu8k3{)i5AlLPD z@rhB~TagN0HjDO}FAF@dC6re9D^Mx7lqTQu#N)7=u6Dm`6e#qagc!LI=)TfEeR0|B zJ#~@2iUDI~n}bB4Cc{)_=%BWML;>^?F&K7hQJFt9fxR()DDU_pZR$B^CtbV%&>1LjaqXI_ME^Q+7 z{iogvtxAOT>y>Q}$*))st(L2wNgzm=4+QyK5TL4Frnk*R?})KXP%?CSe~@o-NEHixZw}}KP8C3BctLSs3FTtXI!sV)i+E#V+$2I zbbiq4J`0VNP3Y`^ux|VErTfM#2qz_h+*HP^`2~W!eiD?Gima!nd_I+s^;@;e=_jYq zK{@p&29BWjw^zXZy8+ZG9$<#2!H0(sA=W%bY<<3jgqMknu#p__%J=-1^KC6|XP!^` zRN+HP##YcpM+ds`R2bEqh7}G=FWzEVA8WvBmW<)@)sQv14)?9qSY6JT3KA*2X&5T|AVx? zPb!L4EN6w{$r)Bx4A8Ghx4!s8v<~Q8+>g3FdxOqw!R~9c)+XWs22n z3YN)%-%qRE%&KrU;+{m=h@$-IO>1N(n9ab*RR`wu| z=w_W8Ra$l4i$SnV$OsvyxsPWglWLcgj7y@XN#W_Y)LC<873I8L5j7sk?1-mPa3OQ_ zzmi;gny9I=yr8LYnD-2QRXWnHie|Qdx6bcAp@~16!J(omkANYiK)NO;3LtF)yX_t8 zt|TCEBT{49ti;oPq@lb$QBwvft*R8XYH1xc-IM`|_he7oc-I7Y4GARtwu&zJ9Qmu^ z@M_hVMhE5RHD&D=2QvCB2eTL4@fp5&D)d?%mC(WYN)Bk0#mesO)v*-F3t3Hm%Tp}} z_tYosXR5MVt+_!)gO$n^*Exz*zCjJtKY4tOynbsvS~gUB-wW)G_N7VErX^rIpve!b zl~%-0B*qR@&!JvBkxV}3dzY>$TgY(Ohf#`a{`uosR;C}e97dEEd&~mAj7SLb*f_*_G z(yJSUC57xy-=V2pbiA^K^Gs8cT>uA*=kORug>=k^e=0D2=_c`64Rx zPl*tEZca|TZTq9BzQ3F@bIk7VZ&~j9*!ci$bQssRH9JotPV}tjm=Np>C}~vhE;cF| zL(ZtX)C#1r^MNqsVE{$1U?fx}P*J}T2o{-F;UBKG-Oz#i`c<_*8o$(Pqg{I_kuDA3 z^q>a!rxOc(ifLAb38hTsaj$mR?1T&s6^+dXK#R{2f@RWa-^M7QXsHZ|-J$$*Ip{H{ zl=YDzR6y5&TG&Dr0Ok{%j;5&q>_8O=B;u`VyaI4DD#!g%g@aGX#E2rBj%x zXj5whjVyNhqt=cm5lJBL)?7D=5A*?f+-H_5m1@(83gr@I3HQrBOmxs-IgZy z+WMz4c#M3-?5ZikF+z+g^}Za7xsqe8p=2f!h6)=Xay?HP5Qwf7HZ3+enl^a78SV`y ze4hEO>f8LZntthmm_+_jpHWcbA_*CRF)apA-%gJ(qF{EsTt(>cXJ?4<+M>qF z?eo9E{(XFZkivn5TazK;UrWUz{O*7F?pq#ZR_5M;!jfRr1w9N4rhi}f`8e6{2otA! zWdij$2@S^oM~#t%USyf}f}}wH@0UY?{7*ysLBcPC*Aqk7im{x=TL2#irv%_tuWq%W zr|el**{Xyr?-@#EaIq!-1WTGF&}(b(%RT}s@>?Rl?VX)Vz?PsXfdmTJ4AJW?3+ibY zdg!>hahQ1-pujQG2R4qSuu$NAMZD-SKz({!vF#|o7qOmnH(#j0Pk#JOAfRBi0!*;n z7`}G1F#3yt21{<%QEt(3Da8fs5owNfly9zs#Mv{#NJm*~KJ!VK`kU=K9x(JRTo*;! zpMoI!SAJXfg`-bZ8HynaM()QZw~lf9+UNV2eaX?1UXdc>4vQ?6&koSksnBZr-X7z2 zMUKlLq)7u6xoog(>p=(*HeguP=S$x%2MB*##*f?s9up_-?Wa7)?k5qE)uTI65Luov z4e|c5vM73QAZ$$39<2?f@UAKJS9uV^W13{dSEVw(v((vMVFx~`)5grbez@yk28C_!3?}i2zGcdpn?*X!f z`?eFGM^8~)T4-J#{2)K9hSmUTbo9|Y#iWEM=GgCVk$t*&bTIp);)8H}EGIJq{a&5! zW^QY(?x>?T3JgLxItI)rdQJow^jee{UGY>(-v=U!hJU$Y4LPqQ!I5H!}cXCA|PN(Y@%Xv&ORo^%Sz z=sR-z!!~@|7rM6^ld+No)Aqs}9{Z3-IVf{d`xk)KQ*H`OUZ9TH*iVQAWevKOI=nOF zp&VPxld8a9gdf4rk^0$^<1h-s(5LVhNaVA#)#ya31-)5O#TzNAGM~@B(pY&YFfm_E z(S|KcGPM2;(CG~~y24aD{;k{L)4ZB9pSIrQ7&55B$G3kWJ5e7i!?5{ZG7{k9aCnBg zBuRP(1jOVMl3dRK*9AN6_UTz+LbI}aXq4g;B;Q3Amj5eCJhGmWuITV@BIpo|-cajl zXyz(A9o-rDl$)ZI(VMD6%O5_gYh}Du*27nL{*=<@Lm;o}#}sN$3LkkJfB@nz77F1h zDhYLpyv@*(2-L?+J?OIYEIDS#{v5SqcsG!oXe1WoGzJQ)d2O`O#Me~ZumVBuU;KFK0*~xlpF}~BptgBG-xV*r z0t(M+tDnR6k%O};(jZ9DR0q`qf7YkNzRYFf>8P|q4Y2gvwj?u3v2gpvkM9uaT+Whc zE7rQCaiTE<uY&Gpbc)4k~jLavR=Eyh8E^w^w!&`&fQ{?9aImNuM{)A?B0Sr^X~U|%G#n2sl_$o<74*+kpdm8LW8RV?GN z+x#BrDN8H<83fM3V17$D4a3H$)AQ8mL zj3N=0Dt>ELfh@}tra%N-0%PF4;TbU;fdUm-D}7>-Q$B2%YlVldAb|Sw0l2bC$?7>= zeBFT{O2t}f(W~M<;8~FhHjgfT2AE7M`G=*_D+;{Q3c@KaNmZfCw!p3pU39o<@AhIt z7aLgWt}yBP@O-_V$K*6l0q(JnuSsdhfTlcE#(%KAe=B_gNT_4X5u@Biqn-lTU%L49 zf2ZFu7<8;OqT6~)O*r#Xz9aW#76>b}o2}jqV9?6VOz!>2LV{j=UA}pfkR5VgzXBo? zaH7njMV%$M#iVmglpUTRa`~_&0-!#AJ~Z4k+|mrsTx_t_U2U`%LPG{3I_t`MPExG_ zHgtIdNpubH_�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Ð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 K$iL1vGX4L;5T6SG literal 0 HcmV?d00001 diff --git a/representation_construits/assets/bo_tuple.png b/representation_construits/assets/bo_tuple.png new file mode 100644 index 0000000000000000000000000000000000000000..2491759a526f9bc44bca126a620ea789812aa8cf GIT binary patch literal 33144 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 A#sB~S literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/.ipynb_checkpoints/README-checkpoint.ipynb b/representation_construits/chapitre_1/.ipynb_checkpoints/README-checkpoint.ipynb new file mode 100644 index 0000000..f72c7d4 --- /dev/null +++ b/representation_construits/chapitre_1/.ipynb_checkpoints/README-checkpoint.ipynb @@ -0,0 +1,682 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8e7931fd", + "metadata": {}, + "source": [ + "# Représentation des données : tuples, listes et itérations" + ] + }, + { + "cell_type": "markdown", + "id": "eb82a1d6", + "metadata": {}, + "source": [ + "> ***Contenue*** : Notions introduites : le type conteneur, avec les listes, les tuples, parcours de séquences. \n", + "\n", + "> ***Compétences*** : Comprendre la différence entre une liste python et un tuple. Maîtriser la création de conteneurs sur Python." + ] + }, + { + "cell_type": "markdown", + "id": "351877cc", + "metadata": {}, + "source": [ + "## Le programme" + ] + }, + { + "cell_type": "markdown", + "id": "72d95029", + "metadata": {}, + "source": [ + "------\n" + ] + }, + { + "cell_type": "markdown", + "id": "e0891811", + "metadata": {}, + "source": [ + "![bo_tuple](../assets/bo_tuple.png)" + ] + }, + { + "cell_type": "markdown", + "id": "d2f3b985", + "metadata": {}, + "source": [ + "![bo_liste](../assets/bo_liste.png)" + ] + }, + { + "cell_type": "markdown", + "id": "b9d904ad", + "metadata": {}, + "source": [ + "## Apport de connaissances" + ] + }, + { + "cell_type": "markdown", + "id": "ff539106", + "metadata": {}, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "id": "9c9c328a", + "metadata": {}, + "source": [ + "Les types *conteneurs* comme les tuples ou les listes permettent de stocker des objets, et proposent des méthodes d'accès, de modification et d'itération sur ces mêmes objets.\n", + "\n", + "Ici nous allons voir trois types de conteneurs en particulier : les tuples, les listes, et enfin les dictionnaires. En apprenant à créer et à manipuler ces types d'objets, cela nous permettra de travailler sur un grand nombre de données de manière rapide et efficace." + ] + }, + { + "cell_type": "markdown", + "id": "aa48414d", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "3895f0e2", + "metadata": {}, + "source": [ + "### Les listes" + ] + }, + { + "cell_type": "markdown", + "id": "c4141b1e", + "metadata": {}, + "source": [ + "Pour le moment, nous n'avons appris à travailler qu'avec un nombre limité de variables. Cependant, il peut arriver que vous deviez lire, stocker, traiter et enfin imprimer des dizaines, voire des centaines ou des milliers de valeurs de données. Comment stocker et accéder efficacement à ces données ? \n", + "\n", + "Par exemple, si l'on décide de de manipuler une demi-douzaine de variables, doit on les déclarer comme ceci : " + ] + }, + { + "cell_type": "markdown", + "id": "487520fb", + "metadata": {}, + "source": [ + "var1 = int(input())\n", + "var2 = int(input())\n", + "var3 = int(input())\n", + "var4 = int(input())\n", + "var5 = int(input())\n", + "var6 = int(input())" + ] + }, + { + "cell_type": "markdown", + "id": "4693983f", + "metadata": {}, + "source": [ + "Nous allons voir qu'avec une liste, nous allons pouvoir déclarer une variable à valeurs multiples." + ] + }, + { + "cell_type": "markdown", + "id": "3764753e", + "metadata": {}, + "source": [ + "---------" + ] + }, + { + "cell_type": "markdown", + "id": "888b14c9", + "metadata": {}, + "source": [ + "### Créer une liste\n" + ] + }, + { + "cell_type": "markdown", + "id": "34e6d597", + "metadata": {}, + "source": [ + "Créer une liste vide :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0b2f16b", + "metadata": {}, + "outputs": [], + "source": [ + "nom_liste = []" + ] + }, + { + "cell_type": "markdown", + "id": "0010c492", + "metadata": {}, + "source": [ + " On peut les créer par ***extension*** (comprendre *liste déclarée littéralement*) comme ceci :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea5c9f4b", + "metadata": {}, + "outputs": [], + "source": [ + "nom_liste = [3, 8, 5, 4]" + ] + }, + { + "cell_type": "markdown", + "id": "0621a32d", + "metadata": {}, + "source": [ + "Mais aussi par ***compréhension*** (itération, que l'on verra plus loin)\n", + "\n", + "On peut tester ça dans la console python " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21bf0b13", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [2, 3, 5, 7 ]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4192f777", + "metadata": {}, + "outputs": [], + "source": [ + "type (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "7c8925ab", + "metadata": {}, + "source": [ + "On peut afficher la liste de la même manière qu'une variable classique : avec la commande *print* " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b7f5057", + "metadata": {}, + "outputs": [], + "source": [ + "print (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "5e01b094", + "metadata": {}, + "source": [ + "--------" + ] + }, + { + "cell_type": "markdown", + "id": "60990b42", + "metadata": {}, + "source": [ + "### Accéder aux élèments d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "f2572686", + "metadata": {}, + "source": [ + "Les élèments d'une liste peuvent être comparé à des élèments d'une séquence : chaque élèment a une position précise dans la liste, comme nous l'avons vu pour les chaînes de caractères (*str*)\n", + "\n", + "On appelle cette position *indice*, c'est cet indice qui nous permet d'accéder à un élèment en particulier.\n", + "\n", + "Le premier élèment d'une liste a pour indice **0**\n", + "\n", + "Tout comme avec les chaînes de caractères, un indice négatif permet d'accéder l'élèment en partant de la fin\n", + "\n", + "Pour connaître le nombre total d'élèments dans une liste, on utilise la fonction ***len***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "903af397", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [2,4,6,8]\n", + "len (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "68933336", + "metadata": {}, + "source": [ + "On peut désigner une **tranche** en indiquant l'indice du premier élèment, ainsi que celui du dernier ***non inclus***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8368df4", + "metadata": {}, + "outputs": [], + "source": [ + "lst [1:3]" + ] + }, + { + "cell_type": "markdown", + "id": "1ff6aae5", + "metadata": {}, + "source": [ + "Attention : Un indice qui dépasse la valeur *longueur de la liste - 1* provoquera une erreur dans votre code" + ] + }, + { + "cell_type": "markdown", + "id": "3284e1b0", + "metadata": {}, + "source": [ + "---------" + ] + }, + { + "cell_type": "markdown", + "id": "e4e3c049", + "metadata": {}, + "source": [ + "### Parcours d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "3a0de921", + "metadata": {}, + "source": [ + "Comme indiqué plus haut, il est possible de créer et de parcourir une liste par une méthode dite *de compréhension* ou *itération*\n", + "\n", + "Celà signifie qu'on construit une liste à partir d'élèments itérables : que l'on peut répétèr. Par exemple :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "289a75cf", + "metadata": {}, + "outputs": [], + "source": [ + "liste = [x for x in range(5)]\n", + "print(liste)" + ] + }, + { + "cell_type": "markdown", + "id": "1f8399fe", + "metadata": {}, + "source": [ + "Que vous affiche la console ?\n", + "\n", + "L'intérêt des listes par compréhension, c'est que l'on peut utiliser les structures conditionnelles, à l'aide de boucles...\n", + "\n", + "On peut également initialiser une liste à partir d'une autre liste " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a3360286", + "metadata": {}, + "outputs": [], + "source": [ + "liste = [1, 2, 3, 4]\n", + "nouvelle_liste = [2 * x for x in liste]\n", + "print(nouvelle_liste)" + ] + }, + { + "cell_type": "markdown", + "id": "d7262a39", + "metadata": {}, + "source": [ + "Une fois que la liste est crée, on peut la parcourir :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a9e9e9ec", + "metadata": {}, + "outputs": [], + "source": [ + "for elt in lst:\n", + " print (elt, end='')" + ] + }, + { + "cell_type": "markdown", + "id": "bded0a4f", + "metadata": {}, + "source": [ + "Ici, on va afficher chaque élèment de la liste lst\n", + "\n", + "On peut également utiliser une boucle en itérant l'indice i des élèments :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26be31c2", + "metadata": {}, + "outputs": [], + "source": [ + "for i in range (len(lst)):\n", + " print(lst[i], end='')" + ] + }, + { + "cell_type": "markdown", + "id": "78dc79dd", + "metadata": {}, + "source": [ + "Ici, pour i compris entre 0 et longueur de lst, on va affichier l'élèment correspondant à l'indice valant i.\n", + "\n", + " À faire : \n", + "\n", + "- créer une liste par extension, puis par itération\n", + "- afficher les élèments d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "e4e5f08f", + "metadata": {}, + "source": [ + "-------\n" + ] + }, + { + "cell_type": "markdown", + "id": "baa22c54", + "metadata": {}, + "source": [ + "### Propriétés d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "ab2684f4", + "metadata": {}, + "source": [ + "Une liste peut être modifiable : on parle d'un objet *mutable*\n", + "\n", + "- On peut donc supprimer un élèment d'une liste avec le mot clé *del*\t" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "afc4143f", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [1,2,3,4,5]\n", + "del lst[0]\n", + "print(lst)" + ] + }, + { + "cell_type": "markdown", + "id": "72921eae", + "metadata": {}, + "source": [ + "Il faut noter qu'en supprimant l'élèment situé à l'indice 0, j'ai donc fait changer tous les indices des élèments de la liste !\n", + "On peut également ajouter un élèment à la liste : " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e6aeb54", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [1,2,3,4,5]\n", + "lst.append(6)\n", + "print (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "c2ae9958", + "metadata": {}, + "source": [ + "L'élèment ajouté se positionne donc à la *fin* de la liste\n", + "\n", + "Pour modifier un élèment en particulier, on lui affecte une nouvelle valeur :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e5d91ec", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [1,2,3,4,5]\n", + "lst[1] = 8\n", + "print (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "744a1b5f", + "metadata": {}, + "source": [ + "Il est préférable de ne stocker que des données de même type dans une liste\n", + "\n", + "Une liste peut être passée comme paramètre d'une fonction" + ] + }, + { + "cell_type": "markdown", + "id": "0752a875", + "metadata": {}, + "source": [ + "--------" + ] + }, + { + "cell_type": "markdown", + "id": "c3334da3", + "metadata": {}, + "source": [ + "## Les tuples (ou p-uplets)" + ] + }, + { + "cell_type": "markdown", + "id": "950ac9c0", + "metadata": {}, + "source": [ + " À la différence des listes, les tuples ne sont ***pas mutables***. On ne peut donc plus les modifier une fois créés, leur taille est fixe.\n", + "\n", + "Mais ils peuvent néanmoins contenir des données de différents types.\n", + "\n", + "Pour initialiser un tuple, on utilise cette syntaxe :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9650c65", + "metadata": {}, + "outputs": [], + "source": [ + "tuple = (1, 3)\n", + "print (tuple)" + ] + }, + { + "cell_type": "markdown", + "id": "6696bdfa", + "metadata": {}, + "source": [ + "Ici, de la même manière que les listes, on pourra accéder à un élèment en particulier via son indice" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6bf823b5", + "metadata": {}, + "outputs": [], + "source": [ + "tuple = (1, 3, 5, 7, 9)\n", + "tuple[-1]" + ] + }, + { + "cell_type": "markdown", + "id": "38639578", + "metadata": {}, + "source": [ + "De plus, on peut tout à fait utiliser l'itération pour construire ou parcourir une structure tuple.\n", + "\n", + "Enfin, il est courant, dans une fonction, de renvoyer plusieurs valeurs. Par exemple, via ce type de syntaxe :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc1d8a8a", + "metadata": {}, + "outputs": [], + "source": [ + "return a, b" + ] + }, + { + "cell_type": "markdown", + "id": "13f8b5ab", + "metadata": {}, + "source": [ + "En réalité, cette syntaxe signifie : return (a, b) : on a donc un tuple composé des variables a et b qui est renvoyé." + ] + }, + { + "cell_type": "markdown", + "id": "ad602ab2", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "id": "e758cc26", + "metadata": {}, + "source": [ + "### À retenir:" + ] + }, + { + "cell_type": "markdown", + "id": "b3e871a6", + "metadata": {}, + "source": [ + "***Pour les listes et tuples :***" + ] + }, + { + "cell_type": "markdown", + "id": "735fd28c", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| ---------- | ------------------------------------------------------------ |\n", + "| x in t | Renvoie True si un élément de t est égal à x |\n", + "| x not in t | Renvoie True si aucun élément de t n'est égal à x, False sinon |\n", + "| len(t) | Renvoie le nombre d'éléments de t |\n", + "| t == t1 | Renvoie True si t et t1 sont de même type, ont la même longueur, et ont des éléments égaux 2 à 2 |" + ] + }, + { + "cell_type": "markdown", + "id": "58ea35dc", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| ---------- | ------------------------------------------------------------ |\n", + "| t[i] | Renvoie l'élément d'indice i de t |\n", + "| t[i:j] | Renvoie une partie de t de l'indice i à j non inclus |\n", + "| t.index(x) | Renvoie l'indice de la première apparition de x dans t |\n", + "| t.count(x) | Renvoie le nombre d'apparitions de x dans t |\n", + "| s + t | Renvoie une nouvelle séquence qui correspond à la concaténation de s et de t (seulement si s et t ont le même type |" + ] + }, + { + "cell_type": "markdown", + "id": "2e470d2f", + "metadata": {}, + "source": [ + "***Uniquement pour les listes :*** " + ] + }, + { + "cell_type": "markdown", + "id": "7844385e", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| -------------- | ------------------------------------------------------------ |\n", + "| l.append(x) | Ajoute l'élément x à la fin de la liste l |\n", + "| l[i] = x | Modifie la liste et affecte la valeur x à la case d'indice i |\n", + "| l.insert(i, x) | Insère l'élément x dans la liste l à la position de l'indice i |\n", + "| l.remove(x) | Supprime de la liste le premier élément dont la valeur est égale à x |\n", + "| l.pop(i) | Enlève de la liste l'élément à la position i et renvoie sa valeur |\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/representation_construits/chapitre_1/README.ipynb b/representation_construits/chapitre_1/README.ipynb new file mode 100644 index 0000000..f72c7d4 --- /dev/null +++ b/representation_construits/chapitre_1/README.ipynb @@ -0,0 +1,682 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8e7931fd", + "metadata": {}, + "source": [ + "# Représentation des données : tuples, listes et itérations" + ] + }, + { + "cell_type": "markdown", + "id": "eb82a1d6", + "metadata": {}, + "source": [ + "> ***Contenue*** : Notions introduites : le type conteneur, avec les listes, les tuples, parcours de séquences. \n", + "\n", + "> ***Compétences*** : Comprendre la différence entre une liste python et un tuple. Maîtriser la création de conteneurs sur Python." + ] + }, + { + "cell_type": "markdown", + "id": "351877cc", + "metadata": {}, + "source": [ + "## Le programme" + ] + }, + { + "cell_type": "markdown", + "id": "72d95029", + "metadata": {}, + "source": [ + "------\n" + ] + }, + { + "cell_type": "markdown", + "id": "e0891811", + "metadata": {}, + "source": [ + "![bo_tuple](../assets/bo_tuple.png)" + ] + }, + { + "cell_type": "markdown", + "id": "d2f3b985", + "metadata": {}, + "source": [ + "![bo_liste](../assets/bo_liste.png)" + ] + }, + { + "cell_type": "markdown", + "id": "b9d904ad", + "metadata": {}, + "source": [ + "## Apport de connaissances" + ] + }, + { + "cell_type": "markdown", + "id": "ff539106", + "metadata": {}, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "id": "9c9c328a", + "metadata": {}, + "source": [ + "Les types *conteneurs* comme les tuples ou les listes permettent de stocker des objets, et proposent des méthodes d'accès, de modification et d'itération sur ces mêmes objets.\n", + "\n", + "Ici nous allons voir trois types de conteneurs en particulier : les tuples, les listes, et enfin les dictionnaires. En apprenant à créer et à manipuler ces types d'objets, cela nous permettra de travailler sur un grand nombre de données de manière rapide et efficace." + ] + }, + { + "cell_type": "markdown", + "id": "aa48414d", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "3895f0e2", + "metadata": {}, + "source": [ + "### Les listes" + ] + }, + { + "cell_type": "markdown", + "id": "c4141b1e", + "metadata": {}, + "source": [ + "Pour le moment, nous n'avons appris à travailler qu'avec un nombre limité de variables. Cependant, il peut arriver que vous deviez lire, stocker, traiter et enfin imprimer des dizaines, voire des centaines ou des milliers de valeurs de données. Comment stocker et accéder efficacement à ces données ? \n", + "\n", + "Par exemple, si l'on décide de de manipuler une demi-douzaine de variables, doit on les déclarer comme ceci : " + ] + }, + { + "cell_type": "markdown", + "id": "487520fb", + "metadata": {}, + "source": [ + "var1 = int(input())\n", + "var2 = int(input())\n", + "var3 = int(input())\n", + "var4 = int(input())\n", + "var5 = int(input())\n", + "var6 = int(input())" + ] + }, + { + "cell_type": "markdown", + "id": "4693983f", + "metadata": {}, + "source": [ + "Nous allons voir qu'avec une liste, nous allons pouvoir déclarer une variable à valeurs multiples." + ] + }, + { + "cell_type": "markdown", + "id": "3764753e", + "metadata": {}, + "source": [ + "---------" + ] + }, + { + "cell_type": "markdown", + "id": "888b14c9", + "metadata": {}, + "source": [ + "### Créer une liste\n" + ] + }, + { + "cell_type": "markdown", + "id": "34e6d597", + "metadata": {}, + "source": [ + "Créer une liste vide :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a0b2f16b", + "metadata": {}, + "outputs": [], + "source": [ + "nom_liste = []" + ] + }, + { + "cell_type": "markdown", + "id": "0010c492", + "metadata": {}, + "source": [ + " On peut les créer par ***extension*** (comprendre *liste déclarée littéralement*) comme ceci :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea5c9f4b", + "metadata": {}, + "outputs": [], + "source": [ + "nom_liste = [3, 8, 5, 4]" + ] + }, + { + "cell_type": "markdown", + "id": "0621a32d", + "metadata": {}, + "source": [ + "Mais aussi par ***compréhension*** (itération, que l'on verra plus loin)\n", + "\n", + "On peut tester ça dans la console python " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21bf0b13", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [2, 3, 5, 7 ]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4192f777", + "metadata": {}, + "outputs": [], + "source": [ + "type (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "7c8925ab", + "metadata": {}, + "source": [ + "On peut afficher la liste de la même manière qu'une variable classique : avec la commande *print* " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b7f5057", + "metadata": {}, + "outputs": [], + "source": [ + "print (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "5e01b094", + "metadata": {}, + "source": [ + "--------" + ] + }, + { + "cell_type": "markdown", + "id": "60990b42", + "metadata": {}, + "source": [ + "### Accéder aux élèments d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "f2572686", + "metadata": {}, + "source": [ + "Les élèments d'une liste peuvent être comparé à des élèments d'une séquence : chaque élèment a une position précise dans la liste, comme nous l'avons vu pour les chaînes de caractères (*str*)\n", + "\n", + "On appelle cette position *indice*, c'est cet indice qui nous permet d'accéder à un élèment en particulier.\n", + "\n", + "Le premier élèment d'une liste a pour indice **0**\n", + "\n", + "Tout comme avec les chaînes de caractères, un indice négatif permet d'accéder l'élèment en partant de la fin\n", + "\n", + "Pour connaître le nombre total d'élèments dans une liste, on utilise la fonction ***len***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "903af397", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [2,4,6,8]\n", + "len (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "68933336", + "metadata": {}, + "source": [ + "On peut désigner une **tranche** en indiquant l'indice du premier élèment, ainsi que celui du dernier ***non inclus***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8368df4", + "metadata": {}, + "outputs": [], + "source": [ + "lst [1:3]" + ] + }, + { + "cell_type": "markdown", + "id": "1ff6aae5", + "metadata": {}, + "source": [ + "Attention : Un indice qui dépasse la valeur *longueur de la liste - 1* provoquera une erreur dans votre code" + ] + }, + { + "cell_type": "markdown", + "id": "3284e1b0", + "metadata": {}, + "source": [ + "---------" + ] + }, + { + "cell_type": "markdown", + "id": "e4e3c049", + "metadata": {}, + "source": [ + "### Parcours d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "3a0de921", + "metadata": {}, + "source": [ + "Comme indiqué plus haut, il est possible de créer et de parcourir une liste par une méthode dite *de compréhension* ou *itération*\n", + "\n", + "Celà signifie qu'on construit une liste à partir d'élèments itérables : que l'on peut répétèr. Par exemple :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "289a75cf", + "metadata": {}, + "outputs": [], + "source": [ + "liste = [x for x in range(5)]\n", + "print(liste)" + ] + }, + { + "cell_type": "markdown", + "id": "1f8399fe", + "metadata": {}, + "source": [ + "Que vous affiche la console ?\n", + "\n", + "L'intérêt des listes par compréhension, c'est que l'on peut utiliser les structures conditionnelles, à l'aide de boucles...\n", + "\n", + "On peut également initialiser une liste à partir d'une autre liste " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a3360286", + "metadata": {}, + "outputs": [], + "source": [ + "liste = [1, 2, 3, 4]\n", + "nouvelle_liste = [2 * x for x in liste]\n", + "print(nouvelle_liste)" + ] + }, + { + "cell_type": "markdown", + "id": "d7262a39", + "metadata": {}, + "source": [ + "Une fois que la liste est crée, on peut la parcourir :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a9e9e9ec", + "metadata": {}, + "outputs": [], + "source": [ + "for elt in lst:\n", + " print (elt, end='')" + ] + }, + { + "cell_type": "markdown", + "id": "bded0a4f", + "metadata": {}, + "source": [ + "Ici, on va afficher chaque élèment de la liste lst\n", + "\n", + "On peut également utiliser une boucle en itérant l'indice i des élèments :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26be31c2", + "metadata": {}, + "outputs": [], + "source": [ + "for i in range (len(lst)):\n", + " print(lst[i], end='')" + ] + }, + { + "cell_type": "markdown", + "id": "78dc79dd", + "metadata": {}, + "source": [ + "Ici, pour i compris entre 0 et longueur de lst, on va affichier l'élèment correspondant à l'indice valant i.\n", + "\n", + " À faire : \n", + "\n", + "- créer une liste par extension, puis par itération\n", + "- afficher les élèments d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "e4e5f08f", + "metadata": {}, + "source": [ + "-------\n" + ] + }, + { + "cell_type": "markdown", + "id": "baa22c54", + "metadata": {}, + "source": [ + "### Propriétés d'une liste" + ] + }, + { + "cell_type": "markdown", + "id": "ab2684f4", + "metadata": {}, + "source": [ + "Une liste peut être modifiable : on parle d'un objet *mutable*\n", + "\n", + "- On peut donc supprimer un élèment d'une liste avec le mot clé *del*\t" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "afc4143f", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [1,2,3,4,5]\n", + "del lst[0]\n", + "print(lst)" + ] + }, + { + "cell_type": "markdown", + "id": "72921eae", + "metadata": {}, + "source": [ + "Il faut noter qu'en supprimant l'élèment situé à l'indice 0, j'ai donc fait changer tous les indices des élèments de la liste !\n", + "On peut également ajouter un élèment à la liste : " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e6aeb54", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [1,2,3,4,5]\n", + "lst.append(6)\n", + "print (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "c2ae9958", + "metadata": {}, + "source": [ + "L'élèment ajouté se positionne donc à la *fin* de la liste\n", + "\n", + "Pour modifier un élèment en particulier, on lui affecte une nouvelle valeur :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e5d91ec", + "metadata": {}, + "outputs": [], + "source": [ + "lst = [1,2,3,4,5]\n", + "lst[1] = 8\n", + "print (lst)" + ] + }, + { + "cell_type": "markdown", + "id": "744a1b5f", + "metadata": {}, + "source": [ + "Il est préférable de ne stocker que des données de même type dans une liste\n", + "\n", + "Une liste peut être passée comme paramètre d'une fonction" + ] + }, + { + "cell_type": "markdown", + "id": "0752a875", + "metadata": {}, + "source": [ + "--------" + ] + }, + { + "cell_type": "markdown", + "id": "c3334da3", + "metadata": {}, + "source": [ + "## Les tuples (ou p-uplets)" + ] + }, + { + "cell_type": "markdown", + "id": "950ac9c0", + "metadata": {}, + "source": [ + " À la différence des listes, les tuples ne sont ***pas mutables***. On ne peut donc plus les modifier une fois créés, leur taille est fixe.\n", + "\n", + "Mais ils peuvent néanmoins contenir des données de différents types.\n", + "\n", + "Pour initialiser un tuple, on utilise cette syntaxe :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9650c65", + "metadata": {}, + "outputs": [], + "source": [ + "tuple = (1, 3)\n", + "print (tuple)" + ] + }, + { + "cell_type": "markdown", + "id": "6696bdfa", + "metadata": {}, + "source": [ + "Ici, de la même manière que les listes, on pourra accéder à un élèment en particulier via son indice" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6bf823b5", + "metadata": {}, + "outputs": [], + "source": [ + "tuple = (1, 3, 5, 7, 9)\n", + "tuple[-1]" + ] + }, + { + "cell_type": "markdown", + "id": "38639578", + "metadata": {}, + "source": [ + "De plus, on peut tout à fait utiliser l'itération pour construire ou parcourir une structure tuple.\n", + "\n", + "Enfin, il est courant, dans une fonction, de renvoyer plusieurs valeurs. Par exemple, via ce type de syntaxe :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc1d8a8a", + "metadata": {}, + "outputs": [], + "source": [ + "return a, b" + ] + }, + { + "cell_type": "markdown", + "id": "13f8b5ab", + "metadata": {}, + "source": [ + "En réalité, cette syntaxe signifie : return (a, b) : on a donc un tuple composé des variables a et b qui est renvoyé." + ] + }, + { + "cell_type": "markdown", + "id": "ad602ab2", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "id": "e758cc26", + "metadata": {}, + "source": [ + "### À retenir:" + ] + }, + { + "cell_type": "markdown", + "id": "b3e871a6", + "metadata": {}, + "source": [ + "***Pour les listes et tuples :***" + ] + }, + { + "cell_type": "markdown", + "id": "735fd28c", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| ---------- | ------------------------------------------------------------ |\n", + "| x in t | Renvoie True si un élément de t est égal à x |\n", + "| x not in t | Renvoie True si aucun élément de t n'est égal à x, False sinon |\n", + "| len(t) | Renvoie le nombre d'éléments de t |\n", + "| t == t1 | Renvoie True si t et t1 sont de même type, ont la même longueur, et ont des éléments égaux 2 à 2 |" + ] + }, + { + "cell_type": "markdown", + "id": "58ea35dc", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| ---------- | ------------------------------------------------------------ |\n", + "| t[i] | Renvoie l'élément d'indice i de t |\n", + "| t[i:j] | Renvoie une partie de t de l'indice i à j non inclus |\n", + "| t.index(x) | Renvoie l'indice de la première apparition de x dans t |\n", + "| t.count(x) | Renvoie le nombre d'apparitions de x dans t |\n", + "| s + t | Renvoie une nouvelle séquence qui correspond à la concaténation de s et de t (seulement si s et t ont le même type |" + ] + }, + { + "cell_type": "markdown", + "id": "2e470d2f", + "metadata": {}, + "source": [ + "***Uniquement pour les listes :*** " + ] + }, + { + "cell_type": "markdown", + "id": "7844385e", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| -------------- | ------------------------------------------------------------ |\n", + "| l.append(x) | Ajoute l'élément x à la fin de la liste l |\n", + "| l[i] = x | Modifie la liste et affecte la valeur x à la case d'indice i |\n", + "| l.insert(i, x) | Insère l'élément x dans la liste l à la position de l'indice i |\n", + "| l.remove(x) | Supprime de la liste le premier élément dont la valeur est égale à x |\n", + "| l.pop(i) | Enlève de la liste l'élément à la position i et renvoie sa valeur |\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/representation_construits/chapitre_1/README.md b/representation_construits/chapitre_1/README.md new file mode 100644 index 0000000..4316527 --- /dev/null +++ b/representation_construits/chapitre_1/README.md @@ -0,0 +1,261 @@ +## Représentation des données : tuples, listes et itérations + +------------- + +> ***Contenue*** : Notions introduites : le type conteneur, avec les listes, les tuples, parcours de séquences. +> ***Compétences*** : Comprendre la différence entre une liste python et un tuple. Maîtriser la création de conteneurs sur Python. + +## Le programme + +----------- + +![bo_tuple](../assets/bo_tuple.png) + +![bo_liste](../assets/bo_liste.png) + +## Apport de connaissances + +---------- + +Les types *conteneurs* comme les tuples ou les listes permettent de stocker des objets, et proposent des méthodes d'accès, de modification et d'itération sur ces mêmes objets. + +Ici nous allons voir trois types de conteneurs en particulier : les tuples, les listes, et enfin les dictionnaires. En apprenant à créer et à manipuler ces types d'objets, cela nous permettra de travailler sur un grand nombre de données de manière rapide et efficace. + +-------- + +### Les listes + +Pour le moment, nous n'avons appris à travailler qu'avec un nombre limité de variables. Cependant, il peut arriver que vous deviez lire, stocker, traiter et enfin imprimer des dizaines, voire des centaines ou des milliers de valeurs de données. Comment stocker et accéder efficacement à ces données ? + +Par exemple, si l'on décide de de manipuler une demi-douzaine de variables, doit on les déclarer comme ceci : + +```python +var1 = int(input()) +var2 = int(input()) +var3 = int(input()) +var4 = int(input()) +var5 = int(input()) +var6 = int(input()) +``` + +Nous allons voir qu'avec une liste, nous allons pouvoir déclarer une variable à valeurs multiples. + +----------------- + +### Créer une liste + +Liste vide : + +```python +nom_liste = [ ] +``` + + On peut les créer par ***extension*** (comprendre *liste déclarée littéralement*) comme ceci : + +```python +nom_liste = [3, 8, 5, 4] +``` + +Mais aussi par ***compréhension*** (itération, que l'on verra plus loin) + +On peut tester ça dans la console python + +```python +lst = [2, 3, 5, 7 ] +type (lst) +``` + +Que retournent ces lignes python ? + +On peut afficher la liste de la même manière qu'une variable classique : avec la commande *print* + +```python +print(lst) +``` + +-------------- + +### Accéder aux élèments d'une liste + +Les élèments d'une liste peuvent être comparé à des élèments d'une séquence : chaque élèment a une position précise dans la liste, comme nous l'avons vu pour les chaînes de caractères (*str*) + +On appelle cette position *indice*, c'est cet indice qui nous permet d'accéder à un élèment en particulier. + +Le premier élèment d'une liste a pour indice **0** + +Tout comme avec les chaînes de caractères, un indice négatif permet d'accéder l'élèment en partant de la fin + +Pour connaître le nombre total d'élèments dans une liste, on utilise la fonction ***len*** + +```python +lst = [2,4,6,8] +len (lst) +``` + +On peut désigner une **tranche** en indiquant l'indice du premier élèment, ainsi que celui du dernier ***non inclus*** + +```py +lst [1:3] +``` + +Attention : Un indice qui dépasse la valeur *longueur de la liste - 1* provoquera une erreur dans votre code + +---------- + +### Parcours d'une liste + +Comme indiqué plus haut, il est possible de créer et de parcourir une liste par une méthode dite *de compréhension* ou *itération* + +Celà signifie qu'on construit une liste à partir d'élèments itérables : que l'on peut répétèr. Par exemple : + +```pyth +liste = [x for x in range(5)] +print(liste) +``` + +Que vous affiche la console ? + +L'intérêt des listes par compréhension, c'est que l'on peut utiliser les structures conditionnelles, à l'aide de boucles... + +On peut également initialiser une liste à partir d'une autre liste + +```pytho +liste = [1, 2, 3, 4] +nouvelle_liste = [2 * x for x in liste] +print(nouvelle_liste) +``` + +Une fois que la liste est crée, on peut la parcourir : + +```pyth +for elt in lst: + print (elt, end='') +``` + +Ici, on va afficher chaque élèment de la liste lst + +On peut également utiliser une boucle en itérant l'indice i des élèments : + +```python +for i in range (len(lst)): + print(lst[i], end='') +``` + +Ici, pour i compris entre 0 et longueur de lst, on va affichier l'élèment correspondant à l'indice valant i. + + À faire : + +- créer une liste par extension, puis par itération +- afficher les élèments d'une liste + +----------- + +### Propriétés d'une liste + +Une liste peut être modifiable : on parle d'un objet *mutable* + +- On peut donc supprimer un élèment d'une liste avec le mot clé *del* + + ```pyth + lst = [1,2,3,4,5] + del lst[0] + print(lst) + [2,3,4,5] + ``` + + Il faut noter qu'en supprimant l'élèment situé à l'indice 0, j'ai donc fait changer tous les indices des élèments de la liste ! + + + +- On peut également ajouter un élèment à la liste : + + ```py + lst = [1,2,3,4,5] + lst.append(6) + print (lst) + [1,2,3,4,5,6] + ``` + + L'élèment ajouté se positionne donc à la *fin* de la liste + + + +- Pour modifier un élèment en particulier, on lui affecte une nouvelle valeur + +```pyth +lst = [1,2,3,4,5] +lst[1] = 8 +print (lst) +[1,8,3,4,5,6] +``` + +Il est préférable de ne stocker que des données de même type dans une liste + +Une liste peut être passée comme paramètre d'une fonction + +-------- + + + +## Les tuples (ou p-uplets) + + À la différence des listes, les tuples ne sont ***pas mutables***. On ne peut donc plus les modifier une fois créés, leur taille est fixe. + +Mais ils peuvent néanmoins contenir des données de différents types. + +Pour initialiser un tuple, on utilise cette syntaxe : + +```pyth +tuple = (1, 3) +print (tuple) +(1, 3) +``` + +Ici, de la même manière que les listes, on pourra accéder à un élèment en particulier via son indice + +```python +tuple = (1, 3, 5, 7, 9) +tuple[-1] +9 +``` + +De plus, on peut tout à fait utiliser l'itération pour construire ou parcourir une structure tuple. + +Enfin, il est courant, dans une fonction, de renvoyer plusieurs valeurs. Par exemple, via ce type de syntaxe : + +```pyth +return a, b +``` + +En réalité, cette syntaxe signifie : return (a, b) : on a donc un tuple composé des variables a et b qui est renvoyé. + +---------- + +### À retenir: + +***Pour les listes et tuples :*** + +| Opération | Résultat | +| ---------- | ------------------------------------------------------------ | +| x in t | Renvoie True si un élément de t est égal à x | +| x not in t | Renvoie True si aucun élément de t n'est égal à x, False sinon | +| len(t) | Renvoie le nombre d'éléments de t | +| t == t1 | Renvoie True si t et t1 sont de même type, ont la même longueur, et ont des éléments égaux 2 à 2 | + +| Opération | Résultat | +| ---------- | ------------------------------------------------------------ | +| t[i] | Renvoie l'élément d'indice i de t | +| t[i:j] | Renvoie une partie de t de l'indice i à j non inclus | +| t.index(x) | Renvoie l'indice de la première apparition de x dans t | +| t.count(x) | Renvoie le nombre d'apparitions de x dans t | +| s + t | Renvoie une nouvelle séquence qui correspond à la concaténation de s et de t (seulement si s et t ont le même type | + +***Uniquement pour les listes :*** + +| Opération | Résultat | +| -------------- | ------------------------------------------------------------ | +| l.append(x) | Ajoute l'élément x à la fin de la liste l | +| l[i] = x | Modifie la liste et affecte la valeur x à la case d'indice i | +| l.insert(i, x) | Insère l'élément x dans la liste l à la position de l'indice i | +| l.remove(x) | Supprime de la liste le premier élément dont la valeur est égale à x | +| l.pop(i) | Enlève de la liste l'élément à la position i et renvoie sa valeur | diff --git a/representation_construits/chapitre_1/TABLEAUX.md b/representation_construits/chapitre_1/TABLEAUX.md new file mode 100644 index 0000000..e3ab0b0 --- /dev/null +++ b/representation_construits/chapitre_1/TABLEAUX.md @@ -0,0 +1,40 @@ +# Tableaux Python + + + +En python, un tableau est une liste de listes + +```python +tableau = [[2,4,3,7],[1,3,6,7],[5,7,0,2],[1,8,9,3]] +``` + +On peut représenter le tableau suivant de cette manière : + +| 2 | 4 | 3 | 7 | +| ---- | ---- | ---- | ---- | +| 1 | 3 | 6 | 7 | +| 5 | 7 | 0 | 2 | +| 1 | 8 | 9 | 3 | + +Pour accéder à un élèment d'un tableau, puisqu'il s'agit d'une liste de liste, on utilisera deux *indices* : + +- L'indice de la liste contenant l'élèment +- L'indice de l'élèment dans la liste + +On accède donc à l'élèment situé en ligne n°i et colonne n° j par + +```pyth +tab [i][j] +``` + +Par exemple si l'on reprend le tableau ci dessus : + +```python +tableau [2][3] +2 +``` + +Soit le tableau t = [["a","b"],["c","d"],["e","f"],["g","h"]] + +Comment accéder à l'élément "e" ? + diff --git a/representation_construits/chapitre_1/projet/README.md b/representation_construits/chapitre_1/projet/README.md new file mode 100644 index 0000000..e857db2 --- /dev/null +++ b/representation_construits/chapitre_1/projet/README.md @@ -0,0 +1,139 @@ +# Projet - Désamorceur de bombes + +![bombe](./assets/bomb.png) + +## 1. Contexte + +Ce jeu est une adaptation du jeu ___[Keep Talking and nobody explodes](https://keeptalkinggame.com/)___, de l'éditeur steelcrategames.com où l'objectif est de désamorcer une bombe en coupant le bon fil. + +Cette adaptation a pour but de mettre en oeuvre les connaissances acquises en python, notamment les types construits, les boucles, les structures conditionnelles et les fonctions. + +## 2. Description + +### 2.1. Règles + +- Une bombe peut contenir entre 3 et 6 fils. +- Seul un fil a besoin d'être coupé pour désarmer la bombe. +- Les fils sont ordonnés de haut en bas. +- A l'armement de la bombe, l'utilisateur est invité à indiquer l'indice du fil qu'il souhaite couper. + +Les règles complètes de désamorçage sont décrites en annexe. Pour __3 fils__, les règles sont les suivantes + +```txt +S'il n'y a pas de fil rouge, couper le deuxième fil. +Sinon, si le dernier fil est blanc, couper le dernier fil. +Sinon, s'il y a plus d'un fil bleu, couper le dernier fil bleu. +Sinon, couper le dernier fil. +``` + +### 2.2. Exemples + +| Exemple | Explication | +| :--: | :-- | +| ![](./assets/exemple_1.png) | Le fil à couper est celui à l'indice 1, soit le deuxième fil.
    La règle qui le justifie : il n'y a pas de fil rouge. | +| ![](./assets/exemple_2.png) | Le fil à couper est celui à l'indice 2, soit le dernier fil.
    La règle qui le justifie : Toutes les règles ne sont pas satisfaites, c'est le dernier sinon qui s'applique. | + +## 3. Consignes + +Vous devez créer un module `desamorceur` qui va permettre de : + +- créer une combinaison aléatoire de couleur pour $`n`$ fils, +- créer une bombe de $`n`$ fils, +- afficher une bombe, +- créer un numéro de série sur 8 chiffres, +- déterminer si le fil choisi désarme la bombe ou non, +- ... ainsi que d'autres fonctions nécessaires à l'implantation du jeu (Cf. Partie "Petit manuel du désamorceur de bombes"). + +L'algorithme principal est le suivant : +```python +bombe = creer_bombe(creer_combinaison(combinaison)) +numero_serie = creer_numero_serie() + +print(f"n°{numero_serie}") + +afficher_bombe(bombe) + +indice = input('Indice du fils à couper : ') + +if est_bon_fil_a_couper(bombe, int(indice), numero_serie): + print('Sauvé !!!') +else: + print('Perdu, la bombe a explosé') +``` +***N.B : Vous devez, pour chaque fonction y adjoindre les docstrings et doctests nécessaires*** + +Le module sera exécutable de la manière suivante : + +> python3 desamorceur.py 4 + +où le 2ème paramètres correspond au nombre de fils de la bombe + +## 4. Matériel fourni + +Le module `paint` dispose de : + +- 5 variables : `ROUGE, VERT, JAUNE, BLEU, BLANC`, qui permettent de matérialiser les couleurs des fils, +- d'une méthode `dessiner` qui permet d'afficher une matrice passée en paramètre. + +
    +
    +
    Fig 2. Exemple d'utilisation du module paint
    +
    + +## 5. Rendu + +- un script `desamorceur.py`, +- un fichier `README.md` qui présente vos choix de structures de données, les autres fonctions implantées..., ainsi qu'un extrait de codes ou le decriptif d'un problème rencontré et la solution mise en place. + +## 6. Annexe - Petit manuel du désamorceur de bombes + +Voici les règles pour désamorcer la bombe : + +__3 fils__ : + +S'il n'y a pas de fil rouge, couper le deuxième fil. + +Sinon, si le dernier fil est blanc, couper le dernier fil. + +Sinon, s'il y a plus d'un fil bleu, couper le dernier fil bleu. + +Sinon, couper le dernier fil. + +__4 fils__ : + +S'il y a plus d'un fil rouge et si le dernier chiffre du numéro de série est impair, couper le dernier fil rouge. + +Sinon, si le dernier fil est jaune et s'il n'y a pas de fil rouge, couper le premier fil. + +Sinon, s'il y a exactement un fil bleu, couper le premier fil. + +Sinon, s'il y a plus d'un fil jaune, couper le dernier fil. + +Sinon, couper le deuxième fil. + +__5 fils__ : + +Si le dernier fil est vert et si le dernier chiffre du numéro de série est impair, couper le quatrième fil. + +Sinon, s'il y a exactement un fil rouge et plus d'un fil jaune, couper le premier fil. + +Sinon, s'il n'y a pas de fil vert, couper le deuxième fil. + +Sinon, couper le premier fil. + +__6 fils__ : + +S'il n'y a pas de fil jaune et si le dernier chiffre du numéro de série est impair, couper le troisième fil. + +Sinon, s'il y a exactement un fil jaune et plus d'un fil blanc, couper le quatrième fil. + +Sinon, s'il n'y a pas de fil rouge, couper le dernier fil. + +Sinon, couper le quatrième fil. + +## 7. Pour aller plus loin + +Dans le cas où les éléments du projet sont finalisés, vous pouvez le compléter avec les éléments suivants : +- En cas d'explosion de la bombe, afficher à l'utilisateur l'indice du fil qu'il fallait couper pour désarmer la bombe, +- Mettre en place un numéro de série alphanumérique, qui comporte au moins 1 chiffre qui n'est pas forcément en dernière position, +- Doter le projet d'une interface graphique, via le module `pygame`. diff --git a/representation_construits/chapitre_1/projet/assets/bomb.png b/representation_construits/chapitre_1/projet/assets/bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..de91c191a1c3a3ef40b6eaa8484a0b77d311792d GIT binary patch literal 21627 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 B+i3s* literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/projet/assets/utilisation_paint.png b/representation_construits/chapitre_1/projet/assets/utilisation_paint.png new file mode 100644 index 0000000000000000000000000000000000000000..6bae16bdeab6f67ac88ec6ff465105962f933fe4 GIT binary patch literal 18894 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 0 and couleur_fils(bombe[i]) != couleur: + i -= 1 + return i + +def est_dernier_chiffre_impair(numero): + ''' + Détermine si le dernier chiffre du numéro de série est impair + :param numero: (str) un numéro de série + :return: (bool) True si le dernier chiffre est impair, False sinon + ''' + return int(numero) % 2 == 1 + +def est_bon_fil_a_couper(bombe, indice, numero_serie=None): + ''' + Détermine si le fil à l'indice donné est celui à couper + :param bombe: (list) une bombe de fils + :param indice: (int) l'indice du fils à couper + :return: (bool) True si le fils est le bon, False sinon + ''' + n = len(bombe) + if n == 3: + if compter_fils(bombe, ROUGE) == 0: + return indice == 1 + elif couleur_fils(bombe[n - 1]) == BLANC: + return indice == n - 1 + elif compter_fils(bombe, BLEU) > 1: + return indice == indice_dernier_fils(bombe, BLEU) + else: + return indice == n - 1 + elif n == 4: + if compter_fils(bombe, ROUGE) > 1 and est_dernier_chiffre_impair(numero_serie): + return indice == indice_dernier_fils(bombe, ROUGE) + elif couleur_fils(bombe[n - 1]) == JAUNE and compter_fils(bombe, ROUGE) == 0: + return indice == 0 + elif compter_fils(bombe, BLEU) == 1: + return indice == 0 + elif compter_fils(bombe, JAUNE) > 1: + return indice == n - 1 + else: + return indice == 1 + elif n == 5: + if couleur_fils(bombe[n - 1]) == VERT and est_dernier_chiffre_impair(numero_serie): + return indice == 3 + elif compter_fils(bombe, ROUGE) == 1 and compter_fils(bombe, JAUNE) > 1: + return indice == 0 + elif compter_fils(bombe, VERT) == 0: + return indice == 1 + else: + return indice == 0 + else: + if compter_fils(bombe, JAUNE) == 0 and est_dernier_chiffre_impair(numero_serie): + return indice == 2 + elif compter_fils(bombe, JAUNE) == 1 and compter_fils(bombe, BLANC) > 1: + return indice == 3 + elif compter_fils(bombe, ROUGE) == 0: + return indice == n - 1 + else: + return indice == 3 + +if __name__ == '__main__': + combinaison = 3 + numero_serie = None + if len(sys.argv) > 1: + combinaison = int(sys.argv[1]) + if combinaison > 3: + numero_serie = creer_numero_serie() + + bombe = creer_bombe(creer_combinaison(combinaison)) + + if numero_serie is not None: + print(f"n°{numero_serie}") + + afficher_bombe(bombe) + + indice = input('Indice du fils à couper : ') + + if est_bon_fil_a_couper(bombe, int(indice), numero_serie): + print('Sauvé !!!') + else: + print('Perdu, la bombe a explosé') \ No newline at end of file diff --git a/representation_construits/chapitre_1/projet/paint.py b/representation_construits/chapitre_1/projet/paint.py new file mode 100644 index 0000000..c8054d1 --- /dev/null +++ b/representation_construits/chapitre_1/projet/paint.py @@ -0,0 +1,44 @@ +#! /usr/bin/env python3 +# -*- coding : utf-8 -*- +# Author : Philippe BODDAERT +# Date : 28/12/2020 +# License : CC-BY-NC-SA +''' Affichage en couleur ''' + +NOIR = 0 +ROUGE = 1 +VERT = 2 +JAUNE = 3 +BLEU = 4 +MAGENTA = 5 +CYAN = 6 +BLANC = 7 + +def case_couleur(back = 9): + ''' + Renvoi le texte d'un espace dont la couleur de fond est celle donnée + :param back: (int) le code couleur du fond du texte + ''' + return couleur(' ', back) + +def couleur(texte, back = 9, fore = 9): + ''' + Renvoi le texte dans la couleur donnée + :param fore: (int) le code couleur du texte + :param back: (int) le code couleur de fond du texte + :param texte: (str) texte à mettre en couleur + :return: (str) le texte mis en couleur pour affichage + ''' + return f'\033[3{fore}m\033[4{back}m{texte}\033[39m\033[49m' + +def dessiner(matrice): + ''' + Affiche le contenu de la matrice sous la forme de cases colorées + :param matrice: (list) un tableau de tableaux + :return: None + :CU: les valeurs de la matrice doivent être comprises entre 0 et 7 inclus + ''' + for ligne in matrice: + for colonne in ligne: + print(case_couleur(colonne), sep = '', end = '') + print('') \ No newline at end of file diff --git a/representation_construits/chapitre_1/td/TD.ipynb b/representation_construits/chapitre_1/td/TD.ipynb new file mode 100644 index 0000000..4c0ec46 --- /dev/null +++ b/representation_construits/chapitre_1/td/TD.ipynb @@ -0,0 +1,572 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TD : Les Tableaux\n", + "\n", + "Ce TD va nous permettre de manipuler les tableaux en Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Rappel\n", + "\n", + "Pour créer un tableau en python, la syntaxe est la suivante :\n", + "\n", + "```python\n", + ">>> tableau = []\n", + "```\n", + "\n", + "Pour ajouter un élément à un tableau, on utilise la méthode `append` :\n", + "\n", + "```python\n", + ">>> tableau.append('NSI')\n", + ">>> tableau.append('ANGLAIS')\n", + ">>> tableau\n", + "['NSI', 'ANGLAIS']\n", + "```\n", + "\n", + "Pour accéder à un élément, on utilise son **indice** :\n", + "\n", + "```python\n", + ">>> tableau[0]\n", + "'NSI'\n", + ">>> tableau[1]\n", + "'ANGLAIS'\n", + "```\n", + "\n", + "Il est également possible de créer un tableau avec un ensemble d'éléments :\n", + "\n", + "```python\n", + ">>> tableau = ['NSI', 'ANGLAIS', 'PHYSIQUE']\n", + ">>> tableau\n", + "['NSI', 'ANGLAIS', 'PHYSIQUE']\n", + "```\n", + "\n", + "Il est possible d'obtenir la taille du tableau, i.e le nombre d'éléments grâce à la méthode `len` :\n", + "\n", + "```python\n", + ">>> len(tableau)\n", + "3\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Exercices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 1 : Création de tableaux\n", + "\n", + "1. Créer un tableau contenant l'ensemble des noms des personnes dans la salle de TP\n", + "2. Créer un tableau contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n", + "3. Afficher uniquement les entiers du tableau, construit à la question 2, qui sont multiples de 4.\n", + "4. Créer une fonction `aleatoire` qui renvoie un tableau de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n", + " - $n$ : le nombre d'éléments du tableau\n", + " - $min$ : la valeur minimale possible\n", + " - $max$ : la valeur maximale possible" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 2 : Parcours et Recherche\n", + "\n", + "```python\n", + ">>> groupe_1 = ['Alan', 'Brice', 'Chloé', 'Damien', 'Eléonore', 'Farid']\n", + ">>> groupe_2 = ['Damien', 'Killian', 'Margot', 'Tom', 'Hugo', 'Killian']\n", + "```\n", + "\n", + "1. Écrire une fonction `indice` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir l'indice du nom dans le tableau.\n", + "2. Écrire une fonction `est_present` qui prend en paramètre un tableau et un nom et renvoie True si le nom est présent dans le tableau, False sinon.\n", + "3. Écrire une fonction `indices` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir l'ensemble des indices du nom dans le tableau.\n", + "4. Écrire une fonction `compte` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir le nombre d'occurrences du nom dans le tableau." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 3 : Agrégation\n", + "\n", + "```python\n", + ">>> notes = [14.5, 13, 7, 10.25, 16, 12.5, 9.5]\n", + "```\n", + "\n", + "1. Écrire une fonction `somme` qui prend en paramètre un tableau de flottants et renvoie la somme des valeurs du tableau.\n", + "2. Écrire une fonction `moyenne` qui prend en paramètre un tableau de flottants et renvoie la valeur moyenne du tableau.\n", + "3. Écrire une fonction `maximum` qui prend en paramètre un tableau de flottants et renvoie la valeur maximale du tableau. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 4 : Manipulations sur les tableaux\n", + "\n", + "Pour tester les fonctions de manipulations, nous utiliserons le Code Konami[wikipédia](https://fr.wikipedia.org/wiki/Code_Konami)\n", + "\n", + "```python\n", + ">>> code = [\"↑\", \"↑\", \"↓\",\"↓\", \"←\", \"→\", \"←\", \"→\", \"B\", \"A\"]\n", + "```\n", + "\n", + "1. Écrire une méthode `inverser` qui prend en paramètre un tableau et a pour effet de bord d'inverser l'ensemble des valeurs du tableau.\n", + "2. Écrire une fonction `copie` qui prend en paramètre un tableau et renvoie une copie du tableau.\n", + "3. Écrire une méthode `dedoublonner` qui prend en paramètre un tableau et a pour effet de bord de supprimer les doublons d'une même valeur. \n", + "4. Écrire une fonction `tranche` qui prend en paramètre un tableau et deux entiers $min$ et $max$, et renvoie le sous-tableau entre $min$ et $max$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 5 : Matrice\n", + "\n", + "1. Écrire une fonction `ligne` qui prend en paramètre une matrice et un indice de ligne en entrées et renvoie un tableau avec l'ensemble des valeurs de la ligne.\n", + "2. Écrire une fonction `colonne` qui prend en paramètre une matrice et un indice de colonne en entrées et renvoie un tableau avec l'ensemble des valeurs de la colonne.\n", + "3. Écrire une fonction `diagonale_nord_ouest` qui prend en paramètre une matrice et renvoie un tableau avec l'ensemble des valeurs de la diagonale. La première valeur est celle à l'indice \\[0]\\[0] et la dernière celle correspondant à l'indice \\[len(matrice) - 1]\\[len(matrice) - 1].\n", + "4. Écrire une fonction `diagonale_nord_est` qui prend en paramètre une matrice et renvoie un tableau avec l'ensemble des valeurs de la diagonale. La première valeur est celle à l'indice \\[0]\\[len(matrice) - 1] et la dernière celle correspondant à l'indice \\[len(matrice) - 1]\\[0]." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Application - Carré magique\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig 1. - Carré d'ordre 4
    163213
    510118
    96712
    415141
    \n", + "\n", + "\n", + "En mathématiques, un ***carré magique*** d’ordre $n$ est composé de $n^2$ entiers strictement positifs, écrits sous la forme d’un tableau carré. Ces nombres sont disposés de sorte que leurs sommes sur chaque rangée, sur chaque colonne et sur chaque diagonale principale soient égales. On nomme alors ***constante magique*** la valeur de ces sommes.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig 1.1 - Carré magique avec sa constante égale à 34
    163213→34
    510118→34
    96712→34
    415141→34
    ↙ 34↓ 34↓ 34↓ 34↓ 34↘ 34
    \n", + "\n", + "\n", + "> Écrire un prédicat `est_magique` qui prend une matrice d'entiers en paramètre et indique si le carré est magique ou non." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Carré magique de lettres\n", + "\n", + "Un ***carré magique de lettres***, également appelé « ***mots carrés*** », est une forme de mots croisés disposé en carré, ne comportant pas de case noire et constitué de mots valides dans une langue définie. Ils peuvent, par définition, être lus horizontalement et verticalement et présentent dans ces deux sens les mêmes mots.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "
    Fig.2.1 - Carré magique de lettres d'ordre 3
    TEL
    ETE
    LES
    \n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.2.2 - Carré magique de lettres d'ordre 5
    CULTE
    UNIES
    LIONS
    TENTA
    ESSAI
    \n", + "\n", + "> Écrire un prédicat `est_magique_lettres` qui prend une matrice de caractères en paramètre et indique si le carré est magique de lettres ou non." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Application - Pour aller plus loin\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3 - Dessin d'une maison
    \n", + "\n", + "Déclaration de la matrice correspondante à la Fig.1 :\n", + "```python\n", + "matrice = [\n", + " ['⚪', '⚪', '⚪', '⚫', '⚪', '⚪'],\n", + " ['⚪', '⚪', '⚫', '⚪', '⚫', '⚪'],\n", + " ['⚪', '⚫', '⚪', '⚪', '⚪', '⚫'],\n", + " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫'],\n", + " ['⚫', '⚪', '⚫', '⚪', '⚪', '⚫'],\n", + " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫']\n", + "]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Écrire une méthode `miroir_vertical` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir vertical sur les valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.1 - Effet miroir vertical de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Écrire une méthode `miroir_horizontal` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir horizontal sur les valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.2 - Effet miroir horizontal de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Écrire une fonction `rotation_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens horaire des valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.3 - Roration horaire de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Écrire une fonction `rotation_anti_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens anti-horaire des valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.4 - Roration anti-horaire de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour valider vos fonctions, vous pouvez réaliser sur papier les opérations miroir et de rotation sur la Fig.4 et vérifier que les résultats obtenus sont conformes.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.4 - Dessin d'un bateau avec une mouette
    \n", + "\n", + "Déclaration de la matrice correspondante à la Fig.4 :\n", + "```python\n", + "matrice = [\n", + " ['⚪', '⚪', '⚫', '⚪', '⚪', '⚪', '⚪'],\n", + " ['⚪', '⚫', '⚫', '⚪', '⚫', '⚪', '⚫'],\n", + " ['⚫', '⚪', '⚫', '⚪', '⚪', '⚫', '⚪'],\n", + " ['⚪', '⚫', '⚫', '⚪', '⚪', '⚪', '⚪'],\n", + " ['⚪', '⚪', '⚫', '⚪', '⚪', '⚪', '⚪'],\n", + " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫', '⚫'],\n", + " ['⚫', '⚪', '⚪', '⚪', '⚪', '⚪', '⚫'],\n", + " ['⚪', '⚫', '⚫', '⚫', '⚫', '⚫', '⚪']\n", + "]\n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/representation_construits/chapitre_1/td/correction.ipynb b/representation_construits/chapitre_1/td/correction.ipynb new file mode 100644 index 0000000..9c10baa --- /dev/null +++ b/representation_construits/chapitre_1/td/correction.ipynb @@ -0,0 +1,940 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TD : Les Tableaux\n", + "\n", + "Ce TD va nous permettre de manipuler les tableaux en Python." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Rappel\n", + "\n", + "Pour créer un tableau en python, la syntaxe est la suivante :\n", + "\n", + "```python\n", + ">>> tableau = []\n", + "```\n", + "\n", + "Pour ajouter un élément à un tableau, on utilise la méthode `append` :\n", + "\n", + "```python\n", + ">>> tableau.append('NSI')\n", + ">>> tableau.append('ANGLAIS')\n", + ">>> tableau\n", + "['NSI', 'ANGLAIS']\n", + "```\n", + "\n", + "Pour accéder à un élément, on utilise son **indice** :\n", + "\n", + "```python\n", + ">>> tableau[0]\n", + "'NSI'\n", + ">>> tableau[1]\n", + "'ANGLAIS'\n", + "```\n", + "\n", + "Il est également possible de créer un tableau avec un ensemble d'éléments :\n", + "\n", + "```python\n", + ">>> tableau = ['NSI', 'ANGLAIS', 'PHYSIQUE']\n", + ">>> tableau\n", + "['NSI', 'ANGLAIS', 'PHYSIQUE']\n", + "```\n", + "\n", + "Il est possible d'obtenir la taille du tableau, i.e le nombre d'éléments grâce à la méthode `len` :\n", + "\n", + "```python\n", + ">>> len(tableau)\n", + "3\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Exercices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 1 : Création de tableaux\n", + "\n", + "1. Créer un tableau contenant l'ensemble des noms des personnes dans la salle de TP\n", + "2. Créer un tableau contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n", + "3. Afficher uniquement les entiers du tableau, construit à la question 2, qui sont multiples de 4.\n", + "4. Créer une fonction `aleatoire` qui renvoie un tableau de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n", + " - $n$ : le nombre d'éléments du tableau\n", + " - $min$ : la valeur minimale possible\n", + " - $max$ : la valeur maximale possible" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "personnes = ['Albert', 'Bertrand', 'Camille']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "pairs = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "for entier in pairs:\n", + " if entier % 4 == 0:\n", + " print(entier)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4\n", + "import random\n", + "def aleatoire(n, min, max):\n", + " tableau = []\n", + " for i in range(n):\n", + " tableau.append(random.randint(min, max))\n", + " return tableau" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 2 : Parcours et Recherche\n", + "\n", + "```python\n", + ">>> groupe_1 = ['Alan', 'Brice', 'Chloé', 'Damien', 'Eléonore', 'Farid']\n", + ">>> groupe_2 = ['Damien', 'Killian', 'Margot', 'Tom', 'Hugo', 'Killian']\n", + "```\n", + "\n", + "1. Écrire une fonction `indice` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir l'indice du nom dans le tableau.\n", + "2. Écrire une fonction `est_present` qui prend en paramètre un tableau et un nom et renvoie True si le nom est présent dans le tableau, False sinon.\n", + "3. Écrire une fonction `indices` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir l'ensemble des indices du nom dans le tableau.\n", + "4. Écrire une fonction `compte` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir le nombre d'occurrences du nom dans le tableau." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "def indice(tableau, element):\n", + " '''\n", + " Indique l'indice où se situe l'élément dans le tableau\n", + " :param tableau: (list) un tableau\n", + " :param element: (any) un élément\n", + " :return: (int) le premier indice de l'élément dans le tableau, None sinon\n", + " :doctest:\n", + " >>> indice([0, 1, 2, 3], 1)\n", + " 1\n", + " >>> indice([], 1) is None\n", + " True\n", + " >>> indice([3, 2, 0, 1], 1)\n", + " 3\n", + " >>> indice([3, 2, 1, 1], 1)\n", + " 2\n", + " '''\n", + " i = 0\n", + " while i < len(tableau) and tableau[i] != element:\n", + " i += 1\n", + " if i == len(tableau):\n", + " return None\n", + " return i" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "def est_present(tableau, element):\n", + " '''\n", + " Indique si l'élément est dans la liste\n", + " :param tableau: (list) un tableau\n", + " :param element: (any) un élément\n", + " :return: (bool) True si l'élément est dans la liste, False sinon\n", + " :doctest;\n", + " >>> est_present([0, 1, 2, 3], 1)\n", + " True\n", + " >>> est_present([], 1)\n", + " False\n", + " >>> est_present(['Belgique', 'Pays-Bas', 'Luxembourg'], 'France')\n", + " False\n", + " >>> est_present([3, 2, 1, 1], 1)\n", + " True\n", + " '''\n", + " return indice(tableau, element) is not None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def indices(tableau, element):\n", + " '''\n", + " Indique les indices où se situent l'élément dans le tableau\n", + " :param tableau: (list) un tableau\n", + " :param element: (any) un élément\n", + " :return: (list) les indices de l'élément dans le tableau\n", + " :doctest:\n", + " >>> indices([0, 1, 2, 3], 1)\n", + " [1]\n", + " >>> indices([], 1)\n", + " []\n", + " >>> indices([3, 2, 0, 1], 1)\n", + " [3]\n", + " >>> indices([3, 1, 2, 1], 1)\n", + " [1, 3]\n", + " '''\n", + " i = []\n", + " for j in range(len(tableau)):\n", + " if tableau[j] == element:\n", + " i.append(j)\n", + " return i" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4\n", + "def compte(tableau, element):\n", + " '''\n", + " Compte le nombre d'occurrences de l'élément dans le tableau\n", + " :param tableau: (list) Un tableau\n", + " :param element: (any) un élément\n", + " ;return: (int) le nombre d'occurrences de l'élément dans le tableau\n", + " :doctest:\n", + " >>> compte([], 1)\n", + " 0\n", + " >>> compte([1], 1)\n", + " 1\n", + " >>> compte([0], 1)\n", + " 0\n", + " >>> compte([1, 0, 1, 0], 1)\n", + " 2\n", + " '''\n", + " occurrences = 0\n", + " for x in tableau:\n", + " if x == element:\n", + " occurrences += 1\n", + " return occurrences" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 3 : Agrégation\n", + "\n", + "```python\n", + ">>> notes = [14.5, 13, 7, 10.25, 16, 12.5, 9.5]\n", + "```\n", + "\n", + "1. Écrire une fonction `somme` qui prend en paramètre un tableau de flottants et renvoie la somme des valeurs du tableau.\n", + "2. Écrire une fonction `moyenne` qui prend en paramètre un tableau de flottants et renvoie la valeur moyenne du tableau.\n", + "3. Écrire une fonction `maximum` qui prend en paramètre un tableau de flottants et renvoie la valeur maximale du tableau. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "def somme(tableau):\n", + " '''\n", + " Calcule la somme des éléments du tableau\n", + " :param tableau: (list) une tableau\n", + " :return: (int) la somme\n", + " :doctest:\n", + " >>> somme([1, 2, 3])\n", + " 6\n", + " >>> somme([1, -2, 3])\n", + " 2\n", + " >>> somme([])\n", + " 0\n", + " '''\n", + " _somme = 0\n", + " for element in tableau:\n", + " _somme += element\n", + " return _somme" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "def moyenne(tableau):\n", + " '''\n", + " Calcule la moyenne des éléments du tableau\n", + " :param tableau: (list) un tableau\n", + " :return: (float) la moyenne des éléments du tableau\n", + " :doctest:\n", + " >>> moyenne([1, 1, 1])\n", + " 1.0\n", + " >>> moyenne([1, 2, 3])\n", + " 2.0\n", + " >>> moyenne([])\n", + " Traceback (most recent call last):\n", + " ...\n", + " ZeroDivisionError: division by zero\n", + " '''\n", + " return somme(tableau) / len(tableau)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def maximum(tableau):\n", + " '''\n", + " Trouve l'élément avec la valeur maximale du tableau\n", + " :param tableau: (list) un tableau\n", + " :return: (int) l'élément de valeur maximale\n", + " :doctest:\n", + " >>> maximum([1, 2, 3])\n", + " 3\n", + " >>> maximum([-1, -2, -3])\n", + " -1\n", + " >>> maximum([]) is None\n", + " True\n", + " '''\n", + " if len(tableau) == 0:\n", + " return None\n", + " max = tableau[0]\n", + " for element in tableau:\n", + " if element > max:\n", + " max = element\n", + " return max" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 4 : Manipulations sur les tableaux\n", + "\n", + "Pour tester les fonctions de manipulations, nous utiliserons le Code Konami[wikipédia](https://fr.wikipedia.org/wiki/Code_Konami)\n", + "\n", + "```python\n", + ">>> code = [\"↑\", \"↑\", \"↓\",\"↓\", \"←\", \"→\", \"←\", \"→\", \"B\", \"A\"]\n", + "```\n", + "\n", + "1. Écrire une méthode `inverser` qui prend en paramètre un tableau et a pour effet de bord d'inverser l'ensemble des valeurs du tableau.\n", + "2. Écrire une fonction `copie` qui prend en paramètre un tableau et renvoie une copie du tableau.\n", + "3. Écrire une méthode `dedoublonner` qui prend en paramètre un tableau et a pour effet de bord de supprimer les doublons d'une même valeur. \n", + "4. Écrire une fonction `tranche` qui prend en paramètre un tableau et deux entiers $min$ et $max$, et renvoie le sous-tableau entre $min$ et $max$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "def inverser(tableau):\n", + " '''\n", + " Inverse les éléments du tableau\n", + " :param tableau: (list) un tableau\n", + " :doctest:\n", + " >>> t = [1, 2, 3]\n", + " >>> inverser(t)\n", + " >>> t\n", + " [3, 2, 1]\n", + " >>> t = ['b', 'o', 'n', 'j', 'o', 'u', 'r']\n", + " >>> inverser(t)\n", + " >>> t\n", + " ['r', 'u', 'o', 'j', 'n', 'o', 'b']\n", + " '''\n", + " debut = 0\n", + " fin = len(tableau) - 1\n", + " \n", + " while debut < fin:\n", + " tableau[debut], tableau[fin] = tableau[fin], tableau[debut]\n", + " debut += 1\n", + " fin -= 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "def copie(tableau):\n", + " '''\n", + " Renvoie une copie du tableau\n", + " :param tableau: (list) un tableau\n", + " :return: (list) une copie du tableau\n", + " :doctest:\n", + " >>> copie([1, 1, 1, 1])\n", + " [1, 1, 1, 1]\n", + " >>> copie([1, 2, 3, 4])\n", + " [1, 2, 3, 4]\n", + " >>> copie([])\n", + " []\n", + " '''\n", + " resultat = []\n", + " for element in tableau:\n", + " resultat.append(element)\n", + " return resultat" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def dedoublonner(tableau):\n", + " '''\n", + " Renvoie un tableau sans doublant\n", + " :param tableau: (list) un tableau\n", + " :return: (list) le tableau sans doublon\n", + " :doctest:\n", + " >>> dedoublonner([1, 1, 1, 1])\n", + " [1]\n", + " >>> dedoublonner([1, 2, 3, 4])\n", + " [1, 2, 3, 4]\n", + " >>> dedoublonner([1, 2, 1, 4])\n", + " [1, 2, 4]\n", + " '''\n", + " resultat = []\n", + " for element in tableau:\n", + " if not est_present(resultat, element):\n", + " resultat.append(element)\n", + " return resultat" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4\n", + "def tranche(tableau, debut, fin):\n", + " '''\n", + " Obtient une tranche du tableau\n", + " :param tableau: (list) un tableau\n", + " :param debut: (int) l'indice du début de la tranche\n", + " :param fin: (int) l'indice de fin de la tranche\n", + " :return: (list) un tableau contenant les éléments entre début et fin non inclus\n", + " :doctest:\n", + " >>> tranche([ i for i in range(10)], 0, 10)\n", + " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n", + " >>> tranche([ i for i in range(10)], 0, 5)\n", + " [0, 1, 2, 3, 4]\n", + " >>> tranche([ i for i in range(10)], 5, 10)\n", + " [5, 6, 7, 8, 9]\n", + " '''\n", + " sous_tableau = []\n", + " for i in range(debut, fin):\n", + " sous_tableau.append(tableau[i])\n", + " return sous_tableau" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercice 5 : Matrice\n", + "\n", + "1. Écrire une fonction `ligne` qui prend en paramètre une matrice et un indice de ligne en entrées et renvoie un tableau avec l'ensemble des valeurs de la ligne.\n", + "2. Écrire une fonction `colonne` qui prend en paramètre une matrice et un indice de colonne en entrées et renvoie un tableau avec l'ensemble des valeurs de la colonne.\n", + "3. Écrire une fonction `diagonale_nord_ouest` qui prend en paramètre une matrice et renvoie un tableau avec l'ensemble des valeurs de la diagonale. La première valeur est celle à l'indice \\[0]\\[0] et la dernière celle correspondant à l'indice \\[len(matrice) - 1]\\[len(matrice) - 1].\n", + "4. Écrire une fonction `diagonale_nord_est` qui prend en paramètre une matrice et renvoie un tableau avec l'ensemble des valeurs de la diagonale. La première valeur est celle à l'indice \\[0]\\[len(matrice) - 1] et la dernière celle correspondant à l'indice \\[len(matrice) - 1]\\[0]." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "def ligne(matrice, indice):\n", + " '''\n", + " Obtient un tableau comportant l'ensemble des valeurs de la ligne indice de la matrice\n", + " :param matrice: (list) une matrice\n", + " :param indice: (int) un entier\n", + " :return: (list) un tableau de valeurs de la ligne indice\n", + " :doctest:\n", + " >>> ligne([[1, 2],[3, 4]], 0)\n", + " [1, 2]\n", + " >>> ligne([[1, 2],[3, 4]], 1)\n", + " [3, 4]\n", + " '''\n", + " return matrice[indice]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "def colonne(matrice, indice):\n", + " '''\n", + " Obtient un tableau comportant l'ensemble des valeurs de la colonne indice de la matrice\n", + " :param matrice: (list) une matrice\n", + " :param indice: (int) un entier\n", + " :return: (list) un tableau de valeurs de la colonne indice\n", + " :doctest:\n", + " >>> colonne([[1, 2],[3, 4]], 0)\n", + " [1, 3]\n", + " >>> colonne([[1, 2],[3, 4]], 1)\n", + " [2, 4]\n", + " '''\n", + " return [ matrice[i][indice] for i in range(len(matrice[0]))]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def diagonale_nord_ouest(matrice):\n", + " '''\n", + " Obtient les valeurs de la diagonale de la matrice, dont l'origine est la valeur correspondant à l'indice [0][0]\n", + " :param matrice: (list) une matrice\n", + " :return: (list) un tableau de valeurs de la diagonale\n", + " :doctest:\n", + " >>> diagonale_nord_ouest([[1, 2], [3, 4]])\n", + " [1, 4]\n", + " >>> diagonale_nord_ouest([['A', 'D', 'C'], ['B', 'F', 'E'], ['H', 'I', 'G']])\n", + " ['A', 'F', 'G']\n", + " '''\n", + " return [matrice[i][i] for i in range(0, len(matrice))]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4\n", + "def diagonale_nord_est(matrice):\n", + " '''\n", + " Obtient les valeurs de la diagonale de la matrice, dont l'origine est la valeur correspondant à l'indice [0][len(matrice) - 1]\n", + " :param matrice: (list) une matrice\n", + " :return: (list) un tableau de valeurs de la diagonale\n", + " :doctest:\n", + " >>> diagonale_nord_est([[1, 2], [3, 4]])\n", + " [2, 3]\n", + " >>> diagonale_nord_est([['A', 'D', 'C'], ['B', 'F', 'E'], ['H', 'I', 'G']])\n", + " ['C', 'F', 'H']\n", + " '''\n", + " return [matrice[i][len(matrice[0]) - 1 - i] for i in range(0, len(matrice))]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Application - Carré magique\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig 1. - Carré d'ordre 4
    163213
    510118
    96712
    415141
    \n", + "\n", + "\n", + "En mathématiques, un ***carré magique*** d’ordre $n$ est composé de $n^2$ entiers strictement positifs, écrits sous la forme d’un tableau carré. Ces nombres sont disposés de sorte que leurs sommes sur chaque rangée, sur chaque colonne et sur chaque diagonale principale soient égales. On nomme alors ***constante magique*** la valeur de ces sommes.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig 1.1 - Carré magique avec sa constante égale à 34
    163213→34
    510118→34
    96712→34
    415141→34
    ↙ 34↓ 34↓ 34↓ 34↓ 34↘ 34
    \n", + "\n", + "\n", + "> Écrire un prédicat `est_magique` qui prend une matrice d'entiers en paramètre et indique si le carré est magique ou non." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def est_magique(matrice):\n", + " '''\n", + " Indique si le carré est magique ou non\n", + " :param matrice: (list) un carré d'entiers\n", + " :return: (bool) True si les sommes de chaque ligne, colonne et diagonale sont égales.\n", + " :doctest:\n", + " >>> est_magique([[2, 7, 6], [9, 5, 1], [4, 3, 8]])\n", + " True\n", + " >>> est_magique([[2, 7, 6], [9, 1, 5], [4, 3, 8]])\n", + " False\n", + " >>> est_magique([[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]])\n", + " True\n", + " '''\n", + " constante = somme(matrice[0])\n", + " return (\n", + " all([somme(ligne(matrice, i)) == constante for i in range(1, len(matrice))]) and\n", + " all([somme(colonne(matrice, i)) == constante for i in range(0, len(matrice[0]))]) and\n", + " somme(diagonale_nord_ouest(matrice)) == constante and\n", + " somme(diagonale_nord_est(matrice)) == constante\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Carré magique de lettres\n", + "\n", + "Un ***carré magique de lettres***, également appelé « ***mots carrés*** », est une forme de mots croisés disposé en carré, ne comportant pas de case noire et constitué de mots valides dans une langue définie. Ils peuvent, par définition, être lus horizontalement et verticalement et présentent dans ces deux sens les mêmes mots.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "
    Fig.2.1 - Carré magique de lettres d'ordre 3
    TEL
    ETE
    LES
    \n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.2.2 - Carré magique de lettres d'ordre 5
    CULTE
    UNIES
    LIONS
    TENTA
    ESSAI
    \n", + "\n", + "> Écrire un prédicat `est_magique_lettres` qui prend une matrice de caractères en paramètre et indique si le carré est magique de lettres ou non." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def est_magique_lettres(matrice):\n", + " '''\n", + " Indique si une matrice de caractères est un carré magique ou non\n", + " :param matrice: (list) une matrice de caractères\n", + " :return: (bool) True si la matrice est un carré magique de lettres, False sinon\n", + " :doctest:\n", + " >>> est_magique_lettres([['T', 'E', 'L'], ['E', 'T', 'E'], ['L', 'E', 'S']])\n", + " True\n", + " >>> est_magique_lettres([['T', 'E', 'L'], ['E', 'R', 'E'], ['L', 'A', 'S']])\n", + " False\n", + " >>> est_magique_lettres([['S', 'A', 'T', 'O', 'R'], ['A', 'R', 'E', 'P', 'O'], ['T', 'E', 'N', 'E', 'T'], ['O', 'P', 'E', 'R', 'A'], ['R', 'O', 'T', 'A', 'S']])\n", + " True\n", + " '''\n", + " return all([ ligne(matrice, i) == colonne(matrice, i) for i in range(len(matrice))])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Application - Pour aller plus loin\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3 - Dessin d'une maison
    \n", + "\n", + "Déclaration de la matrice correspondante à la Fig.1 :\n", + "```python\n", + "matrice = [\n", + " ['⚪', '⚪', '⚪', '⚫', '⚪', '⚪'],\n", + " ['⚪', '⚪', '⚫', '⚪', '⚫', '⚪'],\n", + " ['⚪', '⚫', '⚪', '⚪', '⚪', '⚫'],\n", + " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫'],\n", + " ['⚫', '⚪', '⚫', '⚪', '⚪', '⚫'],\n", + " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫']\n", + "]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Écrire une méthode `miroir_vertical` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir vertical sur les valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.1 - Effet miroir vertical de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "def miroir_vertical(matrice):\n", + " '''\n", + " Applique l'effet miroir par rapport à l'axe vertical sur une matrice\n", + " :param matrice: (list) une matrice\n", + " :doctest:\n", + " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n", + " >>> miroir_vertical(matrice)\n", + " >>> matrice\n", + " [[3, 2, 1], [6, 5, 4], [9, 8, 7]]\n", + " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n", + " >>> miroir_vertical(matrice)\n", + " >>> matrice\n", + " [['⚫', '⚪', '⚫'], ['⚫', '⚪', '⚪'], ['⚪', '⚫', '⚪']]\n", + " '''\n", + " for tableau in matrice:\n", + " inverser(tableau)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Écrire une méthode `miroir_horizontal` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir horizontal sur les valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.2 - Effet miroir horizontal de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "def miroir_horizontal(matrice):\n", + " '''\n", + " Applique l'effet miroir par rapport à l'axe horizontal sur une matrice\n", + " :param matrice: (list) une matrice\n", + " :doctest:\n", + " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n", + " >>> miroir_horizontal(matrice)\n", + " >>> matrice\n", + " [[7, 8, 9], [4, 5, 6], [1, 2, 3]]\n", + " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n", + " >>> miroir_horizontal(matrice)\n", + " >>> matrice\n", + " [['⚪', '⚫', '⚪'], ['⚪', '⚪', '⚫'], ['⚫', '⚪', '⚫']]\n", + " '''\n", + " inverser(matrice)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Écrire une fonction `rotation_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens horaire des valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.3 - Roration horaire de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def rotation_horaire(matrice):\n", + " '''\n", + " :param matrice: (list) une matrice\n", + " :doctest:\n", + " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n", + " >>> rotation_horaire(matrice)\n", + " [[7, 4, 1], [8, 5, 2], [9, 6, 3]]\n", + " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n", + " >>> rotation_horaire(matrice)\n", + " [['⚪', '⚪', '⚫'], ['⚫', '⚪', '⚪'], ['⚪', '⚫', '⚫']]\n", + " '''\n", + " resultat = []\n", + " for i in range(len(matrice[0])):\n", + " resultat.append(colonne(matrice, i))\n", + " miroir_vertical(resultat)\n", + " return resultat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Écrire une fonction `rotation_anti_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens anti-horaire des valeurs de la matrice.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.3.4 - Roration anti-horaire de la Fig.4
    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4\n", + "def rotation_anti_horaire(matrice):\n", + " '''\n", + " :param matrice: (list) une matrice\n", + " :doctest:\n", + " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n", + " >>> rotation_anti_horaire(matrice)\n", + " [[3, 6, 9], [2, 5, 8], [1, 4, 7]]\n", + " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n", + " >>> rotation_anti_horaire(matrice)\n", + " [['⚫', '⚫', '⚪'], ['⚪', '⚪', '⚫'], ['⚫', '⚪', '⚪']]\n", + " '''\n", + " resultat = []\n", + " for i in range(len(matrice[0]) - 1, -1, -1):\n", + " resultat.append(colonne(matrice, i))\n", + " return resultat" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour valider vos fonctions, vous pouvez réaliser sur papier les opérations miroir et de rotation sur la Fig.4 et vérifier que les résultats obtenus sont conformes.\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
    Fig.4 - Dessin d'un bateau avec une mouette
    \n", + "\n", + "Déclaration de la matrice correspondante à la Fig.4 :\n", + "```python\n", + "matrice = [\n", + " ['⚪', '⚪', '⚫', '⚪', '⚪', '⚪', '⚪'],\n", + " ['⚪', '⚫', '⚫', '⚪', '⚫', '⚪', '⚫'],\n", + " ['⚫', '⚪', '⚫', '⚪', '⚪', '⚫', '⚪'],\n", + " ['⚪', '⚫', '⚫', '⚪', '⚪', '⚪', '⚪'],\n", + " ['⚪', '⚪', '⚫', '⚪', '⚪', '⚪', '⚪'],\n", + " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫', '⚫'],\n", + " ['⚫', '⚪', '⚪', '⚪', '⚪', '⚪', '⚫'],\n", + " ['⚪', '⚫', '⚫', '⚫', '⚫', '⚫', '⚪']\n", + "]\n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/representation_construits/chapitre_1/tp/README.md b/representation_construits/chapitre_1/tp/README.md new file mode 100644 index 0000000..cdc4b38 --- /dev/null +++ b/representation_construits/chapitre_1/tp/README.md @@ -0,0 +1,108 @@ +--- +title : Les Drapeaux +author: M. BODDAERT +license: CC-BY-NC-SA +--- +# TP : Les Drapeaux + + + +Fig 1. Drapeau français + +## 1. Contexte + +Un drapeau peut être vu comme une matrice, i.e un tableau de tableaux, de dimension $n \times m$. + +Soient les codes couleurs suivants : + +| Code | Couleur associée | +| :--: | :----------------: | +| 0 | NOIR | +| 1 | ROUGE | +| 2 | VERT | +| 3 | JAUNE | +| 4 | BLEU | +| 5 | MAGENTA | +| 6 | CYAN | +| 7 | BLANC | + +Il est dès lors possible de représenter le drapeau français de la Fig.1 , en python, par la matrice $15 \times 7$ suivante : + +```python +>>> drapeau = [ + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1] +] +``` + +En utilisant le formalisme par compréhension : + +```python +>>> drapeau = [ [4] * 5 + [7] * 5 + [1] * 5 for _ in range(7)] +``` + +Ce formalisme compact traduit le fait que le drapeau français est constitué de ***5 cases bleues, 5 cases blanches et 5 cases rouges, et cela sur 7 lignes***. + +## 2. Matériel fourni + +Le module `paint` dispose de : + +- 8 variables : `NOIR, ROUGE, VERT, JAUNE, BLEU, MAGENTA, CYAN, BLANC`, qui permettent de matérialiser les couleurs, +- d'une méthode `dessiner` qui permet d'afficher un drapeau, à partir d'une matrice passée en paramètre, dans la console de l'interpréteur python. + +
    +
    +
    Fig 2. Exemple d'utilisation du module paint
    +
    + +## 3. Consignes + +Vous devez créer un module `drapeau`. + +Pour chaque drapeau de la liste fournie en Annexe, vous devez : + +- Formaliser la matrice modélisant le drapeau, + +- Identifier la structure algorithmique, + +- Écrire une fonction, dans le module `drapeau` qui permette de créer la matrice modélisant le drapeau. + +***N.B : Vous devez utiliser le formalisme par compréhension ou l'utilisation de boucle mais il est interdit d'utiliser l'affectation par valeur, case par case.*** + +Le module sera exécutable de la manière suivante : + +> python3 drapeau.py france + +Le résultat attendu étant l'affichage du drapeau du pays passé en paramètre. + +## 4. Annexe : Liste des pays et drapeaux + +| Pays | Drapeau | Consigne | +| :--: | :--: | :-- | +| Belgique | | Le drapeau est de dimension $ 15 \times 7$ | +| Pays-Bas | | Le drapeau est de dimension $ 15 \times 6$ | +| Suède | | Le drapeau est de dimension $ 15 \times 7$ | +| Finlande | | Le drapeau est de dimension $ 15 \times 7$ | +| Irlande | | Le drapeau est de dimension $ 15 \times 7$ | +| Côte d'Ivoire | | Vous devez utiliser la fonction de création du drapeau d'Irlande. | +| Bénin | | Le drapeau est de dimension $ 15 \times 6$ | +| Suisse | | Le drapeau est de dimension $ 15 \times 7$ | +| Guinée | | Le drapeau est de dimension $ 15 \times 7$ | +| Mali | | Vous devez utiliser la fonction de création du drapeau de Guinée. | +| Botswana | | Le drapeau est de dimension $ 15 \times 7$ | +| Monaco | | Le drapeau est de dimension $ 15 \times 6$ | +| Pologne | | Vous devez utiliser la fonction de création du drapeau de Monaco. | +| Japon | | Le drapeau est de dimension $ 15 \times 7$ | +| Hongrie | | Le drapeau est de dimension $ 15 \times 7$ | +| Iran | | Vous devez utiliser la fonction de création du drapeau de Hongrie. | +| Palaos | | Le drapeau est de dimension $ 15 \times 7$ | +| Grèce | | Le drapeau est de dimension $ 15 \times 6$ | +| Etats-Unis | | Le drapeau est de dimension $ 15 \times 6$ | +| République du Congo | | Le drapeau est de dimension $ 15 \times 7$ | +| Trinidad et Tobago | | Le drapeau est de dimension $ 15 \times 7$ | +| Jamaique | | Le drapeau est de dimension $ 15 \times 7$ | diff --git a/representation_construits/chapitre_1/tp/assets/belgique.png b/representation_construits/chapitre_1/tp/assets/belgique.png new file mode 100644 index 0000000000000000000000000000000000000000..6591087fc001bc526bb74204a95f787d1bd3130a GIT binary patch literal 7685 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 LRl&tCjQ#!x#u!wl literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/cote_ivoire.png b/representation_construits/chapitre_1/tp/assets/cote_ivoire.png new file mode 100644 index 0000000000000000000000000000000000000000..a23b0d45b4d036853b0867dc0d1cb0411d617595 GIT binary patch literal 7696 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 literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/etats_unis.png b/representation_construits/chapitre_1/tp/assets/etats_unis.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a13f9719dca14527945df29162de347791fc51 GIT binary patch literal 7782 zcmcI}WmH_-vTh?ukPzGBr(uP&;S4chO`t|`Kgb45*W(!r`A3Ab_@U@ z3W9<_O41+@g_47G?_!49x)k~HQu zzIVBOtY*7`zyAR66*AagBYlq=U@r*BSCs)9a{-8`6IjUz$tyk~84Tc{Dq?kqkn-uH zZ`tUlv1r%)S~IsrSu+KgqZm6F0|1UXY&sNiIDq~P4~$y&fE(pb{YhG)J!QmSEdV>q zHX)9Tj1^L%QZdBM2;UQIBFpPLkZIfFx1%$4kwmg%Lff5c4fC-457?CJ&5vohH$L&d zBNIf8g4<)Uh@hse8KPF5Aoy|JJQigifMGmS9(ls`@qOrB3e;-LK|2zEE`@SU>1L zN`Xe5mjoQvH|t36blBS!vaN4$KY4HZtotaUI68h}e+{4!iQ8?$?RI1{4MB4*pI;S6 zqeUh;yz9gzHfm+}`IAgQB8k;6Nq4wp(zNZFq`$=d2w@_&6!%hn_*oVb`C!fd=iGq%n9hAKm z0V}LN(~!L8Hq#m0nGBN^>0_jtowT=1r9Yzh5pXc+sZ`O1MubRB0We(NMd}d8N`E!L zJJ{J;qbUa<2Kxb)Ul`Xi__)_u)%dq7zK8^fbo63^?+?t%XLes08o+n;b|+N`u5D|& zZ7xxs+v<~{F^i+z37S@_PcMz6v|A>;yDuAIIMxO&H;h~^apA~S%;t98MKOsz2H_fo zv3DdG$gzE+XN_T%AvJj>da+XIKPm=&NIdYl9ST{zF!HdBIOb0V)+3Y6Yn-=>{KYs*eeMLy0 zEMKX70HOO1zweg?*nND=2$^g<1YFKs*~KLEPP33$tbGb>MiBPQkOJjthnNQAt_FcAp;D-$zK)bey=Xsz<|%CH0cf8M)4}u@eSr#M z&y?6zQMtuHasDPd$A^cDQK6s^AOqjMq>T727Ks&yBH6_X1{h*eAw+%U z3+$DQp|HT>#Uc-W5!@3D?RwEgg+l?2vXT!Xm23LtUP~S&I_1^a~8^8X6tPy1O zN!=ZpKRiY9;hllf06jtsb5qcuk^()N1*V1QE=nQ5iP#BgB7j7EFr7fj(wr*k1xxtk zyW}jL5rl0%$L9i=UZ`H=3m9p+8t0fVpLYgg_vClxjbPyV&jj)N@dp+3R2c=bm9c$+ zFvsCCg-^84>i?QHw|aibT=U%Hg<#nCpR6OlM~}zoM-qP5jrosckFJlXj#Q1j9Baza z=w@FA+iUWXrT}e#tS{69E!#0xP3`+#C7SqjUmOKvcH}Leoj6_F+^O90YHDgyYRYR0 zYBC-m%zDl;Rb82znfqWTpeQ4Q{N7Rq+Jz~Jo4*yJ^rXfKF$8;M3bH4;hC!s8WIYwM zGmUbivpDn4a%6LvvKz&D<*q_rO9EvSGneGk#L^^vV!b21QxSS7y7ha-Os9vHdhMbO zQVgP^5Ex;pNSPX#f=tn1Brswa?-?_C z;QN%HDYU_~$vJT*z9yeyL(~E$61h{WBQJRNxJbXrhYhB%__G9+L|KO&@CpJ2Llz>0 zqnp2aCEUM#!5btJ^hT0EQn<(H>rx70N_R?oN)LZBUz&YJU3T4m-D=$s%n3FKtF*I( zsnk{0k=DO;!xB;!x)i!~m2rc+5xCvB%DYj!4xcV=eBUx!8{0x(75q8X&D%3PP}Z-w zA^OuN=&>141dyfxQ|P73>WfE8{+45tD2LdI*=a~=_e#^NxS*-abJFB2e>)dx1g-7wxT z-2gIs+Fi=7C0A{78Vq}FPtbCEclY|QAAh}VOefIZ9z6tmlrb0^;>Sz zYT_;@Cl|kDBL6}|>!To~QRa5x)d{(`V4ri-DE27j9^RhZ9@@71p6>YfN!)Sjz1Z#M zal*-~iPr4LI2vg*s)z?1t9^}-rpA)XB-Dh*IaSm{{-N!$`J@6n;Aa5coB=hDY;oIa>;Fsq6 z$>$_6Cg>rcF7W8c?!dpoalm+#v<`0z?+@Rd-2dw2;@rC4vTd+$KWj9pGQrsivx>hi zz1Hz+talFDZ#j5>^!~D8H~iB1r1VsmaxPM~_lwA;$a@iVJWwBT-wQpjC6yMKw}AKC zyG8ikb=t8HVLGlIhd!$kkPT>;Y9Ymv?v2WU-hg$^IZanbhn<7_={~|3QoPDB zLpuYe3cj*pwznco+ERK;UNrJyH+`pl_hmy^Z`cWFHi(r>f;{*2>t59%q2&6wjbtZL zElNS4#|Fwq?|oLN zv`c}7_`Gi}D=#191`>BXi|#fnsmx%*rFh5$Labc$#lTgDK4!Sv(AE60+x?jnp)1f> z@7gQM-9B@=>RKWMBCX4i%T;qOp9s^it(S1ype>c1iT}vd!I%r2(>p9wEh{cwE$Azd zQ0-A2o^YKMD&#J-E{!f>Dm5z_Zb2;V(so-~USOLvpP6=3TeDc;9)h~GAYPV&gs$Q;MV%E#u z>2Uos>On~skYM0!;6rA=Uxc3ScJAd*F;(u^2HT!4p0<{F=AD;1 z4H+Mfctl)PzM&Ff9yaqdzJr`guZ~p@!_#gFwFymI!QL8=?(3vmwV_9hOM-;fglUf` z_Z4@XmLag6Q((AWbE}SbtIk)g_R{q-nbMkKjZ$G9OdY)l3dwK0Wr$LBRCo6X*O~}` z5e&elq+QZ-MeLb1A&uvaSevbx)GN5}_B)9T@Q0(3pG3f73g^&VWI})SjIqxUG`iV%wwr+Qcd^qpJl32O7Q#!Lz#KMzqF|#(r0NH;V&~dF!2x zb$QC5+xs0&?EqTrpRm zpW})inMr*VS&qR;(~OyndZ7DkCv{WqVQTTwo68ew<00-TK%ntSQOu z;O>HnS2OvL=W4!b&SCGPwPpK33{M~Vz4PVe6*;e<%3+f8O2eUx*?FXUoJZLL`XTOa za+A;9CpFOwpKXIh-&=~M<$g&M&_gFqCyZJxOFSaywGUCzYs}Qh#Ov#9Z-?QSzVXqq zNi&9Fd0i~MFa^SaeQ$Oa&h}d(86r@^cw)uCFa)mQF+DqD3*&<6ZZvf0bgHy#b*uO3F)C3(m{qB? z>69ro89p*CQrOG?cwY!=(AsR-FQ50n;|$me9gaz5R4fcD68T8_;mvqm*-XhqhL>dz z_jk<&j%LJrGUX)k6obeS*0t|+@Z3;S#LbrkZHDcq1!}cUgG13gw^m;J0|)qIeB_ip z{CNgjTC5wT{5GhE-miI51)W2VOfUVKMBEgkZatIeH(K7_kKU^wDkF{ML&Xc)p_By~ zPy^^n0d|3hGPO#Ua+ZqWtFG6KSzdSIzIvc6qmIyUpESq-+ zb@s}YGUr%TQZGubeI@_J&~MHEu-%m$&6G!c)-}AnKKK0sD8($KtLj|3akm_xPUsVd zCG)I*ypM(TpfuRuMan=;$4PR~{9vwONgV~lGyGItdTPH+#Rkls!<*Ki@yesTbTVqL zY<6+UZCrOQYJ%8qDql9;GRGrx%i^fQV_c;3w&}`8h-kmeH9=@ui2fGk!rUR>fX}E4 zrh38-KN*K~x=tcrgluGw;ytQtnw<|P>Y*rD4!gDr-B>t&Tpf&Z(PusT{QIs`F%jKa zkG5rumG%DaZtwoIXTmml4~Wq~A#0Af^65JGr37n+@(9^BP8j1Rf@hXa4nx<@YVJvp zd91k}){hXu;4{aq?E_+S;s)Xfb~kpWAL$SYjsBU{nG*hMeggg@7(T4$Z2DN{Sll!E zPW_n!@@IcJ|A2t0We?R#NUCd-1A+yKns^Vw zqwa5eXW7B8=m=d>T>VyP`WY_AwB0<-kk8%^g%V2P_Yp9ps_>V2i{ED2uorawh*6GH z_Fhre`nkT5!&qYxOVT*|yP+5!%A|ua7S1#^UBINcVa^p0i8!ut)tMk@h^LsW4DL1i6K)eP|ac; zMUhFV7?b_LxxxGC%OOtN&Od{g67;O2eu`NF4>!1=+q1jSFuGir>m^qzS1gyPy=fiQ zym}LV3v#Q>p2D2mG6fA*DsFf%x1*IKgJarG^L7xi9FYxYAv+J-FZK!ceoj4;5#t@> zYUA(v==xfQ!yA#S+neVre#<%*ZNmN0Ka1J~yWk4!8~vevmauut#NZbDmR`ue0cKE%ovqFU7K8tz(>tR;nO z_Edd#fox0d;5drzgm3dkvyvE-NRYabY9$jT?IuB!iXilwj1UG0)1m5*50w)&)HBI~ ze0=Ww0RnI9*Bjy*s~aLbm=6u-N;ck~h)CF+-Rv^0NS?G39sBhWf>BE`o*BGeak=c3 zh?A84IUfp}`yySJoX{w`?rT;k=`JP#Ur8!9ljL_ui6BfR6KReCD(S1l*tZlVbzD-whP~yylTjo5~r)D8(VFgeTLhPBacyT?1x+jqmxypQe&I= z*w(H?k1oFOK0C77oD?1Rbi5DK%)i}*lUGk4N8f$fa9NU>C4r9lhygIn5zw&!r@qK# z-t>IPGU6{>Q8Or^y{~2bDNDq?ymBife&d60RWO zViZhdCWqRzD=?ik4JE-(l1m~^;W=bJBwR#VQeaX@2HhrONhMHdV$E%jZ}0AyY!?w5 z6O#~E6E!C6CzvK=LChhc8r3TkUxPRYJjg0iGE;E1CF{fMr(A7L=#HUhB_}SZWY~@b zI0SGiPjwnaF35mViuzq`7w#`D<*l4GV=LpF^>T-!^;^7MJVgdt1{F1JRrv|7i4CqU zu4h%QRrStxd&hgByT5jeqQhR2Vcdt~gu&z- zFN_Q^bns8*j5rNgPk`pfY}8K=-OGqMiXvz?(vQenHvk81;N9=~s=;d8JLQQe0m2MX z)FU`{;G|IXrR4bXnC(PIUX4vLZ$>&6)_c(No8QrLJ;fQ+HIkCBd51hjCB>cfkPS{k z3Ur_Ex9%&jlc`a?c%^uaqHK$>UC%NyizbJI_qc2Fm0CNsjdM^z^2VX7rfnk+{W~^0 zHYmLp&5iwX-3soi@zPkr7Bf)B6s$|o(me!kg?dP)z+8Rcoo$liZ>xtz&?Q^6Zv@~6 zb5vuPGikZ9>w34|X^>Lw`bvSCOK;dc_VJDxqTlgMEuiK27Z5>M|FvO&loGNkVmKuV ziZJ+PCc()ohQM=>uEbDQ%!iPC4|AR>Q8-=TtF@r|&l}xzZ7vErNgQO@wU}3^itVB~ zPC4XnU9og=Kp{+y_2=KtgtBUs5;743f~(@1&xprI{0k0cb^ z6m*?`$Ad`XXZUWv0~tGvUil@<*LeLXyr=uJCMKiLv~Qv>g0YxBgki2=U%lj`N2YjI zLFq=Gm%C)`P-bdE3lqa!`oeKgMVNFtGs*8toc8o4b1(L}FX4yrB|H&0GbBpjoy)uu_w{iVu6CWg<1)!n)#T#l{L_5{&Um!j zK2gs-s@XnU>$Gb@oT^&x2A`{DoQ%afE(ZIM;95z8vv{jAJT3 z{h9b^0+BYAmj^IDVH5yD5EOv?gb<#D$g$idiD zKp8CYZ~D_nn9AJI(M|veba8QEb>U>Sbua_6^Yilq**Jh494t>3EHF14M*~+D8yNM! zocv!uU=x^;1JuqDYHLIB$FG5*t&^iL71f_We?R|vPZL+@eGK<}j!*6}z}8Ho&9 zC!DY3xp6xUOv>f$u@}0#9|j@<8SUJzE?FNwEw!{pB>Q|;eB%@6Ty{Tv3*Uq792uNf zwZ*Spoow#BO~aYS#hOe_+Y9h5Ctwp<{O=FiOipgHA|B&y`MuBM-8Xq_x9&O1QZw5w zcD16ZzqL!X#dlyQXVFj;)2w?vwf`-w1fN`=dQkbQ2Y)>3xd1twy+*$Kg6}IdjO@=1 zgW)6l|Ch1N(3vL+=`gY;qPi$|{f5ar)^SexClgIVtd9$QKPV}RpT|LU#2`*g{eiya zB#>Mu1cQkZW>Uls3;o2&XZ~unKdewtivCB0x@**SC+7YJU!RKIk8v0X2HfRxdx#x{ zS{gja{u6B+CFm$cHYPJzSRax4t5_+D8)8jBVh{}Gu?FAr{|zC2?yRMyhDHhdSS6ZC zh6fix5ACgmO{Q--Ra84z41&we`#}s6)vHfMQ5=$#OixiPWz2?+H3=S+$HV$a!;yf3 zVwt%~hlaw0LoD~SN*`dj&;0R2UeY0UB<0tKAa;a;pW`AJ$dAv15e(i_eGc(0r+aeW a_GY-9(Mv>bkmAoxDg9mnT>4Jm@BaYE4Wl>! literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/finlande.png b/representation_construits/chapitre_1/tp/assets/finlande.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe1b4d1bb284bf692d4674a14fabfc172868be3 GIT binary patch literal 7805 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 Sj7J(q7flHp71pFU1NuqiH literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/guinee.png b/representation_construits/chapitre_1/tp/assets/guinee.png new file mode 100644 index 0000000000000000000000000000000000000000..aa93747d60b1aec484863fffafa6c3afeb3d7367 GIT binary patch literal 7693 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 h{r@8T-*Zv>kD5W^62} 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 J(Q8BB{{pHb@R0xj literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/iran.png b/representation_construits/chapitre_1/tp/assets/iran.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7e749dbbb25ce7d243279c5d66ada9d825aece GIT binary patch literal 7598 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 literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/irlande.png b/representation_construits/chapitre_1/tp/assets/irlande.png new file mode 100644 index 0000000000000000000000000000000000000000..d67916cc9733702d03a614f18a74f393c4a8d7fc GIT binary patch literal 7685 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 W4+`F?1Xujo$YkCsf{Wi6`2H6(#a;mb literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/jamaique.png b/representation_construits/chapitre_1/tp/assets/jamaique.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9507093a1c344ecc93276bf9ae0ae1dcb56f2a GIT binary patch literal 8299 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 R)1RGG?v1i^>1(5a{{k*e$%X&` literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/mali.png b/representation_construits/chapitre_1/tp/assets/mali.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4335ff4130d7b2a571f6f3d22806ce1f4f52cb GIT binary patch literal 7684 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 X@vtzrwB6~?J|_2C8C>$p(C@zhah_h= literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/monaco.png b/representation_construits/chapitre_1/tp/assets/monaco.png new file mode 100644 index 0000000000000000000000000000000000000000..01c179491f48c1e1ef97d7f84d12b32ea25cbd16 GIT binary patch literal 7528 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 O3c1(H;L=w{0sjNjRw3{J literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/palaos.png b/representation_construits/chapitre_1/tp/assets/palaos.png new file mode 100644 index 0000000000000000000000000000000000000000..34f73d6672739201236990e25a147d4bac7d023b GIT binary patch literal 8127 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 M->85~UK{!U4{ZQx=Kufz literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/pologne.png b/representation_construits/chapitre_1/tp/assets/pologne.png new file mode 100644 index 0000000000000000000000000000000000000000..295eed8af571f3a21a51295a7d2a5afee4a65931 GIT binary patch literal 7539 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 VIQlEY`p>Q>{Z0W~{8rEVzW|Fpg5LlD literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/suisse.png b/representation_construits/chapitre_1/tp/assets/suisse.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e318b09d47034b28104bf9ab2e5f145ef31732 GIT binary patch literal 7745 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 D7f-tR literal 0 HcmV?d00001 diff --git a/representation_construits/chapitre_1/tp/assets/trinidad.png b/representation_construits/chapitre_1/tp/assets/trinidad.png new file mode 100644 index 0000000000000000000000000000000000000000..3bde60db8621f587b18f878b068a6b5082b6b55d GIT binary patch literal 7848 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 2: + if sys.argv[1] == 'all': + for nom, fonction in DRAPEAUX.items(): + print(nom) + dessiner(fonction()) + print('') + elif sys.argv[1] in DRAPEAUX: + dessiner(DRAPEAUX[sys.argv[1]]()) + else: + print(f'Le pays doit être dans la liste {list(DRAPEAUX.keys())}') diff --git a/representation_construits/chapitre_1/tp/paint.py b/representation_construits/chapitre_1/tp/paint.py new file mode 100644 index 0000000..c8054d1 --- /dev/null +++ b/representation_construits/chapitre_1/tp/paint.py @@ -0,0 +1,44 @@ +#! /usr/bin/env python3 +# -*- coding : utf-8 -*- +# Author : Philippe BODDAERT +# Date : 28/12/2020 +# License : CC-BY-NC-SA +''' Affichage en couleur ''' + +NOIR = 0 +ROUGE = 1 +VERT = 2 +JAUNE = 3 +BLEU = 4 +MAGENTA = 5 +CYAN = 6 +BLANC = 7 + +def case_couleur(back = 9): + ''' + Renvoi le texte d'un espace dont la couleur de fond est celle donnée + :param back: (int) le code couleur du fond du texte + ''' + return couleur(' ', back) + +def couleur(texte, back = 9, fore = 9): + ''' + Renvoi le texte dans la couleur donnée + :param fore: (int) le code couleur du texte + :param back: (int) le code couleur de fond du texte + :param texte: (str) texte à mettre en couleur + :return: (str) le texte mis en couleur pour affichage + ''' + return f'\033[3{fore}m\033[4{back}m{texte}\033[39m\033[49m' + +def dessiner(matrice): + ''' + Affiche le contenu de la matrice sous la forme de cases colorées + :param matrice: (list) un tableau de tableaux + :return: None + :CU: les valeurs de la matrice doivent être comprises entre 0 et 7 inclus + ''' + for ligne in matrice: + for colonne in ligne: + print(case_couleur(colonne), sep = '', end = '') + print('') \ No newline at end of file diff --git a/representation_construits/chapitre_2/.ipynb_checkpoints/README-checkpoint.ipynb b/representation_construits/chapitre_2/.ipynb_checkpoints/README-checkpoint.ipynb new file mode 100644 index 0000000..68de91c --- /dev/null +++ b/representation_construits/chapitre_2/.ipynb_checkpoints/README-checkpoint.ipynb @@ -0,0 +1,478 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bb1cfae9", + "metadata": {}, + "source": [ + "## Représentation des données : Les Dictionnaires " + ] + }, + { + "cell_type": "markdown", + "id": "c09a37ee", + "metadata": {}, + "source": [ + "-------------" + ] + }, + { + "cell_type": "markdown", + "id": "38d1e9f4", + "metadata": {}, + "source": [ + "> ***Contenue*** : Notions introduites : le type dictionnaire\n", + "\n", + "> ***Compétences*** : Construire une entrée de dictionnaire, savoir itérer sur es élèments d'un dictionnaire, connaître les méthodes." + ] + }, + { + "cell_type": "markdown", + "id": "0beaa407", + "metadata": {}, + "source": [ + "## Le programme" + ] + }, + { + "cell_type": "markdown", + "id": "dcbf1fd3", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "id": "57421c29", + "metadata": {}, + "source": [ + "![bo_tuple](../assets/bo_dico.png)" + ] + }, + { + "cell_type": "markdown", + "id": "401edcc8", + "metadata": {}, + "source": [ + "## Apport de connaissances" + ] + }, + { + "cell_type": "markdown", + "id": "717cce94", + "metadata": {}, + "source": [ + "--------" + ] + }, + { + "cell_type": "markdown", + "id": "0fc298dc", + "metadata": {}, + "source": [ + "Les dictionnaires Python permettent d'associer des valeurs à des clés : À partir d'une clé, on peut alors accéder directement à la valeur qui lui est associée." + ] + }, + { + "cell_type": "markdown", + "id": "607fa703", + "metadata": {}, + "source": [ + "### Propriétés" + ] + }, + { + "cell_type": "markdown", + "id": "9e023220", + "metadata": {}, + "source": [ + "Les dictionnaires sont des conteneurs, comme les listes et tuples, vus précédemment, et sont mutables : *on peut donc modifier, ajouter ou supprimer du contenu.*\n", + "\n", + "Par contre, contrairement aux types de conteneurs précédémment étudiés, on ne peut pas accéder au contenu d'un dictionnaire à l'aide d'un indice : un dictionnaire n'est pas une séquence.\n", + "\n", + "Si on peut bien modifier les valeurs dans un dictionnaire, chaque clé est *unique et non mutable*. Elle peut être une chaîne de caractères, un nombre, un tulle de nombre...\n", + "\n", + "Enfin, les valeurs, quant à elles, peuvent être quelconques." + ] + }, + { + "cell_type": "markdown", + "id": "555ca300", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "21761a39", + "metadata": {}, + "source": [ + "### Création et accès" + ] + }, + { + "cell_type": "markdown", + "id": "e219df29", + "metadata": {}, + "source": [ + "Pour initialiser un dictionnaire vide : " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "09f0144b", + "metadata": {}, + "outputs": [], + "source": [ + "dico = {}\n", + "#ou\n", + "dico = dict()" + ] + }, + { + "cell_type": "markdown", + "id": "766eeca7", + "metadata": {}, + "source": [ + "Pour initialiser un dictionnaire avec des valeurs :" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8523655d", + "metadata": {}, + "outputs": [], + "source": [ + "perso = {\"prenom\" : \"Bilbo\", \"age\" : 111}" + ] + }, + { + "cell_type": "markdown", + "id": "7f350ef3", + "metadata": {}, + "source": [ + "On a donc la clé en premier, ici, prenom & age sont deux chaines de caractères faisant office de clés.\n", + "\n", + "Accéder à une valeur d'un dictionnaire : on donne la clé à laquelle est associée la valeur recherchée (il faut donc que la clé existe)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c1124575", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Bilbo'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perso [\"prenom\"]\n", + "'Bilbo'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "094043d5", + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'taille'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/nb/7k573f_13zj2tnc5xd0020l40000gn/T/ipykernel_27744/399847934.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mperso\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"taille\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m: 'taille'" + ] + } + ], + "source": [ + "perso[\"taille\"]" + ] + }, + { + "cell_type": "markdown", + "id": "a29f8a7f", + "metadata": {}, + "source": [ + "Tout comme les listes, on peut utiliser la fonction ***len*** pour connaître le nombre de couples stockés." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1e8c5e32", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(perso)" + ] + }, + { + "cell_type": "markdown", + "id": "865d51b5", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "id": "a1984b3d", + "metadata": {}, + "source": [ + "### Modification et parcours" + ] + }, + { + "cell_type": "markdown", + "id": "dfd2f41e", + "metadata": {}, + "source": [ + " On ajoute très simplement un couple clé / valeur :" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "24211303", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'prenom': 'Bilbo', 'age': 111, 'taille': 112}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perso [\"taille\"] = 112\n", + "perso" + ] + }, + { + "cell_type": "markdown", + "id": "24fbdfae", + "metadata": {}, + "source": [ + " Pour modifier une valeur, c'est la même méthode : on ajoute un couple deja existant, et cela va écraser la valeur précédente :" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "83ad4a74", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'prenom': 'Bilbo', 'age': 131, 'taille': 112}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perso[\"age\"] = 131\n", + "perso" + ] + }, + { + "cell_type": "markdown", + "id": "4fa255d5", + "metadata": {}, + "source": [ + "Pour supprimer une clé et sa valeur associée, on peut utiliser la fonction ***del***:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "fc43064d", + "metadata": {}, + "outputs": [], + "source": [ + "del perso[\"age\"]" + ] + }, + { + "cell_type": "markdown", + "id": "c9021bee", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "225cf727", + "metadata": {}, + "source": [ + "Comme les listes et les tuples, les dictionnaires sont intérables : on itère sur les clés, les valeurs, ou les couples clé / valeur\n", + "\n", + "- Itération sur les clés :" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2be77c4a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "prenom\n", + "taille\n" + ] + } + ], + "source": [ + "for cle in perso.keys():\n", + " print (cle)" + ] + }, + { + "cell_type": "markdown", + "id": "6a0ddd68", + "metadata": {}, + "source": [ + "- Itération sur les valeurs :" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "534dbdba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bilbo\n", + "112\n" + ] + } + ], + "source": [ + "for val in perso.values():\n", + " print(val)" + ] + }, + { + "cell_type": "markdown", + "id": "d77a9b92", + "metadata": {}, + "source": [ + "- Itération sur les couples clé / valeur:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "21a715ba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "prenom -> Bilbo\n", + "taille -> 112\n" + ] + } + ], + "source": [ + "for (cle, val) in perso.items():\n", + " print(cle, \"->\", val)" + ] + }, + { + "cell_type": "markdown", + "id": "222e7ae8", + "metadata": {}, + "source": [ + "✏ Par défaut, on itère sur les clés." + ] + }, + { + "cell_type": "markdown", + "id": "c310b73d", + "metadata": {}, + "source": [ + "### À retenir" + ] + }, + { + "cell_type": "markdown", + "id": "65893b5c", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| ---------------------- | ------------------------------------------------------------ |\n", + "| dico[k] | renvoie la valeur associée à la clé k |\n", + "| x in dico.values() | renvoie True si une valeur de dico est égale à x, False sinon |\n", + "| x not in dico.values() | renvoie True si aucune valeur de dico n'est égale à x, False sinon |\n", + "| x in dico.keys() | renvoie True si une clé de dico est égale à x, False sinon |\n", + "| dico[k] = v | Modifie la valeur v associée à la clé k ou l'ajoute si elle n'existe pas |\n", + "| dico.get(k, v) | Renvoie la valeur associé à la clé k. Si la clé k n'existe pas, renvoie la valeur v |\n", + "| del dico(k) | Enlève du dictionnaire la clé k |" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/representation_construits/chapitre_2/README.ipynb b/representation_construits/chapitre_2/README.ipynb new file mode 100644 index 0000000..68de91c --- /dev/null +++ b/representation_construits/chapitre_2/README.ipynb @@ -0,0 +1,478 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bb1cfae9", + "metadata": {}, + "source": [ + "## Représentation des données : Les Dictionnaires " + ] + }, + { + "cell_type": "markdown", + "id": "c09a37ee", + "metadata": {}, + "source": [ + "-------------" + ] + }, + { + "cell_type": "markdown", + "id": "38d1e9f4", + "metadata": {}, + "source": [ + "> ***Contenue*** : Notions introduites : le type dictionnaire\n", + "\n", + "> ***Compétences*** : Construire une entrée de dictionnaire, savoir itérer sur es élèments d'un dictionnaire, connaître les méthodes." + ] + }, + { + "cell_type": "markdown", + "id": "0beaa407", + "metadata": {}, + "source": [ + "## Le programme" + ] + }, + { + "cell_type": "markdown", + "id": "dcbf1fd3", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "id": "57421c29", + "metadata": {}, + "source": [ + "![bo_tuple](../assets/bo_dico.png)" + ] + }, + { + "cell_type": "markdown", + "id": "401edcc8", + "metadata": {}, + "source": [ + "## Apport de connaissances" + ] + }, + { + "cell_type": "markdown", + "id": "717cce94", + "metadata": {}, + "source": [ + "--------" + ] + }, + { + "cell_type": "markdown", + "id": "0fc298dc", + "metadata": {}, + "source": [ + "Les dictionnaires Python permettent d'associer des valeurs à des clés : À partir d'une clé, on peut alors accéder directement à la valeur qui lui est associée." + ] + }, + { + "cell_type": "markdown", + "id": "607fa703", + "metadata": {}, + "source": [ + "### Propriétés" + ] + }, + { + "cell_type": "markdown", + "id": "9e023220", + "metadata": {}, + "source": [ + "Les dictionnaires sont des conteneurs, comme les listes et tuples, vus précédemment, et sont mutables : *on peut donc modifier, ajouter ou supprimer du contenu.*\n", + "\n", + "Par contre, contrairement aux types de conteneurs précédémment étudiés, on ne peut pas accéder au contenu d'un dictionnaire à l'aide d'un indice : un dictionnaire n'est pas une séquence.\n", + "\n", + "Si on peut bien modifier les valeurs dans un dictionnaire, chaque clé est *unique et non mutable*. Elle peut être une chaîne de caractères, un nombre, un tulle de nombre...\n", + "\n", + "Enfin, les valeurs, quant à elles, peuvent être quelconques." + ] + }, + { + "cell_type": "markdown", + "id": "555ca300", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "21761a39", + "metadata": {}, + "source": [ + "### Création et accès" + ] + }, + { + "cell_type": "markdown", + "id": "e219df29", + "metadata": {}, + "source": [ + "Pour initialiser un dictionnaire vide : " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "09f0144b", + "metadata": {}, + "outputs": [], + "source": [ + "dico = {}\n", + "#ou\n", + "dico = dict()" + ] + }, + { + "cell_type": "markdown", + "id": "766eeca7", + "metadata": {}, + "source": [ + "Pour initialiser un dictionnaire avec des valeurs :" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8523655d", + "metadata": {}, + "outputs": [], + "source": [ + "perso = {\"prenom\" : \"Bilbo\", \"age\" : 111}" + ] + }, + { + "cell_type": "markdown", + "id": "7f350ef3", + "metadata": {}, + "source": [ + "On a donc la clé en premier, ici, prenom & age sont deux chaines de caractères faisant office de clés.\n", + "\n", + "Accéder à une valeur d'un dictionnaire : on donne la clé à laquelle est associée la valeur recherchée (il faut donc que la clé existe)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c1124575", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Bilbo'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perso [\"prenom\"]\n", + "'Bilbo'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "094043d5", + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'taille'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/nb/7k573f_13zj2tnc5xd0020l40000gn/T/ipykernel_27744/399847934.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mperso\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"taille\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m: 'taille'" + ] + } + ], + "source": [ + "perso[\"taille\"]" + ] + }, + { + "cell_type": "markdown", + "id": "a29f8a7f", + "metadata": {}, + "source": [ + "Tout comme les listes, on peut utiliser la fonction ***len*** pour connaître le nombre de couples stockés." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1e8c5e32", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(perso)" + ] + }, + { + "cell_type": "markdown", + "id": "865d51b5", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "id": "a1984b3d", + "metadata": {}, + "source": [ + "### Modification et parcours" + ] + }, + { + "cell_type": "markdown", + "id": "dfd2f41e", + "metadata": {}, + "source": [ + " On ajoute très simplement un couple clé / valeur :" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "24211303", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'prenom': 'Bilbo', 'age': 111, 'taille': 112}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perso [\"taille\"] = 112\n", + "perso" + ] + }, + { + "cell_type": "markdown", + "id": "24fbdfae", + "metadata": {}, + "source": [ + " Pour modifier une valeur, c'est la même méthode : on ajoute un couple deja existant, et cela va écraser la valeur précédente :" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "83ad4a74", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'prenom': 'Bilbo', 'age': 131, 'taille': 112}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "perso[\"age\"] = 131\n", + "perso" + ] + }, + { + "cell_type": "markdown", + "id": "4fa255d5", + "metadata": {}, + "source": [ + "Pour supprimer une clé et sa valeur associée, on peut utiliser la fonction ***del***:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "fc43064d", + "metadata": {}, + "outputs": [], + "source": [ + "del perso[\"age\"]" + ] + }, + { + "cell_type": "markdown", + "id": "c9021bee", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "225cf727", + "metadata": {}, + "source": [ + "Comme les listes et les tuples, les dictionnaires sont intérables : on itère sur les clés, les valeurs, ou les couples clé / valeur\n", + "\n", + "- Itération sur les clés :" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2be77c4a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "prenom\n", + "taille\n" + ] + } + ], + "source": [ + "for cle in perso.keys():\n", + " print (cle)" + ] + }, + { + "cell_type": "markdown", + "id": "6a0ddd68", + "metadata": {}, + "source": [ + "- Itération sur les valeurs :" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "534dbdba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bilbo\n", + "112\n" + ] + } + ], + "source": [ + "for val in perso.values():\n", + " print(val)" + ] + }, + { + "cell_type": "markdown", + "id": "d77a9b92", + "metadata": {}, + "source": [ + "- Itération sur les couples clé / valeur:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "21a715ba", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "prenom -> Bilbo\n", + "taille -> 112\n" + ] + } + ], + "source": [ + "for (cle, val) in perso.items():\n", + " print(cle, \"->\", val)" + ] + }, + { + "cell_type": "markdown", + "id": "222e7ae8", + "metadata": {}, + "source": [ + "✏ Par défaut, on itère sur les clés." + ] + }, + { + "cell_type": "markdown", + "id": "c310b73d", + "metadata": {}, + "source": [ + "### À retenir" + ] + }, + { + "cell_type": "markdown", + "id": "65893b5c", + "metadata": {}, + "source": [ + "| Opération | Résultat |\n", + "| ---------------------- | ------------------------------------------------------------ |\n", + "| dico[k] | renvoie la valeur associée à la clé k |\n", + "| x in dico.values() | renvoie True si une valeur de dico est égale à x, False sinon |\n", + "| x not in dico.values() | renvoie True si aucune valeur de dico n'est égale à x, False sinon |\n", + "| x in dico.keys() | renvoie True si une clé de dico est égale à x, False sinon |\n", + "| dico[k] = v | Modifie la valeur v associée à la clé k ou l'ajoute si elle n'existe pas |\n", + "| dico.get(k, v) | Renvoie la valeur associé à la clé k. Si la clé k n'existe pas, renvoie la valeur v |\n", + "| del dico(k) | Enlève du dictionnaire la clé k |" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/representation_construits/chapitre_2/README.md b/representation_construits/chapitre_2/README.md new file mode 100644 index 0000000..ca8f3cd --- /dev/null +++ b/representation_construits/chapitre_2/README.md @@ -0,0 +1,131 @@ +## Représentation des données : Les Dictionnaires + +------------- + +> ***Contenue*** : Notions introduites : le type dictionnaire +> ***Compétences*** : Construire une entrée de dictionnaire, savoir itérer sur es élèments d'un dictionnaire, connaître les méthodes. + +## Le programme + +----------- + +![bo_tuple](../assets/bo_dico.png) + +## Apport de connaissances + +-------- + +Les dictionnaires Python permettent d'associer des valeurs à des clés : À partir d'une clé, on peut alors accéder directement à la valeur qui lui est associée. + +### Propriétés + +Les dictionnaires sont des conteneurs, comme les listes et tuples, vus précédemment, et sont mutables : *on peut donc modifier, ajouter ou supprimer du contenu.* + +Par contre, contrairement aux types de conteneurs précédémment étudiés, on ne peut pas accéder au contenu d'un dictionnaire à l'aide d'un indice : un dictionnaire n'est pas une séquence. + +Si on peut bien modifier les valeurs dans un dictionnaire, chaque clé est *unique et non mutable*. Elle peut être une chaîne de caractères, un nombre, un tulle de nombre... + +Enfin, les valeurs, quant à elles, peuvent être quelconques. + +----------------- + +### Création et accès + +Pour initialiser un dictionnaire vide : + +```python +dico = {} +#ou +dico = dict() +``` + +Pour initialiser un dictionnaire avec des valeurs : + +```pytho +perso = {"prenom" : "Bilbo", "age" : 111} +``` + +On a donc la clé en premier, ici, prenom & age sont deux chaines de caractères faisant office de clés. + +Accéder à une valeur d'un dictionnaire : on donne la clé à laquelle est associée la valeur recherchée (il faut donc que la clé existe) + +```python +perso ["prenom"] +'Bilbo' +perso["taille"] +KeyError "taille" +``` + +Tout comme les listes, on peut utiliser la fonction ***len*** pour connaître le nombre de couples stockés. + +```python +len(perso) +2 +``` + +-------------- + +### Modification et parcours + + On ajoute très simplement un couple clé / valeur : + +```python +perso ["taille"] = 112 +perso +{"prenom" : 'Bilbo', 'age' : 111, 'taille' : 112} +``` + + Pour modifier une valeur, c'est la même méthode : on ajoute un couple deja existant, et cela va écraser la valeur précédente : + +```python +perso["age"] = 131 +perso +{'prenom' : 'Bilbo', 'age' : 131, 'taille' : 112} +``` + +Pour supprimer une clé et sa valeur associée, on peut utiliser la fonction ***del***: + +```python +del perso["age"] +``` + +----- + +Comme les listes et les tuples, les dictionnaires sont intérables : on itère sur les clés, les valeurs, ou les couples clé / valeur + +- Itération sur les clés : + +```python +for cle in perso.keys(): + print (cle) +``` + +- Itération sur les valeurs : + +```python +for val in perso.values(): + print(val) +``` + +- Itération sur les couples clé / valeur: + +```python +for (cle, val) in perso.items(): + print(cle, "->", val) +``` + +✏ Par défaut, on itère sur les clés. + +-------- + +### À retenir + +| Opération | Résultat | +| ---------------------- | ------------------------------------------------------------ | +| dico[k] | renvoie la valeur associée à la clé k | +| x in dico.values() | renvoie True si une valeur de dico est égale à x, False sinon | +| x not in dico.values() | renvoie True si aucune valeur de dico n'est égale à x, False sinon | +| x in dico.keys() | renvoie True si une clé de dico est égale à x, False sinon | +| dico[k] = v | Modifie la valeur v associée à la clé k ou l'ajoute si elle n'existe pas | +| dico.get(k, v) | Renvoie la valeur associé à la clé k. Si la clé k n'existe pas, renvoie la valeur v | +| del dico(k) | Enlève du dictionnaire la clé k | \ No newline at end of file diff --git a/representation_construits/chapitre_2/exercices/CORRECTION.md b/representation_construits/chapitre_2/exercices/CORRECTION.md new file mode 100644 index 0000000..74ed5cd --- /dev/null +++ b/representation_construits/chapitre_2/exercices/CORRECTION.md @@ -0,0 +1,166 @@ +## Exercice + +### Itérer sur les éléments d'un dictionnaire + +Au zoo de Beauval, il y a 5 éléphants d'Asie, 17 écureuils d'Asie, 7 hippopotames d'Afrique... + +On représente cet inventaire à l'aide d'un dictionnaire, de la façon suivante: + +```python +zoo_Beauval = { +'elephant' : ('Asie', 5), +'ecureuil' : ('Asie', 17), +'panda' : ('Asie', 2), +'hippopotame' : ('Afrique', 7), +'girafe' : ('Afrique', 4) +} +``` + +De la même manière, on peut représenter le zoo de La Flèche : + +```python +zoo_LaFleche = { + 'ours' : ('Europe', 4), + 'tigre' : ('Asie', 7), + 'girafe' : ('Afrique', 11), + 'hippopotame' : ('Afrique', 3) + } +``` + + + +#### Question n°1 + +On souhaite créer une fonction *plus_grand_nombre* ( ) qui prend un zoo en paramètre et renvoie le nom de l'animal le plus présent au sein du zoo. + +Exemples : + +```python +>> plus_grand_nombre(zoo_LaFleche) +>> 'girafe' +``` + +```python +>> plus_grand_nombre(zoo_Beauval) +>> 'ecureuil' +``` + +On aura besoin d'une boucle utilisant + +```python +for (cle, valeur) in dico.items() +``` + +À votre avis, pourquoi ? + +**Nous avons besoin à la fois des clés ainsi que des valeurs** + +Écrire la fonction : + +```python +def plus_grand_nombre(zoo): + """ + :param: zoo est un dictionnaire dont les clés sont des str (noms des animaux) + :param: les valeurs de ces clés sont des tuples (origine, nombre) avec origine : str et nombre : int + :return: le nom de l'animal le plus représenté dans le zoo, sous la forme d'une chaîne de caractères + """ + + nom_max = 0 + nombre_max = 0 + for (nom, (x, nombre)) in zoo.items(): + if nombre > nombre_max: + nom_max = nom + nombre_max = nombre + return nom_max +``` + + + +Note : ici, la variable **x** fait référence à une donnée que nous n'utilisons pas. + +#### Question n°2 + +On souhaite se doter d'une fonction *nombre_total* ( ) qui prend un zoo ainsi que le nom d'un continent en paramètre, et qui renvoie le nombre d'animaux originaires de ce continent dans le zoo. + +Exemples : + +```python +>> nombre_total(zoo_LaFleche, 'Afrique') +>> 14 +``` + +```python +>> nombre_total(zoo_Beauval, 'Asie') +>> 24 +``` + +On utilisera une boucle + +```python +for valeur in dico.values() +``` + +Pourquoi ? + +**Parce que l'on a uniquement besoin des valeurs, l'espèce animal n'est pas importante** + +Écrire la fonction : + +```python +def nombre_total(zoo, continent): + """ + :param: zoo est un dictionnaire dont les clés sont des chaines, correspondantes aux noms des animaux + :param: et dont les valeurs sont des tuples (origine, nombre), origine étant une chaine, nombre un int + :param: continent est une chaine comprenant le nom d'un continent d'où sont originaires les animaux + :return: la fonction renvoie le nombre d'animaux originaires de 'continent' dans ce zoo + """ + + + total = 0 + for (origine, nombre) in zoo.values(): + if continent == origine: + total = total + nombre + return total +``` + + + +#### Question n°3 + +Enfin, on souhaite écrire une fonction nombre, qui prendun zoo ainsi qu'un nom d'animal en paramètre, et qui renvoie le nombre de représentants de cet animal dans le zoo. + +Exemples : + +````python +>> nombre(zoo_LaFleche, 'panda') +>> 0 +```` + +```python +>> nombre(zoo_Beauval, 'panda') +>> 2 +``` + + + +Quel type de boucle va t-on utiliser ici ? + +**Aucune, car nous n'avons uniquement besoin que de la clé, qui est un paramètre de la fonction.** + +Écrire la fonction + +```python +def nombre(zoo, animal): + """ + :param: zoo est un dictionnaire dont les clés sont des chaines, correspondantes aux noms des animaux + :param: et dont les valeurs sont des tuples (origine, nombre), origine étant une chaine, nombre un int + :param: animal est une chaine comprenant le nom d'un animal + :return: la fonction renvoie le nombre de représentants du paramètre 'animal' dans ce zoo + """ + + if animal not in zoo.keys(): + return 0 + else: + return zoo[animal][1] +``` + diff --git a/representation_construits/chapitre_2/exercices/CORRECTION_2.md b/representation_construits/chapitre_2/exercices/CORRECTION_2.md new file mode 100644 index 0000000..4425fe5 --- /dev/null +++ b/representation_construits/chapitre_2/exercices/CORRECTION_2.md @@ -0,0 +1,80 @@ +## Exercice n°2 + + + +Pour remplir le pokedex de Sacha, on modélise les informations sur les Pokemons de la façon suivante : + +```python +liste_pokemons = { + 'Bulbizarre' : (70, 7), + 'Herbizarre' : (100,13), + 'Abo' : (200, 7), + 'Pikachu' : (40, 6) +} +``` + +Les tuples représentent la taille en centimètres, ainsi que le poids en kilogramme du Pokemon. + +#### Questions : + +- Quel est le type de *liste_pokemons* ? + - **Il s'agit d'un dictionnaire, dont les clés sont des chaines de caractères représentant les nomsdes Pokemons, et les valeurs des tuples de deux entiers correspondant à la taille en cm et au poids en kg** + +- Quelle instruction permet d'ajouter à cette structure de données le Pokemon Goupil qui mesure 60 cm et pèse 10 kg ? + - **liste_pokemons["Goupix"] = (60, 10)** + +On donne le code suivant : + +```python +def le_plus_grand(pokemons): + grand = None + taille_max = None + for (nom,(taille, poids)) in pokemons.items(): + taille_max = taille + grand = nom + return(grand,taille_max) +``` + +- Quelle est la valeur de *le_plus_grand(liste_pokemons)* ? + - **Il s'agira du nom et de la taille du Pokemon le plus grand rencontré dans le dictionnaire (en cas d'égalité, il s'agira du premier Pokémon rencontré) sous la forme d'un tuple** + +- Écrire le code d'une fonction *le_plus_leger(liste_pokemons)* qui prend des Pokémons en paramètre et renvoie un tuple correspondant au nom ainsi qu'au poids de Pokémon le plus léger. + +```python +>> le_plus_leger(liste_pokemons) +>> ('Pikachu', 6) +``` + +```python +def le_plus_leger(liste_pokemons): + leger = None + poids_min = None + for (nom, (taille, poids)) in liste_pokemons.items(): + if poids_min > poids + poids_min = poids + leger = nom + return (leger, poids_min) +``` + + + +- Écrire une fonction *taille* qui prend en paramère un dictionnaire de Pokémons ainsi que le nom d'un Pokémon, et qui renvoie la taille de ce Pokémon. + +```python +>> taille(liste_pokemons, 'Abo') +>> 200 +``` + +```python +>> taille(liste_pokemons, 'Dracaufeu') +>> None +``` + +```python +def taille(liste_pokemons, nom): + if noms in liste_pokemons: + return pokemon[nom][0] + else: + return None +``` + diff --git a/representation_construits/chapitre_2/exercices/README.md b/representation_construits/chapitre_2/exercices/README.md new file mode 100644 index 0000000..f9a8db9 --- /dev/null +++ b/representation_construits/chapitre_2/exercices/README.md @@ -0,0 +1,148 @@ +## Exercice + +### Itérer sur les éléments d'un dictionnaire + +Au zoo de Beauval, il y a 5 éléphants d'Asie, 17 écureuils d'Asie, 7 hippopotames d'Afrique... + +On représente cet inventaire à l'aide d'un dictionnaire, de la façon suivante: + +```python +zoo_Beauval = { +'elephant' : ('Asie', 5), +'ecureuil' : ('Asie', 17), +'panda' : ('Asie', 2), +'hippopotame' : ('Afrique', 7), +'girafe' : ('Afrique', 4) +} +``` + +De la même manière, on peut représenter le zoo de La Flèche : + +```python +zoo_LaFleche = { + 'ours' : ('Europe', 4), + 'tigre' : ('Asie', 7), + 'girafe' : ('Afrique', 11), + 'hippopotame' : ('Afrique', 3) + } +``` + + + +#### Question n°1 + +On souhaite créer une fonction *plus_grand_nombre* ( ) qui prend un zoo en paramètre et renvoie le nom de l'animal le plus présent au sein du zoo. + +Exemples : + +```python +>> plus_grand_nombre(zoo_LaFleche) +>> 'girafe' +``` + +```python +>> plus_grand_nombre(zoo_Beauval) +>> 'ecureuil' +``` + +On aura besoin d'une boucle utilisant + +```python +for (cle, valeur) in dico.items() +``` + +À votre avis, pourquoi ? + + + +Écrire la fonction : + +```python +def plus_grand_nombre(zoo): + """ + :param: zoo est un dictionnaire dont les clés sont des str (noms des animaux) + :param: les valeurs de ces clés sont des tuples (origine, nombre) avec origine : str et nombre : int + :return: le nom de l'animal le plus représenté dans le zoo, sous la forme d'une chaîne de caractères + """ + + pass +``` + + + +#### Question n°2 + +On souhaite se doter d'une fonction *nombre_total* ( ) qui prend un zoo ainsi que le nom d'un continent en paramètre, et qui renvoie le nombre d'animaux originaires de ce continent dans le zoo. + +Exemples : + +```python +>> nombre_total(zoo_LaFleche, 'Afrique') +>> 14 +``` + +```python +>> nombre_total(zoo_Beauval, 'Asie') +>> 24 +``` + +On utilisera une boucle + +```python +for valeur in dico.values() +``` + +Pourquoi ? + + + +Écrire la fonction : + +```python +def nombre_total(zoo, continent): + """ + :param: zoo est un dictionnaire dont les clés sont des chaines, correspondantes aux noms des animaux + :param: et dont les valeurs sont des tuples (origine, nombre), origine étant une chaine, nombre un int + :param: continent est une chaine comprenant le nom d'un continent d'où sont originaires les animaux + :return: la fonction renvoie le nombre d'animaux originaires de 'continent' dans ce zoo + """ + + pass +``` + + + +#### Question n°3 + +Enfin, on souhaite écrire une fonction nombre, qui prendun zoo ainsi qu'un nom d'animal en paramètre, et qui renvoie le nombre de représentants de cet animal dans le zoo. + +Exemples : + +````python +>> nombre(zoo_LaFleche, 'panda') +>> 0 +```` + +```python +>> nombre(zoo_Beauval, 'panda') +>> 2 +``` + + + +Quel type de boucle va t-on utiliser ici ? + +Écrire la fonction + +```python +def nombre(zoo, animal): + """ + :param: zoo est un dictionnaire dont les clés sont des chaines, correspondantes aux noms des animaux + :param: et dont les valeurs sont des tuples (origine, nombre), origine étant une chaine, nombre un int + :param: animal est une chaine comprenant le nom d'un animal + :return: la fonction renvoie le nombre de représentants du paramètre 'animal' dans ce zoo + """ + + pass +``` + diff --git a/representation_construits/chapitre_2/exercices/README_2.md b/representation_construits/chapitre_2/exercices/README_2.md new file mode 100644 index 0000000..da08975 --- /dev/null +++ b/representation_construits/chapitre_2/exercices/README_2.md @@ -0,0 +1,58 @@ +## Exercice n°2 + + + +Pour remplir le pokedex de Sacha, on modélise les informations sur les Pokemons de la façon suivante : + +```python +liste_pokemons = { + 'Bulbizarre' : (70, 7), + 'Herbizarre' : (100,13), + 'Abo' : (200, 7), + 'Pikachu' : (40, 6) +} +``` + +Les tuples représentent la taille en centimètres, ainsi que le poids en kilogramme du Pokemon. + +#### Questions : + +- Quel est le type de *liste_pokemons* ? + +- Quelle instruction permet d'ajouter à cette structure de données le Pokemon Goupil qui mesure 60 cm et pèse 10 kg ? + +On donne le code suivant : + +```python +def le_plus_grand(pokemons): + grand = None + taille_max = None + for (nom,(taille, poids)) in pokemons.items(): + taille_max = taille + grand = nom + return(grand,taille_max) +``` + +- Quelle est la valeur de *le_plus_grand(liste_pokemons)* ? + +- Écrire le code d'une fonction *le_plus_leger(liste_pokemons)* qui prend des Pokémons en paramètre et renvoie un tuple correspondant au nom ainsi qu'au poids de Pokémon le plus léger. + +```python +>> le_plus_leger(liste_pokemons) +>> ('Pikachu', 6) +``` + + + +- Écrire une fonction *taille* qui prend en paramère un dictionnaire de Pokémons ainsi que le nom d'un Pokémon, et qui renvoie la taille de ce Pokémon. + +```python +>> taille(liste_pokemons, 'Abo') +>> 200 +``` + +```python +>> taille(liste_pokemons, 'Dracaufeu') +>> None +``` + diff --git a/representation_construits/chapitre_2/td/TD.ipynb b/representation_construits/chapitre_2/td/TD.ipynb new file mode 100644 index 0000000..056800b --- /dev/null +++ b/representation_construits/chapitre_2/td/TD.ipynb @@ -0,0 +1,279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TD - Les dictionnaires" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 1 - Fruits\n", + "\n", + "On considère le dictionnaire suivant qui contient différents fruits ainsi que leurs quantités." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fruits = {\"pommes\": 8, \"melons\": 3, \"poires\": 6}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Quelle instruction permet d'accéder au nombre de melons ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. On a acheté 16 clémentines et utilisé 4 pommes pour faire une tarte. Quelles instructions permettent de mettre à jour le dictionnaire ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 2 - Encore des fruits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Répondez aux questions suivantes __sans exécuter les scripts proposés__. \n", + "\n", + "_Vous les exécuterez pour vérifier vos réponses._\n", + "\n", + "1. Qu'affiche le programme suivant ?\n", + "```python\n", + "fruits = {'pommes': 4, 'melons': 3, 'poires': 6, 'clémentines': 16}\n", + "for c in fruits.keys():\n", + " print(c)\n", + "```\n", + "2. Qu'affiche le programme suivant ?\n", + "```python\n", + "fruits = {'pommes': 4, 'melons': 3, 'poires': 6, 'clémentines': 16}\n", + "for cle, valeur in fruits.items():\n", + " print(cle, \"->\", valeur)\n", + "```\n", + "3. Qu'affiche le programme suivant ?\n", + "```python\n", + "fruits = {'pommes': 4, 'melons': 3, 'poires': 6, 'clémentines': 16}\n", + "for v in fruits.values():\n", + " print(v)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 3 - Agenda\n", + "\n", + "Dans un agenda, un contact est modélisé par un dictionnaire :\n", + "\n", + "- La clé du dictionnaire est le nom des contacts. \n", + "- La valeur du dictionnaire est un tuple dont la première valeur est leur âge (type int) et la seconde leur ville natale (str).\n", + "\n", + "Voici une petite liste de contact :\n", + "\n", + "* Pierre a 37 ans et est né à Lille.\n", + "* Zoé a 21 ans et est née à Nice.\n", + "* Ali a 54 ans et est né à Bordeaux.\n", + "* Aymeric a 72 ans et est né à Nice.\n", + "\n", + "\n", + "1. Définissez le dictionnaire de contacts.\n", + "2. Donnez les commandes pour :\n", + " 1. accéder à l'âge de Zoé\n", + " 2. accéder à la ville natale d'Ali.\n", + " 3. décider si 'Jean' est dans le dictionnaire ou pas.\n", + "3. Écrire le prédicat `est_present(dic, nom)` qui renvoie `True` si le _nom_ est présent dans le dictionnaire _dic_ e t`False` sinon.\n", + "\n", + "4. Écrire la fonction `renvoyer_age(dic, nom)` qui, si le _nom_ est présent dans le dictionnaire _dic_, renvoie son âge.\n", + "\n", + "5. Écrire la fonction `renvoyer_ville(dic, nom)` qui, si le _nom_ est présent dans le dictionnaire _dic_, renvoie sa ville natale.\n", + "\n", + "6. Écrire la fonction `renvoyer_noms(dic, ville)` qui renvoie un tableau de tous les noms dont la ville de naissance est _ville_.\n", + "\n", + "7. Écrire la procédure `ajouter(dic, nom, age, ville)` qui, si le _nom_ est n'est pas présent dans le dictionnaire _dic_, l'y ajoute.\n", + "\n", + "> _Remarques :_\n", + ">\n", + "> * Documentez les fonction\n", + "> * Réalisez les doctests significatifs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "\n", + "# Question 2.A\n", + "\n", + "# Question 2.B\n", + "\n", + "# Question 2.C\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 6" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 7" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 4 - le SCRABBLE\n", + "\n", + "Voici un descriptif des valeurs des lettres au scrabble français. \n", + "\n", + "- 0 point : **Joker** ×2 (appelés en français *jokers* ou *lettres blanches*)\n", + "- *1 point* : **E** ×15, **A** ×9, **I** ×8, **N** ×6, **O** ×6, **R** ×6, **S** ×6, **T** ×6, **U** ×6, **L** ×5\n", + "- *2 points* : **D** ×3, **M** ×3, **G** ×2\n", + "- *3 points* : **B** ×2, **C** ×2, **P** ×2\n", + "- *4 points* : **F** ×2, **H** ×2, **V** ×2\n", + "- *8 points* : **J** ×1, **Q** ×1\n", + "- *10 points* : **K** ×1, **W** ×1, **X** ×1, **Y** ×1, **Z** ×1\n", + "\n", + "\n", + "1. Définissez un dictionnaire _score_ qui prend les lettres majuscules en clés et leur score en valeur\n", + "2. Écrire une fonction `calculer_score` qui prend une chaîne de caractère _mot_ en paramètre et renvoie le score du mot s'il est possible de l'écrire avec les lettres du scrabble et `None` sinon.\n", + "3. Écrire une fonction `calculer_scores` qui prend un tableau de _mots_ et renvoie un tableau de score de chaque mot.\n", + "\n", + "> _Remarques :_\n", + ">\n", + "> * Documentez la fonction\n", + "> * Réalisez les doctests significatifs.\n", + "> * Pour tester vos fonctions, il est possible d'utiliser la liste de mots suivante :\n", + "\n", + "```python\n", + "liste_mots = ['extenue', 'ligner', 'serier', 'delasse', 'doperas', 'drapes', 'gelee', 'doucir', 'lamparo', 'salee', 'gueri', 'mulots', 'trolley', 'houppe', 'hesitez', 'vogues', 'embelli', 'etonnez', 'mers', 'riviere', 'risquer', 'grogner', 'postale', 'beler', 'lofer', 'rincent', 'boni', 'charter', 'censeur', 'glaise','sauts', 'striee', 'perclus', 'dessous', 'tireras', 'gommant', 'cooptes', 'bombyx', 'gauches', 'filiere', 'devoree', 'viriez', 'murit', 'miteux', 'empenne', 'soudez', 'cochers', 'dejoua', 'tuer', 'present']\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/representation_construits/chapitre_2/td/correction.ipynb b/representation_construits/chapitre_2/td/correction.ipynb new file mode 100644 index 0000000..175301e --- /dev/null +++ b/representation_construits/chapitre_2/td/correction.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TD - Les dictionnaires" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 1 - Fruits\n", + "\n", + "On considère le dictionnaire suivant qui contient différents fruits ainsi que leurs quantités." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "fruits = {\"pommes\": 8, \"melons\": 3, \"poires\": 6}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Quelle instruction permet d'accéder au nombre de melons ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fruits['melons']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. On a acheté 16 clémentines et utilisé 4 pommes pour faire une tarte. Quelles instructions permettent de mettre à jour le dictionnaire ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fruits['clementines'] = 16\n", + "fruits['pommes'] = fruits['pommes'] - 4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 2 - Encore des fruits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Répondez aux questions suivantes __sans exécuter les scripts proposés__. \n", + "\n", + "_Vous les exécuterez pour vérifier vos réponses._\n", + "\n", + "1. Qu'affiche le programme suivant ?\n", + "```python\n", + "fruits = {'pommes': 4, 'melons': 3, 'poires': 6, 'clémentines': 16}\n", + "for c in fruits.keys():\n", + " print(c)\n", + "```\n", + "2. Qu'affiche le programme suivant ?\n", + "```python\n", + "fruits = {'pommes': 4, 'melons': 3, 'poires': 6, 'clémentines': 16}\n", + "for cle, valeur in fruits.items():\n", + " print(cle, \"->\", valeur)\n", + "```\n", + "3. Qu'affiche le programme suivant ?\n", + "```python\n", + "fruits = {'pommes': 4, 'melons': 3, 'poires': 6, 'clémentines': 16}\n", + "for v in fruits.values():\n", + " print(v)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 3 - Agenda\n", + "\n", + "Dans un agenda, un contact est modélisé par un dictionnaire :\n", + "\n", + "- La clé du dictionnaire est le nom des contacts. \n", + "- La valeur du dictionnaire est un tuple dont la première valeur est leur âge (type int) et la seconde leur ville natale (str).\n", + "\n", + "Voici une petite liste de contact :\n", + "\n", + "* Pierre a 37 ans et est né à Lille.\n", + "* Zoé a 21 ans et est née à Nice.\n", + "* Ali a 54 ans et est né à Bordeaux.\n", + "* Aymeric a 72 ans et est né à Nice.\n", + "\n", + "\n", + "1. Définissez le dictionnaire de contacts.\n", + "2. Donnez les commandes pour :\n", + " 1. accéder à l'âge de Zoé\n", + " 2. accéder à la ville natale d'Ali.\n", + " 3. décider si 'Jean' est dans le dictionnaire ou pas.\n", + "3. Écrire le prédicat `est_present(dic, nom)` qui renvoie `True` si le _nom_ est présent dans le dictionnaire _dic_ e t`False` sinon.\n", + "\n", + "4. Écrire la fonction `renvoyer_age(dic, nom)` qui, si le _nom_ est présent dans le dictionnaire _dic_, renvoie son âge.\n", + "\n", + "5. Écrire la fonction `renvoyer_ville(dic, nom)` qui, si le _nom_ est présent dans le dictionnaire _dic_, renvoie sa ville natale.\n", + "\n", + "6. Écrire la fonction `renvoyer_noms(dic, ville)` qui renvoie un tableau de tous les noms dont la ville de naissance est _ville_.\n", + "\n", + "7. Écrire la procédure `ajouter(dic, nom, age, ville)` qui, si le _nom_ est n'est pas présent dans le dictionnaire _dic_, l'y ajoute.\n", + "\n", + "> _Remarques :_\n", + ">\n", + "> * Documentez les fonction\n", + "> * Réalisez les doctests significatifs." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21\n", + "Bordeaux\n", + "False\n" + ] + } + ], + "source": [ + "# Question 1\n", + "contacts = { 'Pierre' : (37, 'Lille'), 'Zoé' : (21, 'Nice'), 'Ali' : (54, 'Bordeaux'), 'Aymeric' : (72, 'Lorient')}\n", + "\n", + "# Question 2.A\n", + "print(contacts['Zoé'][0])\n", + "\n", + "# Question 2.B\n", + "print(contacts['Ali'][1])\n", + "\n", + "# Question 2.C\n", + "print('Jean' in contacts)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def est_present(dic, nom):\n", + " '''\n", + " Détermine si un nom est présent dans le dictionnaire\n", + " :param dic: (dict) un dictionnaire\n", + " :param nom: (str) un nom de contact\n", + " :return: (bool) True si le nom est dans le dictionnaire, False sinon\n", + " :doctest:\n", + " >>> est_present({}, 'Thomas')\n", + " False\n", + " >>> est_present({ 'Thomas' : (15, 'Cannes')}, 'Thomas')\n", + " True\n", + " >>> est_present({ 'Tham' : (15, 'Cannes')}, 'Thomas')\n", + " False\n", + " '''\n", + " return nom in dic" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 4\n", + "def renvoyer_age(dic, nom):\n", + " '''\n", + " Renvoie l'âge du contact, s'il est présent dans le dictionnaire\n", + " :param dic: (dict) un dictionnaire\n", + " :param nom: (str) un nom de contact\n", + " :return: (int) L'âge du contact\n", + " :doctest:\n", + " >>> renvoyer_age({}, 'Thomas')\n", + " None\n", + " >>> renvoyer_age({ 'Thomas' : (15, 'Cannes')}, 'Thomas')\n", + " 15\n", + " '''\n", + " if est_present(dic, nom):\n", + " return dic[nom][0]\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 5\n", + "def renvoyer_ville(dic, nom):\n", + " '''\n", + " Renvoie la ville natale du contact, s'il est présent dans le dictionnaire\n", + " :param dic: (dict) un dictionnaire\n", + " :param nom: (str) un nom de contact\n", + " :return: (str) La ville natale du contact\n", + " :doctest:\n", + " >>> renvoyer_ville({}, 'Thomas')\n", + " None\n", + " >>> renvoyer_ville({ 'Thomas' : (15, 'Cannes')}, 'Thomas')\n", + " 'Cannes'\n", + " '''\n", + " if est_present(dic, nom):\n", + " return dic[nom][1]\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 6\n", + "def renvoyer_noms(dic, ville):\n", + " '''\n", + " Renvoie un tableau de tous les noms dont la ville de naissance est ville\n", + " :param dic: (dict) un dictionnaire\n", + " :param ville: (str) ville natale des contacts\n", + " :return: (list) tableau de tous les noms de contacts nés dans la ville\n", + " :doctest:\n", + " >>> renvoyer_noms({}, 'Nice')\n", + " []\n", + " >>> renvoyer_noms({ 'Pierre' : (37, 'Lille'), 'Zoé' : (21, 'Nice'), 'Ali' : (54, 'Bordeaux'), 'Aymeric' : (72, 'Lorient')}\n", + ", 'Nice')\n", + " ['Zoé', 'Aymeric']\n", + " '''\n", + " noms = []\n", + " for contact in dic:\n", + " if dic[contact][1] == ville:\n", + " noms.append(contact)\n", + " return noms" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 7\n", + "def ajouter(dic, nom, age, ville):\n", + " '''\n", + " Ajoute un contact s'il n'est pas présent dans le dictionnaire\n", + " :param dic: (dict) un dictionnaire\n", + " :param nom: (str) nom du contact\n", + " :param age: (int) age du contact\n", + " :param ville: (str) ville natale du contact\n", + " :return: (None)\n", + " :Effet de bord: Ajoute le contact au dictionnaire\n", + " '''\n", + " if not est_present(dic, nom):\n", + " dic[nom] = (age, ville)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercice 4 - le SCRABBLE\n", + "\n", + "Voici un descriptif des valeurs des lettres au scrabble français. \n", + "\n", + "- 0 point : **Joker** ×2 (appelés en français *jokers* ou *lettres blanches*)\n", + "- *1 point* : **E** ×15, **A** ×9, **I** ×8, **N** ×6, **O** ×6, **R** ×6, **S** ×6, **T** ×6, **U** ×6, **L** ×5\n", + "- *2 points* : **D** ×3, **M** ×3, **G** ×2\n", + "- *3 points* : **B** ×2, **C** ×2, **P** ×2\n", + "- *4 points* : **F** ×2, **H** ×2, **V** ×2\n", + "- *8 points* : **J** ×1, **Q** ×1\n", + "- *10 points* : **K** ×1, **W** ×1, **X** ×1, **Y** ×1, **Z** ×1\n", + "\n", + "\n", + "1. Définissez un dictionnaire _score_ qui prend les lettres majuscules en clés et leur score en valeur\n", + "2. Écrire une fonction `calculer_score` qui prend une chaîne de caractère _mot_ en paramètre et renvoie le score du mot s'il est possible de l'écrire avec les lettres du scrabble et `None` sinon.\n", + "3. Écrire une fonction `calculer_scores` qui prend un tableau de _mots_ et renvoie un tableau de score de chaque mot.\n", + "\n", + "> _Remarques :_\n", + ">\n", + "> * Documentez la fonction\n", + "> * Réalisez les doctests significatifs.\n", + "> * Pour tester vos fonctions, il est possible d'utiliser la liste de mots suivante :\n", + "\n", + "```python\n", + "liste_mots = ['extenue', 'ligner', 'serier', 'delasse', 'doperas', 'drapes', 'gelee', 'doucir', 'lamparo', 'salee', 'gueri', 'mulots', 'trolley', 'houppe', 'hesitez', 'vogues', 'embelli', 'etonnez', 'mers', 'riviere', 'risquer', 'grogner', 'postale', 'beler', 'lofer', 'rincent', 'boni', 'charter', 'censeur', 'glaise','sauts', 'striee', 'perclus', 'dessous', 'tireras', 'gommant', 'cooptes', 'bombyx', 'gauches', 'filiere', 'devoree', 'viriez', 'murit', 'miteux', 'empenne', 'soudez', 'cochers', 'dejoua', 'tuer', 'present']\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 1\n", + "score = {'A' : 1, 'B' : 3, 'C': 3, 'D': 2, 'E' : 1, 'F' : 4, 'G': 2, 'H': 4, 'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1, 'P': 3, 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 10, 'X': 10, 'Y': 10, 'Z': 10}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 2\n", + "def calculer_score(mot):\n", + " '''\n", + " Détermine le score d'un mot\n", + " :param mot: (str) un mot\n", + " :return: (int) Le score du mot\n", + " '''\n", + " _score = 0\n", + " for lettre in mot.upper():\n", + " _score += score[lettre]\n", + " return _score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Question 3\n", + "def calculer_scores(mots):\n", + " '''\n", + " Détermine les scores d'un tableau de mots\n", + " :param mot: (str) un mot\n", + " :return: (list) Le tableau des scores des mots\n", + " '''\n", + " scores = []\n", + " for mot in mots:\n", + " scores.append(calculer_score(mot))\n", + " return scores" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/representation_construits/chapitre_3/.ipynb_checkpoints/README-checkpoint.ipynb b/representation_construits/chapitre_3/.ipynb_checkpoints/README-checkpoint.ipynb new file mode 100644 index 0000000..80c5b67 --- /dev/null +++ b/representation_construits/chapitre_3/.ipynb_checkpoints/README-checkpoint.ipynb @@ -0,0 +1,396 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b8f17c0e", + "metadata": {}, + "source": [ + "# # Structures imbriquées et compréhensions" + ] + }, + { + "cell_type": "markdown", + "id": "5c98615f", + "metadata": {}, + "source": [ + "> Il est possible de combiner listes, tuples, et dictionnaires. Avec la syntaxe des compréhensions, l'écriture des listes et dictionnaires semble plus élègante." + ] + }, + { + "cell_type": "markdown", + "id": "6a42e2e0", + "metadata": {}, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "id": "2cda11f3", + "metadata": {}, + "source": [ + "## Les structures imbriquées" + ] + }, + { + "cell_type": "markdown", + "id": "ca8a7b82", + "metadata": {}, + "source": [ + "On peut imbriquer des listes, des tuples et des dictionnaires. Par contre, les clés de dictionnaire ne peuvent pas muter.\n", + "\n", + "De ce fait, nous pouvons construire des listes de listes, des listes de tuples, des listes de dictionnaires, des tuples de listes, des dictionnaires de tuples..." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e3846d2b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-1, 0)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lst = [(4,5), (-1, 0), (2.5, 1)]\n", + "len (lst)\n", + "lst[1]" + ] + }, + { + "cell_type": "markdown", + "id": "15b98fb6", + "metadata": {}, + "source": [ + "Ici, on crée une liste de trois tuples.\n", + "\n", + "Que peuvent représenter ces trois tuples ?\n", + "\n", + "On peut vérifier qu'il s'agut bien d'un tuple :" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7ce7324e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tuple" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = lst[1]\n", + "type(t)" + ] + }, + { + "cell_type": "markdown", + "id": "8edf8304", + "metadata": {}, + "source": [ + "On peut également accéder directement à l'abscisse ou à l'ordonnée d'un point :" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "056d9616", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lst[2][1]" + ] + }, + { + "cell_type": "markdown", + "id": "3622be65", + "metadata": {}, + "source": [ + "Ici, on accède donc à la première valeur du tuple n°2." + ] + }, + { + "cell_type": "markdown", + "id": "8001f10a", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "572e8c71", + "metadata": {}, + "source": [ + "## Parcours" + ] + }, + { + "cell_type": "markdown", + "id": "bbd95e5a", + "metadata": {}, + "source": [ + "Soit une liste de dictionnaires" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "7ad98a69", + "metadata": {}, + "outputs": [], + "source": [ + "persos = [{\"prenom\" : \"Bilbo\", \"nom\" : \"Baggins\", \"age\" : 111},\n", + " {\"prenom\" : \"Frodo\", \"nom\": \"Baggins\", \"age\" : 33},\n", + " {\"prenom\" : \"Sam\", \"nom\": \"Gamgee\", \"age\" : 21}]" + ] + }, + { + "cell_type": "markdown", + "id": "79500e4c", + "metadata": {}, + "source": [ + "On peut parcourir cette liste en séparant chaque dictionnaire :" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e1f9d519", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "prenom : Bilbo\n", + "nom : Baggins\n", + "age : 111\n", + "----------\n", + "prenom : Frodo\n", + "nom : Baggins\n", + "age : 33\n", + "----------\n", + "prenom : Sam\n", + "nom : Gamgee\n", + "age : 21\n" + ] + } + ], + "source": [ + "for p in persos:\n", + " print (\"----------\")\n", + " for k, v in p.items():\n", + " print (k, ' : ', v)" + ] + }, + { + "cell_type": "markdown", + "id": "2e16c4c1", + "metadata": {}, + "source": [ + "Que fait la première boucle ? La seconde ?" + ] + }, + { + "cell_type": "markdown", + "id": "64e9f3d8", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "8c553978", + "metadata": {}, + "source": [ + "## Les compréhensions" + ] + }, + { + "cell_type": "markdown", + "id": "37f82c8b", + "metadata": {}, + "source": [ + "> La notation en compréhension permet de créer une liste ou un dictionnaire sans en lister les élèments de manière explicite." + ] + }, + { + "cell_type": "markdown", + "id": "c051c29f", + "metadata": {}, + "source": [ + "Par exemple, pour créer une liste comportant les entiers de 2 à 10 inclus :" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2ff74969", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3, 4, 5, 6, 7, 8, 9, 10]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[i for i in range (2, 11)]" + ] + }, + { + "cell_type": "markdown", + "id": "ba1daaa0", + "metadata": {}, + "source": [ + "On peut aussi appliquer des fonctions à chaque élément :" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a1f0ed4a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 9, 16, 25, 36, 49, 64, 81, 100]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[i ** 2 for i in range (2, 11)]" + ] + }, + { + "cell_type": "markdown", + "id": "25813435", + "metadata": {}, + "source": [ + "Enfin, il est possible d'appliquer des conditions dans votre déclaration de structures:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "34096ef5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[9, 49, 169, 289, 529, 729, 1089, 1369, 1849, 2209]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[i ** 2 for i in range (2, 51) if (i ** 2) % 10 == 9]" + ] + }, + { + "cell_type": "markdown", + "id": "cf329e0d", + "metadata": {}, + "source": [ + "Que fait cette instruction ?\n", + "\n", + "Pour les dictionnaires : la syntaxe est la même, il faut juste préciser la clé et la valeur de chaque élèment :" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f974717b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{k: k ** 3 for k in range (2, 11)}" + ] + }, + { + "cell_type": "markdown", + "id": "ae71eaa0", + "metadata": {}, + "source": [ + "Cela va créer un dictionnaire donc chaque clé sera un nombre entre 2 et 11 non compris, et où la valeur de chaque clé sera le cube de la clé associée.\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/representation_construits/chapitre_3/README.ipynb b/representation_construits/chapitre_3/README.ipynb new file mode 100644 index 0000000..80c5b67 --- /dev/null +++ b/representation_construits/chapitre_3/README.ipynb @@ -0,0 +1,396 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b8f17c0e", + "metadata": {}, + "source": [ + "# # Structures imbriquées et compréhensions" + ] + }, + { + "cell_type": "markdown", + "id": "5c98615f", + "metadata": {}, + "source": [ + "> Il est possible de combiner listes, tuples, et dictionnaires. Avec la syntaxe des compréhensions, l'écriture des listes et dictionnaires semble plus élègante." + ] + }, + { + "cell_type": "markdown", + "id": "6a42e2e0", + "metadata": {}, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "id": "2cda11f3", + "metadata": {}, + "source": [ + "## Les structures imbriquées" + ] + }, + { + "cell_type": "markdown", + "id": "ca8a7b82", + "metadata": {}, + "source": [ + "On peut imbriquer des listes, des tuples et des dictionnaires. Par contre, les clés de dictionnaire ne peuvent pas muter.\n", + "\n", + "De ce fait, nous pouvons construire des listes de listes, des listes de tuples, des listes de dictionnaires, des tuples de listes, des dictionnaires de tuples..." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e3846d2b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-1, 0)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lst = [(4,5), (-1, 0), (2.5, 1)]\n", + "len (lst)\n", + "lst[1]" + ] + }, + { + "cell_type": "markdown", + "id": "15b98fb6", + "metadata": {}, + "source": [ + "Ici, on crée une liste de trois tuples.\n", + "\n", + "Que peuvent représenter ces trois tuples ?\n", + "\n", + "On peut vérifier qu'il s'agut bien d'un tuple :" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7ce7324e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tuple" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = lst[1]\n", + "type(t)" + ] + }, + { + "cell_type": "markdown", + "id": "8edf8304", + "metadata": {}, + "source": [ + "On peut également accéder directement à l'abscisse ou à l'ordonnée d'un point :" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "056d9616", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lst[2][1]" + ] + }, + { + "cell_type": "markdown", + "id": "3622be65", + "metadata": {}, + "source": [ + "Ici, on accède donc à la première valeur du tuple n°2." + ] + }, + { + "cell_type": "markdown", + "id": "8001f10a", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "572e8c71", + "metadata": {}, + "source": [ + "## Parcours" + ] + }, + { + "cell_type": "markdown", + "id": "bbd95e5a", + "metadata": {}, + "source": [ + "Soit une liste de dictionnaires" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "7ad98a69", + "metadata": {}, + "outputs": [], + "source": [ + "persos = [{\"prenom\" : \"Bilbo\", \"nom\" : \"Baggins\", \"age\" : 111},\n", + " {\"prenom\" : \"Frodo\", \"nom\": \"Baggins\", \"age\" : 33},\n", + " {\"prenom\" : \"Sam\", \"nom\": \"Gamgee\", \"age\" : 21}]" + ] + }, + { + "cell_type": "markdown", + "id": "79500e4c", + "metadata": {}, + "source": [ + "On peut parcourir cette liste en séparant chaque dictionnaire :" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e1f9d519", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "prenom : Bilbo\n", + "nom : Baggins\n", + "age : 111\n", + "----------\n", + "prenom : Frodo\n", + "nom : Baggins\n", + "age : 33\n", + "----------\n", + "prenom : Sam\n", + "nom : Gamgee\n", + "age : 21\n" + ] + } + ], + "source": [ + "for p in persos:\n", + " print (\"----------\")\n", + " for k, v in p.items():\n", + " print (k, ' : ', v)" + ] + }, + { + "cell_type": "markdown", + "id": "2e16c4c1", + "metadata": {}, + "source": [ + "Que fait la première boucle ? La seconde ?" + ] + }, + { + "cell_type": "markdown", + "id": "64e9f3d8", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "8c553978", + "metadata": {}, + "source": [ + "## Les compréhensions" + ] + }, + { + "cell_type": "markdown", + "id": "37f82c8b", + "metadata": {}, + "source": [ + "> La notation en compréhension permet de créer une liste ou un dictionnaire sans en lister les élèments de manière explicite." + ] + }, + { + "cell_type": "markdown", + "id": "c051c29f", + "metadata": {}, + "source": [ + "Par exemple, pour créer une liste comportant les entiers de 2 à 10 inclus :" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2ff74969", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3, 4, 5, 6, 7, 8, 9, 10]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[i for i in range (2, 11)]" + ] + }, + { + "cell_type": "markdown", + "id": "ba1daaa0", + "metadata": {}, + "source": [ + "On peut aussi appliquer des fonctions à chaque élément :" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a1f0ed4a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[4, 9, 16, 25, 36, 49, 64, 81, 100]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[i ** 2 for i in range (2, 11)]" + ] + }, + { + "cell_type": "markdown", + "id": "25813435", + "metadata": {}, + "source": [ + "Enfin, il est possible d'appliquer des conditions dans votre déclaration de structures:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "34096ef5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[9, 49, 169, 289, 529, 729, 1089, 1369, 1849, 2209]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[i ** 2 for i in range (2, 51) if (i ** 2) % 10 == 9]" + ] + }, + { + "cell_type": "markdown", + "id": "cf329e0d", + "metadata": {}, + "source": [ + "Que fait cette instruction ?\n", + "\n", + "Pour les dictionnaires : la syntaxe est la même, il faut juste préciser la clé et la valeur de chaque élèment :" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f974717b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{k: k ** 3 for k in range (2, 11)}" + ] + }, + { + "cell_type": "markdown", + "id": "ae71eaa0", + "metadata": {}, + "source": [ + "Cela va créer un dictionnaire donc chaque clé sera un nombre entre 2 et 11 non compris, et où la valeur de chaque clé sera le cube de la clé associée.\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/representation_construits/chapitre_3/README.md b/representation_construits/chapitre_3/README.md new file mode 100644 index 0000000..f8e2e87 --- /dev/null +++ b/representation_construits/chapitre_3/README.md @@ -0,0 +1,98 @@ +# Structures imbriquées et compréhensions + +> Il est possible de combiner listes, tuples, et dictionnaires. Avec la syntaxe des compréhensions, l'écriture des listes et dictionnaires semble plus élègante. + +-------- + +## Les structures imbriquées + +On peut imbriquer des listes, des tuples et des dictionnaires. Par contre, les clés de dictionnaire ne peuvent pas muter. + +De ce fait, nous pouvons construire des listes de listes, des listes de tuples, des listes de dictionnaires, des tuples de listes, des dictionnaires de tuples... + +```python +lst = [(4,5), (-1, 0), (2.5, 1)] +len (lst) +lst[1] +``` + +Ici, on crée une liste de trois tuples. + +Que peuvent représenter ces trois tuples ? + +On peut vérifier qu'il s'agut bien d'un tuple : + +```python +t = lst[1] +type(t) +``` + +On peut également accéder directement à l'abscisse ou à l'ordonnée d'un point : + +```python +lst[2][1] +``` + +Ici, on accède donc à la première valeur du tuple n°2. + +-------- + +## Parcours + +Soit une liste de dictionnaires + +```python +persos = [{"prenom" : "Bilbo", "nom" : "Baggins", "age" : 111}, + {"prenom" : "Frodo", "nom": "Baggins", "age" : 33}, + {"prenom" : "Sam", "nom": "Gamgee", "age" : 21}] +``` + +On peut parcourir cette liste en séparant chaque dictionnaire : + +```python +for p in persos: + print ("----------") + for k, v in p.items(): + print (k, ' : ', v) +``` + +Que fait la première boucle ? + +La seconde ? + +-------------------- + +## Les compréhensions + +> La notation en compréhension permet de créer une liste ou un dictionnaire sans en lister les élèments de manière explicite. + +Par exemple, pour créer une liste comportant les entiers de 2 à 10 inclus : + +```python +[i for i in range (2, 11)] +``` + +On peut aussi appliquer des fonctions à chaque élément : + +```python +[i ** 2 for i in range (2, 11)] +``` + +Enfin, il est possible d'appliquer des conditions dans votre déclaration de structures: + +```python +[i ** 2 for i in range (2, 51) if (i ** 2) % 10 == 9] +``` + +Que fait cette instruction ? + +Pour les dictionnaires : la syntaxe est la même, il faut juste préciser la clé et la valeur de chaque élèment : + +```python +{k: k ** 3 for k in range (2, 11)} +``` + +Cela va créer un dictionnaire donc chaque clé sera un nombre entre 2 et 11 non compris, et où la valeur de chaque clé sera le cube de la clé associée. + + +