From 619230efc0e7c017f9770579f22c22c6ad6af8f7 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Mon, 25 Sep 2023 19:44:44 +0200 Subject: [PATCH 01/41] modif 25/09 --- .../01_prise_en_mainmodif.ipynb | 1691 +++++++++++++++++ .../02_structures_controle_modif.ipynb | 1033 ++++++++++ 2 files changed, 2724 insertions(+) create mode 100644 exercises/TD01_prise_en_main/01_prise_en_mainmodif.ipynb create mode 100644 exercises/TD02_structures_controle/02_structures_controle_modif.ipynb diff --git a/exercises/TD01_prise_en_main/01_prise_en_mainmodif.ipynb b/exercises/TD01_prise_en_main/01_prise_en_mainmodif.ipynb new file mode 100644 index 000000000..d675b5c39 --- /dev/null +++ b/exercises/TD01_prise_en_main/01_prise_en_mainmodif.ipynb @@ -0,0 +1,1691 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TD 1: Environnement de programmation et premiers pas avec Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## 1.Vérification de l'installation de l'environnement de programmation\n", + "\n", + "Avant de débuter ce td, vous devez avoir suivi la procédure d'installation [INSTALL.md](https://github.com/uvsq-info/l1-python/blob/master/INSTALL.md) si vous utilisez votre ordinateur personnel. Et, que vous utilisiez votre ordinateur personnel ou bien un ordinateur du cartable numérique, vous avez testé toutes les étapes du [tutoriel de prise en main de l'environnement de programmation](https://github.com/uvsq-info/l1-python/blob/master/README.md) jusqu'à la partie **utilisation du projet dans un terminal**. Si un des tests ne marche pas, appelez un enseignant. Si vous ne réusissez pas à exécuter le code du notebook, et en attendant que l'on vienne vous aider, vous pouvez travailler en utilisant un [notebook en ligne](https://colab.research.google.com/notebooks/intro.ipynb). Le notebook en ligne est aussi une solution pour programmer depuis chez vous si vous n'avez pas installé l'environnement correctement. Mais la solution privilégiée reste d'installer l'environnement.\n", + "\n", + "Si vous n'avez suivi que les étapes antérieures à l'installation du système de gestion de versions dans le document INSTALL.md, vous pouvez simplement ignorer la section concernant Git dans le tutoriel d'introduction à l'environnement de programmation.\n", + "\n", + "Tout au long du travail que vous ferez sur les notebooks, pensez à sauvegarder via la barre de menus *File* puis *Save* ou avec le raccourci clavier Ctrl+S. Lorsqu'un fichier est correctement sauvegardé, le rond blanc disposé à côté du nom du fichier en haut de VSCode disparait.\n", + "A la fin du td, mais également à la fin de chaque section du notebook, pensez à sauvegardez votre travail sur votre compte github.\n", + "\n", + "Afin d'utiliser les cellules de ce notebook, en haut à droite de la fenêtre cliquer sur \"Select Kernel\" et choisir \"Python 3.9.X XX-bit ('l1-python': conda)\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## 2.Utilisation du notebook **Python**\n", + "\n", + "Dans un premier temps, nous allons voir comment utiliser le notebook. Le notebook permet d'écrire du code que l'on peut évaluer au fur et à mesure. Plus tard, nous programmerons dans un fichier texte, en utilisant l'éditeur VisualStudioCode (VSCode dans la suite) et l'environnement qu'il fournit pour écrire des programmes en Python. \n", + "\n", + "Un notebook contient des *cellules* qui sont de deux sortes: il y a des cellules de texte écrites dans un langage de mise en forme de texte appelé *Markdown*, et les cellules de code que vous allez remplir. Les cellules de code sont sur fond gris et un triangle gris apparait sur la gauche de la cellule lorsque votre souris la survole.\n", + "\n", + "1. Dans la cellule de code suivante, tapez `1 + 1` puis évaluez la cellule en cliquant sur le triangle gris situé à gauche de la cellule!\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1+1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Cliquez de nouveau sur cette cellule et appuyez sur les touches `SHIFT + ENTREE` du clavier.\n", + "\n", + "**Note**: Cela évalue également la cellule de code. Remarquez le numéro qui s'affiche dans les crochets à gauche de la cellule de code : c'est *l'ordre d'évaluation* de la cellule. \n", + "\n", + "3. Dans la cellule suivante, affectez le résultat de l'expression `1 + 1` à une variable notée `a`. Bien entendu, évaluez la cellule (on ne le rappellera pas systématiquement)." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1+1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Remarquez que l'évaluation de cette cellule ne génère aucun *texte en sortie*. Pour connaître la valeur de la variable `a`, tapez le nom de la variable dans la cellule suivante." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a=1+1\n", + "a\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Testez maintenant l'expression `print(a)`." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + } + ], + "source": [ + "print(a)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Le résultat est identique. La première méthode fonctionne dans le notebook, mais pas dans un programme Python. C'est pourquoi il vaut mieux utiliser la deuxième méthode qui repose sur l'utilisation de la *fonction native* `print()`. L'ensemble de ces fonctions est [disponible ici](https://docs.python.org/fr/3.5/library/functions.html).\n", + "\n", + "6. Augmentez de 1 la valeur de `a`. L'expression doit donner le bon résultat quelle que soit la valeur de la variable." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + }, + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(a)\n", + "a+=1\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Et vérifiez en affichant la valeur de `a`." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "7. Ré-évaluez toutes les cellules où vous avez affiché la valeur de `a`. Que remarquez-vous? On voit ici que ce qui compte dans le notebook est *l'ordre d'évaluation* et non pas *l'ordre d'apparition* des cellules. Ce comportement est source d'erreur, il faut donc bien y faire attention.\n", + "\n", + "8. Sans écrire de code supplémentaire, augmentez encore de 1 la valeur de `a`, et vérifiez que ça a bien fonctionné.\n", + "\n", + "**Note**: les 5 questions suivantes sont relatives à l'usage du notebook dans VSCode. Si vous travaillez avec un autre type de notebook, il est possible que vous n'ayez pas accès à toutes ces fonctionnalités.\n", + "\n", + "9. Parmi les icônes situés en haut du notebook, cliquez sur `Clear Outputs` puis ré-évaluez la variable `a`.\n", + "\n", + "10. Parmi les icônes situés en haut du notebook, cliquez sur `Variables` et regardez le résultat. Cet outil est très utile pour comprendre les erreurs liées à l'ordre d'évaluation des cellules.\n", + "\n", + "11. Parmi les icônes situés en haut du notebook, cliquez sur `Restart` et regardez le résultat dans l'affichage des variables. Ré-évaluez la variable `a`. Que se passe-t'il ?\n", + "\n", + "12. Enfin, sauvegardez votre travail.\n", + "\n", + "13. Dans la cellule suivante, affectez la valeur 5 à la variable `a` et la valeur 2 à la variable `b`, puis afficher les 2 valeurs avec l'expression `print(a, b)`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "2\n", + "5 2\n" + ] + } + ], + "source": [ + "a=5 \n", + "b=2\n", + "print(a)\n", + "print(b)\n", + "print(a,b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "15. Ecrivez le code qui permet d'échanger la valeur des variables `a` et `b`. Puis affichez leurs valeurs." + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "2\n", + "2 5\n" + ] + } + ], + "source": [ + "print(a)\n", + "print(b)\n", + "a,b=b,a\n", + "print(a,b)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n", + "5\n", + "5 2\n" + ] + } + ], + "source": [ + "print(a)\n", + "print(b)\n", + "b,a=a,b\n", + "print(a,b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "16. Pour enrichir l'affichage, recopiez l'expression `print(\"a vaut\", a, \"et b vaut\", b)`." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a vaut 5 et b vaut 2\n" + ] + } + ], + "source": [ + "print(\"a vaut\", a, \"et b vaut\", b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "17. Recopiez l'affectation suivante `a = \"hello world\"`, puis affichez la valeur de `a`." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'hello world'" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a=\"hello world\"\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: la variable `a` contenait un entier, et maintenant une chaîne de caractères. En Python les variables ont un *type dynamique* contrairement au type statique où le type des variables est défini une fois pour toutes. De plus ce typage est *implicite*, c'est-à-dire qu'il est déterminé par les objets auxquels les variables font référence sans avoir besoin de l'écrire explicitement.\n", + "\n", + "18. Afficher de nouveau la valeur de `a` sans utiliser la fonction `print`. Que constatez-vous?\n", + "\n", + "19. Avant de passer à la suite, sauvegardez votre notebook, et sauvegardez le sur github." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "-------------------\n", + "## 3.Types de données\n", + "En Python, toute variable ou expression possède un *type* qui définit, entre autres, les opérations que l'on peut lui appliquer. Parmi les types natifs on peut citer les nombres entiers, les nombres flottants, les chaînes de caractères (string en anglais) et les booléens (Vrai ou Faux).\n", + "\n", + "\n", + "1. Prédisez le type de chacune des expressions suivantes. Vérifiez le à l'aide de la fonction `type()`:\n", + "\n", + "* `5`\n", + "* `5.0`\n", + "* `\"5\"`\n", + "* `-5`\n", + "* `5 / 2`\n", + "* `5 // 2`\n", + "* ` 5 == 2 `\n", + "* `5 = 2`" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(5))" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(5.0))" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(\"5\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(-5))" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(5/2))" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(5%2)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(5//2))" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(5==2))" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "expression cannot contain assignment, perhaps you meant \"==\"? (1591063500.py, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m Cell \u001b[1;32mIn[84], line 1\u001b[1;36m\u001b[0m\n\u001b[1;33m print(type(5 = 2))\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m expression cannot contain assignment, perhaps you meant \"==\"?\n" + ] + } + ], + "source": [ + "print(type(5 = 2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "True\n", + "\n" + ] + }, + { + "ename": "TypeError", + "evalue": "type() takes 1 or 3 arguments", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\Administrator\\Desktop\\l1-python-master\\l1-python-master\\exercises\\TD01_prise_en_main\\01_prise_en_main.ipynb Cell 35\u001b[0m line \u001b[0;36m8\n\u001b[0;32m 6\u001b[0m \u001b[39mprint\u001b[39m(a)\n\u001b[0;32m 7\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mtype\u001b[39m(a))\n\u001b[1;32m----> 8\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mtype\u001b[39;49m(a,b))\n", + "\u001b[1;31mTypeError\u001b[0m: type() takes 1 or 3 arguments" + ] + } + ], + "source": [ + "a=True\n", + "b=False \n", + "c=5\n", + "d=2\n", + "print(c>2)\n", + "print(a)\n", + "print(type(a))\n", + "print(type(a,b))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ce sont les types de base du langage Python que nous allons étudier dans la suite. Notez que les nombres flottants s'écrivent avec un point et non avec une virgule.\n", + "\n", + "2. Faites la même chose avec les expressions suivantes:\n", + "\n", + "* `(5, 2)`\n", + "* `[5, 2]`\n", + "* `{5, 2}`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type((5, 2)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type([5, 2]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type({5, 2}))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ce sont des types avancés, qui permettent de construire des structures de données plus complexes, que nous apprendrons à manipuler plus tard. Pouvez-vous trouver une expression ayant un autre type? Vous pouvez consulter la [documentation Python sur les types](https://docs.python.org/fr/3/library/stdtypes.html).\n", + "\n", + "3. Maintenant, affectez une valeur à une variable `x`, et écrivez le code qui affiche, par exemple, `le type de x est ` si jamais la valeur stockée dans `x` est un entier.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "le type de x est \n" + ] + } + ], + "source": [ + "x=2\n", + "print('le type de x est',type(x))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 3.1 Type numérique entier\n", + "\n", + "1. Affectez une valeur entière à une variable `v`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "v=211" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Ecrivez le résultat de la division entière de `v` par 11. Par exemple, si `v` vaut 149, le résultat affiché doit être de la forme: \n", + "\n", + "`149 = 13 x 11 + 6`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "211 = 19 x 11 + 2\n" + ] + } + ], + "source": [ + "print(v,'=',v//11,\"x 11 +\",v%11)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Prédisez le résultat des expressions suivantes, puis évaluer le code:\n", + "* `3 * (10 / 3)`\n", + "* `3 * (10 // 3)`\n", + "* `(3 * 10) // 3`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10.0\n" + ] + } + ], + "source": [ + "print(3*(10/3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "print(3*(10//3))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n" + ] + } + ], + "source": [ + "print((3*10)//3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Le résultat change-t'il si on retire les parenthèses des expressions précédentes?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "6. Affectez un nombre entier à une variable, puis écrivez une expression qui affiche `True` si la variable est paire et `False` sinon." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "nombre=122\n", + "print((nombre%2)==0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "7. L'opérateur puissance s'écrit `**`. Par exemple, 2 à la puissance 10 s'écrit `2 ** 10`. Affichez la valeur de 2 puissance 256. Combien de chiffres a ce nombre (en évitant de compter sur l'écran)?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "115792089237316195423570985008687907853269984665640564039457584007913129639936\n", + "78\n" + ] + } + ], + "source": [ + "print(2**256)\n", + "print(len(str(2**256)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: les nombres entiers ont une précision arbitraire." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ecrire l'expression qui donne le dernier chiffre du nombre référencé par la variable `a`." + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n" + ] + } + ], + "source": [ + "a=2005\n", + "print((str(a))[-1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ecrire l'expression qui donne l'avant-dernier chiffre du nombre référencé par la variable `a`." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "print((str(a))[-2])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### 3.2 Nombres flottants\n", + "\n", + "1. L'expression `0.2 + 0.4` est-elle égale, supérieure ou inférieure à `0.6`?" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "False\n" + ] + } + ], + "source": [ + "print((0.2 + 0.4)>0.6)\n", + "print((0.2+0.4)<0.6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Affectez la valeur 0.5 à une variable `x`. Multipliez `x` par $2^{30}$ puis convertissez le résultat obtenu en valeur entière (utilisez la fonction `int()`) puis divisez le résultat par $2^{30}$ (faire une division flottante)." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.5\n" + ] + } + ], + "source": [ + "x=0.5\n", + "x=x*(2**30)\n", + "int(x)\n", + "x=x/(2**30)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Remplacez la valeur de `x` par 0.1 et refaites le calcul." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.1\n" + ] + } + ], + "source": [ + "x=0.1\n", + "x=x*(2**30)\n", + "int(x)\n", + "x=x/(2**30)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Pouvez-vous trouver d'autres valeurs de `x` pour lesquelles l'expression calculée redonne la valeur de `x`?\n", + "\n", + "**Note**: les nombres flottants que l'on manipule sont en fait une approximation de ces nombres. Pour plus de détails, vous pouvez consulter [cet article](https://docs.python.org/fr/3.8/tutorial/floatingpoint.html)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 Chaînes de caractères" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Dans la cellule de code suivante, affichez le résultat de l'expression `a + b`, et de `b + a`" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "helloworld\n", + "worldhello\n" + ] + } + ], + "source": [ + "a = \"hello\"\n", + "b = 'world'\n", + "print(a+b)\n", + "print(b+a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Notes**: les chaînes de caractères peuvent s'écrire avec des guillemets simples ou doubles (d'autres formes existent). L'opération d'addition de chaînes est appelée *concaténation*.\n", + "\n", + "2. Dans la cellule précédente, ajoutez un espace entre `hello` et `world` sans modifier les variables." + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello world\n", + "world hello\n" + ] + } + ], + "source": [ + "print(a,b)\n", + "print(b,a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Avant d'afficher le résultat, prédire ce que valent `a * 3` et `(a + b) * 2`?" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hellohellohello\n", + "helloworldhelloworld\n" + ] + } + ], + "source": [ + "print(a*3)\n", + "print((a+b)*2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. On peut appliquer des *méthodes* (ce sont des fonctions qui s'appliquent à un certain type d'objets) à une chaîne de caractères. Par exemple tester ce que vaut `a.upper()`." + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "HELLO\n" + ] + } + ], + "source": [ + "print(a.upper())" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bonjour\n" + ] + } + ], + "source": [ + "print(\"bonjour\".capitalize())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vous pouvez voir la liste des méthodes associées aux chaînes de caractères (ainsi que sur les autres types natifs) sur [cette page](https://docs.python.org/fr/3/library/stdtypes.html#string-methods).\n", + "\n", + "5. La variable `a` a-t'elle été modifiée?" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello\n" + ] + } + ], + "source": [ + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Que vaut `a > b`?" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n" + ] + } + ], + "source": [ + "print(a>b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "7. Quelle est la signification de cette comparaison?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.4 Conversions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Dans la cellule de code suivante, devinez ce que vaut `a * 2` avant de l'afficher." + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3232\n" + ] + } + ], + "source": [ + "a = \"32\"\n", + "print(a*2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Utilisez la fonction de conversion `int()` pour obtenir le résultat de la multiplication de nombres entiers (64 ici)." + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "64\n" + ] + } + ], + "source": [ + "a = \"32\"\n", + "print(int(a)*2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Ecrivez l'expression `s = input(\"Tape quelquechose au clavier\")` puis affichez `s`. Que se passe-t'il?" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bonjour\n" + ] + } + ], + "source": [ + "s = input(\"Tape quelquechose au clavier\")\n", + "print(s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Recopiez le code de la cellule précédente. L'utilisateur doit saisir un nombre entier puis vous affichez ce nombre multiplié par 2." + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100\n", + "200\n" + ] + } + ], + "source": [ + "s = input(\"Tape quelquechose au clavier\")\n", + "print(s)\n", + "print(int(s)*2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. ́Ecrivez le code qui demande son âge à l’utilisateur et répond en utilisant sa réponse au milieu d’une phrase, comme par exemple en lui donnant l’âge qu’il aura en 2031 le même jour." + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vous aurez 26 ans en 2031 le même jour.\n" + ] + } + ], + "source": [ + "age=input(\"donnez vôtre âge\")\n", + "print(\"vous aurez\",int(age)+8,\"ans en 2031 le même jour.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Avant de passer à la suite, sauvegardez votre notebook sur github." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## Exercices supplémentaires" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "1. Parmi les chaînes de caractères suivantes, lesquelles peuvent être des noms de variable?\n", + "* `f`\n", + "* `l`\n", + "* `f2`\n", + "* `2f`\n", + "* `totolehero`\n", + "* `toto_le_hero`\n", + "* `import`\n", + "* `toto2-le-retour`\n", + "\n", + "Et parmi les noms corrects, lesquels ne sont pas recommandés (voir la [PEP8](https://www.python.org/dev/peps/pep-0008/#naming-conventions))?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**réponses** chaînes de caractères pouvant être des variables: f ; l ; f2 ; totolehero; toto_le_hero." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Demandez à l'utilisateur de rentrer un nombre, puis afficher sa racine carrée en faisant une phrase." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n", + "2.0\n" + ] + } + ], + "source": [ + "racine= input(\"donnez-moi un nombre\")\n", + "print(racine)\n", + "print((int(racine))**(1/2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Ecrivez le code qui affiche:\n", + "* la chaı̂ne ”aaaaaa...” (250 ”a”)\n", + "* la chaı̂ne ”bbbb....a” (250 ”b” suivis d’un ”a”)\n", + "* la chaı̂ne ”bbbb....aaabbb...” (250 ”b” suivis d’un ”a” suivi de 100 b)\n", + "* 50 fois ”bonjour” en allant à la ligne à chaque fois (utilisez ”\\n”)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" + ] + } + ], + "source": [ + "print(\"a\"*250)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba\n" + ] + } + ], + "source": [ + "print(\"b\"*250+\"a\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n" + ] + } + ], + "source": [ + "print(\"b\"*250+\"a\"+\"b\"*100) " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "bonjour\n", + "\n" + ] + } + ], + "source": [ + "print((\"bonjour\\n\")*50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Evaluez chaque expression numérique étape par étape selon la priorité des opérateurs.\n", + " * a) 3 + 4 * 6\n", + " * b) 3 * 4 / 6 + 6\n", + " * c) 2 * 3 / 12 * 8 / 4\n", + " * d) 10 * ( 1 + 7 * 3 )\n", + " * e) 20 - 2 / 6 + 3\n", + " * f) ( 20 - 2 ) / ( 6 + 3 )\n", + " * g) 10 + 15 % 2 + 4.3\n", + " * h) 3 * 4 / 6 + 6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Réponses:**\n", + "* a) 3+4*6=3+24=27 \n", + "* b) 3*4/6+6=12/6+6=2+6=8\n", + "* c) 2*3/12*8/4=6/12*8/4=1/2*8/4=1/2*2=1\n", + "* d) 10*(1+7*3)=10*(1+21)=10*22=220\n", + "* e) 20-2/6+3=20-1/2+3=20+7/2=(40+7)/2=47/2=23.5\n", + "* f) (20-2)/(6+3)=18/9=2\n", + "* g) 10+15%2+4.3=10+1+4.3=11+4.3=15.3\n", + "* h) 3*4/6+6=12/6+6=2+6=8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Saisir, Calculer et Afficher\n", + "\n", + " * (1) Ecrire un code qui permet de faire les tâches suivantes :\n", + " * a) Saisir deux variables, a et b, de type entier.\n", + " * b) Calculer la somme de ces deux variables.\n", + " * c) Affecter le résultat dans la variable « Somme ».\n", + " * d) Calculer le quotient de ces deux variables.\n", + " * e) Affecter le résultat dans la variable « Quotient ».\n", + " * f) Afficher les valeurs des variables « Somme » et « Quotient ». Le message doit être sous la forme suivante «La somme de 3 et 1 est 4 et le quotient de 3 sur 1 est 3 »\n", + " \n", + " * (2) Quel est le nombre total de variables utilisées pour cet algorithme ?\n", + " \n", + " * (3) On veut, maintenant, minimiser le nombre de variables utilisées par le code précédent.\n", + " * a) Quel est le nombre maximal de variables qu’on peut supprimer ?\n", + " * b) Quel est le nombre minimal de variables qu’on peut supprimer ?\n", + " \n", + " * (4) Ecrire le code correspondant à 3.a. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "la somme de 5 et 2 est 7 et le quotient de 5 sur 2 est 2\n" + ] + } + ], + "source": [ + "a= input(\"saisir a\")\n", + "b= input(\"saisir b\")\n", + "somme= int(a)+int(b)\n", + "quotient=int(a)//int(b)\n", + "print(\"la somme de\",a,\"et\",b,\"est\",somme,\"et le quotient de\",a,\"sur\",b,\"est\",quotient)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Ecrire un code qui permet de calculer le diamètre, le périmètre et la surface d’un cercle. Pour ce faire nous allons procéder comme suit :\n", + " * a) Déclarer la variable constante 𝝅 et la variable Ray contenant la valeur 10.\n", + " * b) Déclarer trois variables DM, PR et SR.\n", + " * c) Affecter respectivement à DM, PR et SR les valeurs du diamètre, du périmètre et de la surface d’un cercle dont le rayon est Ray.\n", + " * d) Afficher le message suivant \"Le cercle de rayon AA a pour diamètre BB, pour périmètre CC et pour surface DD\"." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Le cercle de rayon 10 a pour diamètre 20 , pour périmètre 62.800000000000004 et pour surface 314.0\n" + ] + } + ], + "source": [ + "pi=3.14\n", + "Ray=10\n", + "DM=2*Ray\n", + "PR=2*pi*Ray\n", + "SR=pi*(Ray**2)\n", + "\n", + "\n", + "print(\"Le cercle de rayon\",Ray, \"a pour diamètre\", DM,\", pour périmètre\", PR,\" et pour surface\", SR)" + ] + } + ], + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb new file mode 100644 index 000000000..6b6399032 --- /dev/null +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -0,0 +1,1033 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# TD 2: Les structures de contrôle\n", + "\n", + "---\n", + "\n", + "## 0. Récupération des nouveaux documents\n", + "\n", + "\n", + "Les sujets de TD ainsi que les supports de cours sont publiés en ligne au fur et à mesure sur l'espace github original [https://github.com/uvsq-info/l1-python](https://github.com/uvsq-info/l1-python). Au moment où vous avez fait le fork de cet espace sur votre espace personnel, il est probable que tous les contenus n'étaient pas présents. Pour compléter votre espace, deux solutions sont possibles:\n", + "\n", + "\n", + "1. (solution à privilégier) aller sur la page du projet original [https://github.com/uvsq-info/l1-python](https://github.com/uvsq-info/l1-python), et cliquer sur le bouton vert `Code` en haut à droite. Choisir `download ZIP`, puis extraire l'ensemble des nouveaux fichiers vers votre projet personnel local. Vous pouvez ensuite sauvegarder ces ajouts dans votre espace github personnel en suivant la procédure habituelle.\n", + "2. (solution qui présente des risques de conflits entre différentes versions d'un même document) en ligne de commande dans le terminal, en suivant la procédure de la section *Intégrer les mises à jour du projet original* du fichier [README.md](https://github.com/uvsq-info/l1-python/blob/master/README.md#int%C3%A9grer-les-mises-%C3%A0-jour-du-projet-original)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "---\n", + "\n", + "## 1. Premiers exercices avec les structures conditionnelles\n", + "\n", + "**Exercice 1:**\n", + "\n", + "1. Soit *num1 = 15* et *num2 = 5*. Ecrire un programme qui affiche *Factors!* si l'un des nombres est un facteur de l'autre (c'est-à-dire qu'il divise l'autre nombre). Si aucun des nombres n'est un facteur de l'autre, le programme n'affiche rien.\n", + "2. Changer le code que vous avez écrit de telle sorte qu'il affiche toujours *Factors!* si un nombre est un facteur de l'autre, mais qui affiche aussi *Not factors!* si aucun des nombres n'est un facteur de l'autre." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Factors!\n" + ] + } + ], + "source": [ + "num1=15\n", + "num2=5\n", + "if num1%num2==0 or num2%num1==0:\n", + " print(\"Factors!\")\n", + "else:\n", + " print(\"Not factors!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Exercice 2:**\n", + " \n", + "Soit *state = \"Georgia\"*. Ecrire un programme qui permet d'afficher un message spécifique en fonction de la variable *state* : \n", + "* \"School isn't cancelled.\" si nous sommes à New Jersey, \n", + "* \"School is postponed.\" si nous sommes à North Carolina,\n", + "* \"School is cancelled!\" si nous sommes à Georgia, \n", + "* \"School's status is unknown\" si nous ne sommes pas dans un des trois états précédemment mentionnés." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "School is cancelled\n" + ] + } + ], + "source": [ + "state= \"Georgia\"\n", + "if state==\"New Jersey\":\n", + " print(\"School isn't cancelled.\")\n", + "if state==\"North Carolina\":\n", + " print(\"School is postponed\")\n", + "if state==\"Georgia\":\n", + " print(\"School is cancelled\")\n", + "else:\n", + " print(\"School status is unknown\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Exercice 3:**\n", + "\n", + "Ecrire un programme pour découvrir le signe du zodiaque chinois pour une année donnée. Le signe du zodiaque chinois est basé sur un cycle de 12 ans et chaque année de ce cycle est représentée par un animal :\n", + "* 0: monkey\n", + "* 1: rooster\n", + "* 2: dog\n", + "* 3: pig\n", + "* 4: rat\n", + "* 5: fox\n", + "* 6: tiger\n", + "* 7: rabbit\n", + "* 8: dragon\n", + "* 9: snake\n", + "* 10: horse\n", + "* 11: sheep\n", + "\n", + "La valeur de l'année % 12 détermine le signe du zodiaque. Par exemple, 1900 est l'année du *rat* puisque 1900 % 12 est 4." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rabbit\n" + ] + } + ], + "source": [ + "année=2023\n", + "signe=année%12\n", + "zodiac=[\"monkey\",\"rooster\",\"dog\",\"pig\",\"rat\",\"fox\",\"tiger\",\"rabbit\",\"dragon\",\"snake\",\"horse\",\"sheep\"]\n", + "print(zodiac[signe])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Exercice 4:**\n", + "\n", + "Soit *temperature = -3.7* et *celsius = True*. *celsius* est une variable booléenne qui indique si la température est en Celsius; si c'est *False*, alors la température donnée est en Fahrenheit. Ecrire un premier programme en utilisant *if-else* seulement qui permet d'afficher *Freezing* si les valeurs données représentent une température très basse, et *Not freezing* si ce n'est pas le cas. En Celsius, on considère qu'il fait très froid lorsque la température est inférieure ou égale à 0 degré. En Fahrenheit, on considère qu'il fait très froid lorsque la température est inférieure ou égale à 32 degrés. Proposer une seconde solution en utilisant *if-elif-else* à ce même problème." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Freezing\n" + ] + } + ], + "source": [ + "temperature= -3.7\n", + "celsius = True\n", + "if celsius:\n", + " if temperature<=0:\n", + " print('Freezing')\n", + " else:\n", + " print('Not freezing')\n", + "else:\n", + " if temperature<=32:\n", + " print(\"Freezing\")\n", + " else:\n", + " print(\"Not freezing\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Exercice 5:**\n", + " \n", + "Ecrire un programme qui permet de déterminer si une année est bissextile ou non en utilisant une seule instruction *if-else*. Une année *A* est bissextile si *A* est divisible par 4. Elle ne l’est cependant pas si *A* est un multiple\n", + "de 100, à moins que *A* ne soit multiple de 400. " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "année non-bissextile\n" + ] + } + ], + "source": [ + "A=2023\n", + "if A%4==0 and (A%100!=0 or A%400==0):\n", + " print(\"année bissextile\")\n", + "else:\n", + " print(\"année non-bissextile\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## 2. Premiers exercices avec les structures itératives\n", + "\n", + "**Exercice 6:**\n", + "\n", + "1. Ecrire un programme qui permet d'afficher tous les nombres entre 1 et 10 (bornes incluses).\n", + "2. Ecrire un programme se limitant à la boucle *for* qui permet d'afficher tous les nombres pairs entre 1 et 20 (bornes incluses). Proposer une deuxième solution en incluant une structure conditionnelle." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "2\n", + "3\n", + "4\n", + "5\n", + "6\n", + "7\n", + "8\n", + "9\n", + "10\n" + ] + } + ], + "source": [ + "for i in range (11):\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "2\n", + "4\n", + "6\n", + "8\n", + "10\n", + "12\n", + "14\n", + "16\n", + "18\n", + "20\n" + ] + } + ], + "source": [ + "for i in range (0,21,2):\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "2\n", + "4\n", + "6\n", + "8\n", + "10\n", + "12\n", + "14\n", + "16\n", + "18\n", + "20\n" + ] + } + ], + "source": [ + "for i in range (0,21,2):\n", + " if i%2==0:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n" + ] + } + ], + "source": [ + "print([i for i in range (11)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercice 7:**\n", + " \n", + "1. Ecrire un programme qui demande à l'utilisateur de saisir *n* nombres, *n* étant choisi par l'utilisateur, puis d'afficher la moyenne de ces nombres.\n", + "\n", + "2. Même question, mais l'utilisateur ne choisit pas à l'avance le nombre *n*, la procédure s'arrête quand il saisit le nombre -1.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14.5\n" + ] + } + ], + "source": [ + "n=input(\"calcul de moyenne: combien de nombres?\")\n", + "liste=[]\n", + "moyenne=0\n", + "for i in range (int(n)):\n", + " place=input(\"quel sera le nombre?\")\n", + " liste.append(float(place))\n", + "for terme in liste:\n", + " moyenne=moyenne+terme\n", + "moyenne=moyenne/len(liste)\n", + "print(moyenne)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.125\n" + ] + } + ], + "source": [ + "liste=[]\n", + "moyenne=0\n", + "place=\"\"\n", + "while place!=\"-1\":\n", + " place=input(\"quel sera le nombre?\")\n", + " liste.append(float(place))\n", + "for terme in liste:\n", + " moyenne=moyenne+terme\n", + "moyenne=moyenne/len(liste)\n", + "print(moyenne)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercice 8:**\n", + "\n", + "Ecrire un programme qui permet de calculer le factoriel d'un nombre positif donné par l'utlisateur selon la formule suivante : \n", + "n! = 1 x 2 x ... x n. \n", + "\n", + "1. Une première version en utilisant la boucle *for*\n", + "2. Une seconde version en utilisant la boucle *while*" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24\n" + ] + } + ], + "source": [ + "n=input(\"nombre?\")\n", + "n=int(n)\n", + "factoriel=1\n", + "for i in range (1,n+1):\n", + " factoriel=factoriel*i\n", + "print(factoriel)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24\n" + ] + } + ], + "source": [ + "n=input(\"nombre?\")\n", + "n=int(n)\n", + "factoriel=1\n", + "while i!=1:\n", + " for i in range (n,0,-1):\n", + " factoriel=factoriel*i\n", + "print(factoriel)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "---\n", + "\n", + "## 3. Pour aller plus loin\n", + "\n", + "**Excercice 9:**\n", + "\n", + "Ecrire un programme qui permet de connaître le jour de naissance de l'utilisateur en posant cinq questions.\n", + "Chaque question demande si le jour est dans l'un des cinq ensembles suivants :\n", + "\n", + "* Set 1: \\[1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31\\]\n", + "* Set 2: \\[2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31\\]\n", + "* Set 3: \\[4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31\\]\n", + "* Set 4: \\[8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31\\]\n", + "* Set 5: \\[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31\\]\n", + " \n", + "\n", + "Le jour de naissance est la somme des premiers nombres dans les ensembles où le jour apparaît. Par exemple,\n", + "si le jour de naissance est 19, il apparaît dans Set 1, Set 2 et Set 5. Les premiers chiffres de ces trois ensembles sont 1, 2 et 16. Leur somme est 19." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "19\n" + ] + } + ], + "source": [ + "set1=[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31]\n", + "set2=[2 ,3 ,6 ,7 ,10 ,11 ,14 ,15 ,18 ,19 ,22 ,23 ,26 ,27 ,30, 31]\n", + "set3= [4 ,5 ,6 ,7 ,12, 13 ,14 ,15 ,20 ,21 ,22 ,23 ,28 ,29 ,30 ,31]\n", + "set4= [8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,24 ,25 ,26 ,27 ,28 ,29 ,30 ,31]\n", + "set5=[16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,26 ,27 ,28 ,29 ,30 ,31]\n", + "V=[set1,set2,set3,set4,set5]\n", + "answer=[]\n", + "final=0\n", + "for i in range(5):\n", + " Quest=input(\"nombre dans ce set? :\"+str(V[i]))\n", + " answer.append(int(Quest))\n", + "for i in range (len(answer)):\n", + " if answer[i]!=0:\n", + " final+=V[i][0]\n", + "print(final)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Excercice 10:**\n", + "\n", + "Ecrire un programme qui permet de génèrer de manière aléatoire un nombre à deux chiffres, invite l'utilisateur à saisir un nombre à deux chiffres et détermine si l'utilisateur gagne selon les règles suivantes :\n", + "* Si l'entrée de l'utilisateur correspond à la loterie (le nombre généré aléatoirement) dans l'ordre exact, la récompense est de 10 000€.\n", + "* Sinon, si les deux chiffres entrés par l'utilisateur correspondent aux deux chiffres du numéro de loterie, la récompense est de 3 000€.\n", + "* Sinon, si un chiffre dans l'entrée de l'utilisateur correspond à un chiffre dans le numéro de loterie, la récompense est de 1 000€.\n", + "\n", + "**Astuce :** Utiliser la fonction **random.randint(0, 99)** pour génèrer de manière aléatoire un nombre à deux chiffres. Cette fonction doit être accompagné par **import random** comme première instruction dans le code." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "la loterie était le nombre 48!\n", + "votre réponse était le nombre 28!\n", + "Vous n'avez qu'un seul chiffre correct! Vous gangez 1000€!\n" + ] + } + ], + "source": [ + "import random\n", + "loterie=random.randint(10,99)\n", + "guess=input(\"saisir un nombre pour tenter de ganger de l'argent!\")\n", + "if int(guess)==loterie:\n", + " print(\"la loterie était le nombre \"+str(loterie)+\"!\")\n", + " print('votre réponse était le nombre '+str(guess)+\"!\")\n", + " print('bravo vous avez gangé 10 000€ !!!')\n", + "elif (guess[0] in str(loterie)) and (guess[1] in str(loterie)):\n", + " print(\"la loterie était le nombre \"+str(loterie)+\"!\")\n", + " print('votre réponse était le nombre '+str(guess)+\"!\")\n", + " print(\"Vous répondu avec un nombre dont les chiffres sont exactes mais ne sont pas dans l'ordre de la loterie, Vous gagnez 3 000€ !!\")\n", + "elif (guess[0] in str(loterie)) or (guess[1] in str(loterie)):\n", + " print(\"la loterie était le nombre \"+str(loterie)+\"!\")\n", + " print('votre réponse était le nombre '+str(guess)+\"!\")\n", + " print(\"Vous n'avez qu'un seul chiffre correct! Vous gangez 1000€!\")\n", + "else:\n", + " print(\"la loterie était le nombre \"+str(loterie)+\"!\")\n", + " print('votre réponse était le nombre '+str(guess)+\"!\")\n", + " print(\"predu! reesayez!\")\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercice 11:**\n", + " \n", + "Ecrire un programme qui permet de calculer la somme des chiffres d'un entier *n* donné. Le nombre *n* doit être compris entre 10 et 20 (bornes incluses)." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "n=input(\"donnez nombre\")\n", + "somme=0\n", + "for i in range (len(n)):\n", + " somme+=int(n[i])\n", + "print(somme)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercice 12:**\n", + "\n", + "1. Ecrire un programme qui permet de générer aléatoirement deux nombres entre 0 et 9, de calculer leurs différences (en valeur absolue), puis d'inviter l'utilisateur à répondre à la question suivante *que vaut abs(number1 - number2)?*. Le programme doit permettre à l'utilisateur de répondre plusieurs fois jusqu'à la saisie de la bonne réponse.\n", + "2. Modifier le programme précédent de telle sorte qu'il génère cinq occurences à la suite invitant à répondre à la question précédente. A la fin, le programme affiche le nombre moyen de tentatives qu'il a fallu à l'utilisateur pour répondre à une question." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "C'est ça! le resultat est 4!\n" + ] + } + ], + "source": [ + "n1=random.randint(0,9)\n", + "n2=random.randint(0,9)\n", + "result=n1-n2\n", + "reponse=0\n", + "if result<0:\n", + " result*=-1\n", + "while int(reponse)!=result:\n", + " reponse=input('que vaut abs(number1-number2)?')\n", + "print(\"C'est ça! le resultat est \"+str(result)+\"!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "C'est ça! le resultat est 5!\n", + "Vous avez fait 2 tentatives avant de réussir!\n" + ] + } + ], + "source": [ + "n1=random.randint(0,9)\n", + "n2=random.randint(0,9)\n", + "result=n1-n2\n", + "reponse=0\n", + "lose=0\n", + "if result<0:\n", + " result*=-1\n", + "for i in range(5):\n", + "\n", + " reponse=input('que vaut abs(number1-number2)?')\n", + " if int(reponse)!=result:\n", + " lose+=1\n", + " else:\n", + " print(\"C'est ça! le resultat est \"+str(result)+\"!\")\n", + " print(\"Vous avez fait \"+str(lose)+\" tentatives avant de réussir!\")\n", + " break \n", + "if int(reponse)!=result:\n", + " print(\"temps mort! vous avez fait \"+ str(lose)+\"/5 !\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercice 13:**\n", + "\n", + "Ecrire un programme qui permet de calculer le nombre de mots dans une phrase saisie par l'utilisateur." + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bonjour je m'appelle Sabri\n", + "il y a 5 mots.\n" + ] + } + ], + "source": [ + "phrase=input(\"donnez votre phrase\")\n", + "nbr_mots=1\n", + "print(phrase)\n", + "for i in range (len(phrase)):\n", + " if phrase[i]==\" \" or phrase[i]==\"'\":\n", + " nbr_mots+=1\n", + "print(\"il y a \"+str(nbr_mots)+\" mots.\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "---\n", + "\n", + "## 4. Pour s'entraîner\n", + "\n", + "**Exercice 14:**\n", + " \n", + "Soit la variable my_input = \"zoophysiology\". Ecrire un script qui permet d'afficher l'un des messages suivants en fonction du nombre maximum de *o* consécutifs dans la variable *my_input*. Par exemple, le script doit afficher \"I like studying birds! I want to become an ornithologist!\" parce qu'il y a deux *o* consécutifs, même s'il y a aussi des *o* individual.\n", + "Ignorer les *o* majuscules - recherchez que les *o* minuscules.\n", + "\n", + "* Si \"o\" apparaît trois fois ou plus de suite, afficher le message \"I like going to the zoo!\" \n", + "* Si \"o\" apparaît deux fois, afficher le message \"I like studying birds! I want to become an ornithologist!\" \n", + "* Si \"o\" apparaît une seule fois, afficher le message \"I like studying fish! I want to become an ichthyologist!\" \n", + "* Si \"o\" n'apparaît pas dans la variable *my_input*, afficher le message \"I miss going to the zoo!\" \n", + "\n", + "**Astuce :** Utiliser l'opérateur **in** qui renvoie **True** si la première chaîne se trouve dans la deuxième chaîne. " + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "i like studying birds! I want to become an ornithologist!\n" + ] + } + ], + "source": [ + "my_input=\"zoophysiology\"\n", + "nombre_o=1\n", + "if \"o\" in my_input :\n", + " for i in range (len(my_input)):\n", + " if my_input[i]==\"o\" and my_input[i+1]==\"o\":\n", + " nombre_o+=1\n", + "else:\n", + " nombre_o=0\n", + " print('i miss going to the zoo!')\n", + "\n", + "if nombre_o>=3:\n", + " print(\"i like going to the zoo!\")\n", + "elif nombre_o==2:\n", + " print(\"i like studying birds! I want to become an ornithologist!\")\n", + "elif nombre_o==1:\n", + " print('i like studying fish! i want to be come an ichtyologist!') " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "**Exercice 15:**\n", + " \n", + "Créer quatre variables nommées *team_1* et *team_2*, représentant deux noms d'équipes, et *team_1_score* et *team_2_score*, représentant les scores de ces deux équipes. \n", + "Une équipe gagne si son score est supérieur à l'autre score de l'autre équipe.\n", + " \n", + "Ecrire un premier script qui permet d'afficher les messages suivants selon les valeurs entrées, ceci en utilisant seulement les quatres variables créées :\n", + "* Si une équipe bat l'autre, affichez: \"\\[winner\\] beat \\[loser\\] by \\[margin\\]\"\n", + "* Si aucune des équipes n'a gagné, affichez: \"\\[team_1\\] played \\[team_2\\] and it was a tie\"\n", + "\n", + "Ecrire un deuxième script qui permet d'afficher les mêmes messages mais en ajoutant trois variables de plus :\n", + "* La variable *winner* pour définir l'équipe gagnante \n", + "* La variable *loser* pour définier l'équipe perdante \n", + "* La variable *margin* pour définir la différence entre les deux scores \n" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "paris beat marseille by 2\n" + ] + } + ], + "source": [ + "team_1=\"paris\"\n", + "team_2=\"marseille\"\n", + "team_1_score=2\n", + "team_2_score=0\n", + "margin=team_2_score-team_1_score\n", + "if margin<0:\n", + " margin=-margin\n", + "if team_1_score>team_2_score:\n", + " print(str(team_1)+\" beat \"+str(team_2)+\" by \"+str(margin))\n", + "elif team_1_scoreteam_2_score:\n", + " winner=team_1\n", + " loser=team_2\n", + " print(str(winner)+\" won by \"+str(margin))\n", + "elif team_1_score Date: Mon, 25 Sep 2023 19:54:11 +0200 Subject: [PATCH 02/41] test 2 --- .../02_structures_controle_modif.ipynb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 6b6399032..75bdedfa6 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -928,14 +928,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "slideshow": { "slide_type": "notes" } }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "i love you\n" + ] + } + ], + "source": [ + "print(\"i love you\")" + ] }, { "cell_type": "markdown", @@ -1025,7 +1035,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.11.4" } }, "nbformat": 4, From 1fe786914205be14f0775ff600ee4b725d2140f6 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Mon, 25 Sep 2023 20:03:46 +0200 Subject: [PATCH 03/41] change 25/09 20:03 --- .../02_structures_controle_modif.ipynb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 75bdedfa6..2fbd9a5e0 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -928,7 +928,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "slideshow": { "slide_type": "notes" @@ -939,12 +939,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "i love you\n" + "underweight\n" ] } ], "source": [ - "print(\"i love you\")" + "taille=input(\"donnez taille\")\n", + "poids=input(\"donnez poids\")\n", + "IMC=int(poids)/int(taille)**2\n", + "if IMC<18.5:\n", + " print(\"underweight\")\n", + "elif IMC>18.5 and IMC<24.9:\n", + " print(\"normal\")\n", + "elif IMC>25.0 and IMC<29.9:\n", + " print(\"overweight\")\n", + "elif IMC>30.0:\n", + " print(\"obeseeee\")" ] }, { From cd8b349d195b7532933f5cafeef3737403488551 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Mon, 25 Sep 2023 20:13:37 +0200 Subject: [PATCH 04/41] idk man --- exercises/TD03_fonctions/nahnigga.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 exercises/TD03_fonctions/nahnigga.txt diff --git a/exercises/TD03_fonctions/nahnigga.txt b/exercises/TD03_fonctions/nahnigga.txt new file mode 100644 index 000000000..395b66497 --- /dev/null +++ b/exercises/TD03_fonctions/nahnigga.txt @@ -0,0 +1 @@ +yo wassap cuzz \ No newline at end of file From 6255798058ff111095a92e00995218b3eab562e7 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 25 Sep 2023 21:13:17 +0200 Subject: [PATCH 05/41] the sup cuz --- .../02_structures_controle_modif.ipynb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 2fbd9a5e0..78f1ecbc5 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -976,12 +976,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "tags": [] }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "wassap cuzz\n" + ] + } + ], + "source": [ + "print(\"wassap cuzz\")" + ] }, { "cell_type": "markdown", From e8cadfaeed4e0447a2d36bc984480eedcc6e8ebc Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Tue, 26 Sep 2023 10:18:50 +0200 Subject: [PATCH 06/41] modif exemple --- .../02_structures_controle_modif.ipynb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 78f1ecbc5..22d0661bb 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -1012,12 +1012,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "tags": [] }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ilove you\n" + ] + } + ], + "source": [ + "print(\"ilove you\")" + ] }, { "cell_type": "markdown", From aa0efc03ec246ba8eab0828fc3353fcbf6178575 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Tue, 26 Sep 2023 11:10:02 +0200 Subject: [PATCH 07/41] 11:09 --- .../02_structures_controle_modif.ipynb | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 22d0661bb..5dfe7980a 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -985,12 +985,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "wassap cuzz\n" + "\n", + "*\n", + "**\n", + "***\n", + "****\n", + "*****\n" ] } ], "source": [ - "print(\"wassap cuzz\")" + "n=input(\"donnez nombre\")\n", + "for i in range (int(n)):\n", + " print(\"*\"*i)\n" ] }, { @@ -1026,7 +1033,9 @@ } ], "source": [ - "print(\"ilove you\")" + "n=int(input(\"donnez nombre\"))\n", + "for i in range (n):\n", + " print(\" \")" ] }, { From 7f0d56781c837bb6e20f1a15ea1d3ea1d514e7dd Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 2 Oct 2023 09:53:51 +0200 Subject: [PATCH 08/41] repost --- .../02_structures_controle_modif.ipynb | 195 ++++++++++++++++-- 1 file changed, 173 insertions(+), 22 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 5dfe7980a..e9d1932d2 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -248,6 +248,108 @@ " print(\"année non-bissextile\")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "write a program that shows \"hello\" if the number given n user is a multiple of 5 else, it shows \"byebye\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "n=input(\"give number\")\n", + "if int(n)%5==0:\n", + " print(\"hello\")\n", + "else:\n", + " print(\"bye bye\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ecrire un programme qui accepte 2 nombres et un operateur mathématiques et execute l'operation correspondante donné par utilisateur\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + } + ], + "source": [ + "number1=int(input(\"give number1\"))\n", + "number2=int(input(\"give number 2\"))\n", + "oper=input(\"give operator\")\n", + "if oper==\"-\":\n", + " print(number1-number2)\n", + "elif oper==\"+\":\n", + " print(number1+number2)\n", + "elif oper==\"*\":\n", + " print(number1*number2)\n", + "elif oper==\"/\":\n", + " print(number1/number2)\n", + "elif oper==\"//\":\n", + " print(number1//number2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ecrire un programme qui accepte l'âge , le genre(M/F), nombre de jours et affiche le salaire.\n", + "Si l'âge ne figure pas dans l'intervalle alors le programme affiche le mess suivant:\"entrez un âge approprié\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "M\n", + "280000\n" + ] + } + ], + "source": [ + "age=int(input(\"donnez age\"))\n", + "genre=input(\"donnez genre(M/F)\")\n", + "genre=genre.upper()\n", + "print(genre)\n", + "nbrjours=int(input(\"donnez nombre de jours\"))\n", + "salaire=0\n", + "if age>=18 and age<30:\n", + " if genre==\"M\":\n", + " salaire=700\n", + " else:\n", + " salaire=750\n", + "elif age>=30 and age<=40:\n", + " if genre==\"M\":\n", + " salaire=800\n", + " else:\n", + " salaire=850\n", + "else:\n", + " age=input(\"donnez age approprié\")\n", + "print(salaire*nbrjours)\n", + "\n", + "\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -928,7 +1030,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "slideshow": { "slide_type": "notes" @@ -939,22 +1041,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "underweight\n" + "Overweight\n" ] } ], "source": [ - "taille=input(\"donnez taille\")\n", - "poids=input(\"donnez poids\")\n", - "IMC=int(poids)/int(taille)**2\n", + "poids=input(\"donnez votre poids\")\n", + "taille=input(\"donnez votre taille\")\n", + "IMC=float(poids)/(float(taille))**2\n", "if IMC<18.5:\n", - " print(\"underweight\")\n", - "elif IMC>18.5 and IMC<24.9:\n", - " print(\"normal\")\n", - "elif IMC>25.0 and IMC<29.9:\n", - " print(\"overweight\")\n", - "elif IMC>30.0:\n", - " print(\"obeseeee\")" + " print(\"Underweight\")\n", + "elif 18.51\u001b[0m etoile\u001b[39m=\u001b[39m\u001b[39minput\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mdonnez nombre\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 2\u001b[0m \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m (\u001b[39mint\u001b[39m(etoile),\u001b[39m0\u001b[39m,\u001b[39m-\u001b[39m\u001b[39m1\u001b[39m):\n\u001b[1;32m----> 3\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39m \u001b[39m\u001b[39m\"\u001b[39m\u001b[39m*\u001b[39mi\u001b[39m+\u001b[39m\u001b[39m\"\u001b[39;49m\u001b[39m*\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39m*\u001b[39;49m[(i) \u001b[39mfor\u001b[39;49;00m i \u001b[39min\u001b[39;49;00m \u001b[39mrange\u001b[39;49m(\u001b[39mint\u001b[39;49m(etoile))])\n", + "\u001b[1;31mTypeError\u001b[0m: can't multiply sequence by non-int of type 'list'" + ] + } + ], + "source": [ + "etoile=input(\"donnez nombre\")\n", + "for i in range (int(etoile),0,-1):\n", + " print(\" \"*i+\"*\"*[(i) for i in range(int(etoile))])" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "ilove you\n" + "0\n", + "1\n", + "2\n", + "3\n", + "4\n", + "[None, None, None, None, None]\n" ] } ], "source": [ - "n=int(input(\"donnez nombre\"))\n", - "for i in range (n):\n", - " print(\" \")" + "print([print(i) for i in range (5)])" ] }, { @@ -1049,10 +1177,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": { "tags": [] }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "200000\n" + ] + } + ], + "source": [ + "n=input(\"donnez nombre n\")\n", + "resultat=0\n", + "indice=0\n", + "while resultat<1000000:\n", + " indice+=1\n", + " resultat=int(n)*indice\n", + "print(indice)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [] } From 79af36a3f6f8e0f2931784791c984fadfdb0afc2 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 2 Oct 2023 11:35:12 +0200 Subject: [PATCH 09/41] correction --- .../02_structures_controle_modif.ipynb | 104 +++++++++++++----- 1 file changed, 78 insertions(+), 26 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index e9d1932d2..00e29cd56 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -366,14 +366,13 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0\n", "1\n", "2\n", "3\n", @@ -388,48 +387,46 @@ } ], "source": [ - "for i in range (11):\n", + "for i in range (1,11):\n", " print(i)" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0\n", - "2\n", - "4\n", - "6\n", - "8\n", - "10\n", - "12\n", - "14\n", - "16\n", - "18\n", - "20\n" + "1\n", + "3\n", + "5\n", + "7\n", + "9\n", + "11\n", + "13\n", + "15\n", + "17\n", + "19\n" ] } ], "source": [ - "for i in range (0,21,2):\n", + "for i in range (1,21,2):\n", " print(i)" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0\n", "2\n", "4\n", "6\n", @@ -444,26 +441,33 @@ } ], "source": [ - "for i in range (0,21,2):\n", + "for i in range (1,21):\n", " if i%2==0:\n", " print(i)" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n" + "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n" ] } ], "source": [ - "print([i for i in range (11)])" + "print([i for i in range (1,11)])" ] }, { @@ -503,6 +507,53 @@ "print(moyenne)" ] }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6.666666666666667\n" + ] + } + ], + "source": [ + "n=int(input(\"donnez nombre\"))\n", + "x=0\n", + "for i in range (1,n):\n", + " x+=int(input(\"nombre?\"))\n", + "x/=n\n", + "print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7.4\n" + ] + } + ], + "source": [ + "x=0\n", + "i=0\n", + "n=0\n", + "while n!=-1:\n", + " n=int(input(\"donnez nombre\"))\n", + " x+=n\n", + " i+=1\n", + "moyenne=x/i\n", + "print(moyenne)" + ] + }, { "cell_type": "code", "execution_count": 35, @@ -566,7 +617,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -581,9 +632,10 @@ "n=input(\"nombre?\")\n", "n=int(n)\n", "factoriel=1\n", - "while i!=1:\n", - " for i in range (n,0,-1):\n", - " factoriel=factoriel*i\n", + "i=1\n", + "while factoriel<=n:\n", + " factoriel*=i\n", + " i+=1\n", "print(factoriel)" ] }, From 5c930968d6dad030a171fa023d787ad7d8e78134 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 2 Oct 2023 12:25:18 +0200 Subject: [PATCH 10/41] co --- .../02_structures_controle_modif.ipynb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 00e29cd56..a83c7b904 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -1139,7 +1139,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", "*\n", "**\n", "***\n", @@ -1150,7 +1149,7 @@ ], "source": [ "etoile=input(\"donnez nombre\")\n", - "for i in range (int(etoile)):\n", + "for i in range (1,(int(etoile)+1)):\n", " print(\"*\"*i)" ] }, From 36a8588694fb700e672995bce78977a91b272809 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 2 Oct 2023 12:35:43 +0200 Subject: [PATCH 11/41] co 12.35 --- .../02_structures_controle_modif.ipynb | 40 +++++-------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index a83c7b904..e9cca5948 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -1172,49 +1172,27 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 4, "metadata": { "tags": [] }, - "outputs": [ - { - "ename": "TypeError", - "evalue": "can't multiply sequence by non-int of type 'list'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32mc:\\Users\\Administrator\\OneDrive\\Desktop\\02_structures_controle_modif.ipynb Cell 44\u001b[0m line \u001b[0;36m3\n\u001b[0;32m 1\u001b[0m etoile\u001b[39m=\u001b[39m\u001b[39minput\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mdonnez nombre\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 2\u001b[0m \u001b[39mfor\u001b[39;00m i \u001b[39min\u001b[39;00m \u001b[39mrange\u001b[39m (\u001b[39mint\u001b[39m(etoile),\u001b[39m0\u001b[39m,\u001b[39m-\u001b[39m\u001b[39m1\u001b[39m):\n\u001b[1;32m----> 3\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39m \u001b[39m\u001b[39m\"\u001b[39m\u001b[39m*\u001b[39mi\u001b[39m+\u001b[39m\u001b[39m\"\u001b[39;49m\u001b[39m*\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39m*\u001b[39;49m[(i) \u001b[39mfor\u001b[39;49;00m i \u001b[39min\u001b[39;49;00m \u001b[39mrange\u001b[39;49m(\u001b[39mint\u001b[39;49m(etoile))])\n", - "\u001b[1;31mTypeError\u001b[0m: can't multiply sequence by non-int of type 'list'" - ] - } - ], - "source": [ - "etoile=input(\"donnez nombre\")\n", - "for i in range (int(etoile),0,-1):\n", - " print(\" \"*i+\"*\"*[(i) for i in range(int(etoile))])" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0\n", - "1\n", - "2\n", - "3\n", - "4\n", - "[None, None, None, None, None]\n" + " *\n", + " **\n", + " ***\n", + " ****\n", + "*****\n" ] } ], "source": [ - "print([print(i) for i in range (5)])" + "etoile=input(\"donnez nombre\")\n", + "for i in range (1,(int(etoile)+1)):\n", + " print(\" \"*(int(etoile)-i)+\"*\"*i)" ] }, { From 0d711151e84731020ccdbe8801abfb32dbfa735e Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 9 Oct 2023 10:49:56 +0200 Subject: [PATCH 12/41] =?UTF-8?q?evalutation=20non=20not=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../02_structures_controle_modif.ipynb | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index e9cca5948..3b9bedd75 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -1229,12 +1229,77 @@ "print(indice)" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mauvaise reponse\n", + "mauvaise reponse\n", + "mauvaise reponse\n", + "mauvaise reponse\n", + "mauvaise reponse\n", + "vous avez fait 0 /5 réponses correctes\n", + "4.04secondes\n" + ] + } + ], + "source": [ + "import random\n", + "import time \n", + "points=0\n", + "nombre1=0\n", + "nombre2=0\n", + "temps1=time.time()\n", + "for i in range (5):\n", + " nombre1=random.randint(0,9)\n", + " nombre2=random.randint(0,9)\n", + " if nombre1>=nombre2:\n", + " reponse=int(input(\"quel est\"+str(nombre1)+\"-\"+str(nombre2)+\"?\"))\n", + " else:\n", + " reponse=int(input(\"quel est\"+str(nombre2)+\"-\"+str(nombre1)+\"?\"))\n", + " if reponse==nombre1-nombre2 or reponse==nombre2-nombre1:\n", + " print(\"bonne reponse\")\n", + " points+=1\n", + " else:\n", + " print(\"mauvaise reponse\")\n", + "temps2=time.time()\n", + "print(\"vous avez fait \",points,\"/5 réponses correctes\")\n", + "print(str(temps2-temps1)[0:4]+\"secondes\")" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import random\n", + "import time\n", + "count=0\n", + "nbq=5\n", + "correct=0\n", + "t1=time.time()\n", + "while count Date: Mon, 16 Oct 2023 10:27:19 +0200 Subject: [PATCH 13/41] 16/10 --- .../02_structures_controle_modif.ipynb | 198 +++++++++++++++++- 1 file changed, 192 insertions(+), 6 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index 3b9bedd75..d44287ada 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -1274,9 +1274,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Faux\n", + "Faux\n", + "0\n", + "9\n" + ] + } + ], "source": [ "import random\n", "import time\n", @@ -1284,21 +1295,196 @@ "nbq=5\n", "correct=0\n", "t1=time.time()\n", - "while count-2:\n", + " ordi=random.randint(0,2)\n", + " user=int(input(\"choisissez 0,1 ou 2\"))\n", + " if user==0:\n", + " if ordi==0:\n", + " print(\"match nul\")\n", + " elif ordi==1:\n", + " won-=1\n", + " print(\"perdu\")\n", + " elif ordi==2:\n", + " won+=1\n", + " print(\"gagné\")\n", + " elif user==1:\n", + " if ordi==0:\n", + " won+=1\n", + " print(\"gagné\")\n", + " elif ordi==1:\n", + " print(\"match nul\")\n", + " elif ordi==2:\n", + " won-=1\n", + " print(\"perdu\")\n", + " elif user==2:\n", + " if ordi==0:\n", + " won-=1\n", + " print(\"perdu\")\n", + " elif ordi==1:\n", + " won+=1\n", + " print(\"gagné\")\n", + " elif ordi==2:\n", + " print(\"match nul\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import string\n", + "import re \n", + "alph=0\n", + "ALPH=0\n", + "tags=0\n", + "password=input(\"entrez un mot de passe\")\n", + "if len(password)>=6 and len(password)=<16:\n", + " for i in range(len(password)):\n", + " if i in string.ascii_lowercase:\n", + " alph+=1\n", + " elif i in string.ascii_uppercase:\n", + " ALPH+=1\n", + " elif re.search(i,\"&#@\"):\n", + " tags+=1\n", + " if alph>1 and APLH>1 and tags>1:\n", + " print(\"password valide\")\n", + "else:\n", + " print(\"password non valide\")\n", + "\n", + " " ] } ], From f56daf76b1acbe37cf9a0896669a95ed93567573 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 16 Oct 2023 11:09:48 +0200 Subject: [PATCH 14/41] corr --- .../02_structures_controle_modif.ipynb | 79 +++++++++++++++++-- 1 file changed, 72 insertions(+), 7 deletions(-) diff --git a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb index d44287ada..eac0c21ea 100644 --- a/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb +++ b/exercises/TD02_structures_controle/02_structures_controle_modif.ipynb @@ -1461,31 +1461,96 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "password non valide\n" + ] + } + ], "source": [ "import string\n", "import re \n", "alph=0\n", "ALPH=0\n", "tags=0\n", + "num=0\n", "password=input(\"entrez un mot de passe\")\n", - "if len(password)>=6 and len(password)=<16:\n", + "if len(password)>=6 and len(password)<=16:\n", " for i in range(len(password)):\n", - " if i in string.ascii_lowercase:\n", + " if re.search(str(password[i]),(string.ascii_lowercase))!=None:\n", " alph+=1\n", - " elif i in string.ascii_uppercase:\n", + " elif re.search(str(password[i]),(string.ascii_uppercase))!=None:\n", " ALPH+=1\n", - " elif re.search(i,\"&#@\"):\n", + " elif i== re.search(str(password[i]),\"0123456789\")!=None:\n", + " num+=1\n", + " elif re.search(str(password[i]),\"&#@\")!=None:\n", " tags+=1\n", - " if alph>1 and APLH>1 and tags>1:\n", + " if alph>=1 and ALPH>=1 and tags>=1:\n", " print(\"password valide\")\n", + " else:\n", + " print(\"password non valide\")\n", "else:\n", " print(\"password non valide\")\n", "\n", " " ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "host=\"hello\"\n", + "print(re.search(\"h\",host))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "password valide\n" + ] + } + ], + "source": [ + "import re\n", + "def valide(passw):\n", + " if (6<=len(passw)<=16) and re.search(\"[a-z]\",passw) and re.search(\"[A-Z]\",passw) and re.search(\"[0-9]\",passw) and re.search(\"[#@$]\",passw):\n", + " return True\n", + " else:\n", + " return False\n", + "x=input(\"donner password\")\n", + "if valide(x):\n", + " print(\"password valide\")\n", + "else:\n", + " print(\"password invalide\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From b5347285e3a41adfbfd610b125fea1a12ec4c2ec Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 6 Nov 2023 10:05:35 +0100 Subject: [PATCH 15/41] Python file add --- exercises/TD03_fonctions/TD3.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 exercises/TD03_fonctions/TD3.py diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py new file mode 100644 index 000000000..0a883917c --- /dev/null +++ b/exercises/TD03_fonctions/TD3.py @@ -0,0 +1,18 @@ +#temps[0] : jours, temps[1]: heures, temps[2]: minutes, temps[3]: secondes + +def tempsEnSeconde(temps): + """ Renvoie la valeur en seconde de temps donné comme jour, heure, minute, seconde.""" + return temps[0]*86400 + temps[1]*3600 + temps[2]*60 + temps[3]*1 + pass + +temps = (3,23,1,34) +print(type(temps)) +print(tempsEnSeconde(temps)) + +def secondeEnTemps(seconde): + """Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument""" + return (seconde//86400, seconde//3600, seconde//60, seconde//1) + pass + +temps = secondeEnTemps(100000) +print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes") \ No newline at end of file From a3ac7de16c01f597e40909dc981835508cf07662 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 6 Nov 2023 10:17:50 +0100 Subject: [PATCH 16/41] correction 061123 --- exercises/TD03_fonctions/TD3.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py index 0a883917c..6e2297a8d 100644 --- a/exercises/TD03_fonctions/TD3.py +++ b/exercises/TD03_fonctions/TD3.py @@ -9,10 +9,20 @@ def tempsEnSeconde(temps): print(type(temps)) print(tempsEnSeconde(temps)) +#def secondeEnTemps(seconde): +# """Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument""" +# return (seconde//86400, seconde//3600, seconde//60, seconde//1) +# pass + def secondeEnTemps(seconde): """Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument""" - return (seconde//86400, seconde//3600, seconde//60, seconde//1) - pass - + jour=seconde//(24*60*60) + reste=seconde%(24*60*60) + heure=reste//(60*60) + reste1=reste%(60*60) + minute=reste1//60 + seconde=reste1%60 + return(jour,heure,minute,seconde) + temps = secondeEnTemps(100000) print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes") \ No newline at end of file From 6e98ae07a430093de2bd30b0a467042416981e48 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 6 Nov 2023 10:38:00 +0100 Subject: [PATCH 17/41] jsp --- exercises/TD03_fonctions/TD3.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py index 6e2297a8d..b842ef769 100644 --- a/exercises/TD03_fonctions/TD3.py +++ b/exercises/TD03_fonctions/TD3.py @@ -3,7 +3,7 @@ def tempsEnSeconde(temps): """ Renvoie la valeur en seconde de temps donné comme jour, heure, minute, seconde.""" return temps[0]*86400 + temps[1]*3600 + temps[2]*60 + temps[3]*1 - pass + temps = (3,23,1,34) print(type(temps)) @@ -25,4 +25,21 @@ def secondeEnTemps(seconde): return(jour,heure,minute,seconde) temps = secondeEnTemps(100000) -print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes") \ No newline at end of file +print(temps[0],"jours",temps[1],"heures",temps[2],"minutes",temps[3],"secondes") + + + +def pluriel(nombre,mot): + if int(nombre)>1: + return str(nombre) + (mot+"s",end="") + elif int(nombre)=1: + return str(nombre) + (mot,end="") + elif int(nombre)=0: + return None + + +def afficheTemps(temps): + return ((pluriel(temps[0],jour)),(pluriel(temps[1],heure)),(pluriel(temps[2],minute)),(pluriel(temps[3],seconde))) + + +print(afficheTemps((1,0,14,23))) \ No newline at end of file From 9491c8976554df4043b2a0599da0dfae058d1a13 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 6 Nov 2023 11:10:15 +0100 Subject: [PATCH 18/41] yes --- exercises/TD03_fonctions/TD3.py | 44 +++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py index b842ef769..0514da2ec 100644 --- a/exercises/TD03_fonctions/TD3.py +++ b/exercises/TD03_fonctions/TD3.py @@ -29,17 +29,41 @@ def secondeEnTemps(seconde): -def pluriel(nombre,mot): - if int(nombre)>1: - return str(nombre) + (mot+"s",end="") - elif int(nombre)=1: - return str(nombre) + (mot,end="") - elif int(nombre)=0: - return None +def pluriel(mot,nombre): + if nombre>0: + print(" ",nombre,mot,end="") + if nombre>1: + print("s",end="") def afficheTemps(temps): - return ((pluriel(temps[0],jour)),(pluriel(temps[1],heure)),(pluriel(temps[2],minute)),(pluriel(temps[3],seconde))) + pluriel("jour",temps[0]) + pluriel("heure",temps[1]) + pluriel("minute",temps[2]) + pluriel("seconde",temps[3]) + print() - -print(afficheTemps((1,0,14,23))) \ No newline at end of file +#afficheTemps((1,0,14,23)) + +def demandeTemps(): + jour1=int(input("donnez nombr de jours")) + heure1=int(input("donnez nombre d'heures")) + minute1=int(input("donnez nombre de minutes")) + seconde1=int(input("donnez nombre de secondes")) + if heure1>=24: + while heure1>=24: + heure1=int(input("ce n'est pas correcte, donne le nombre d'heures")) + if minute1>=60: + while minute1>=60: + minute1=int(input("ce n'est pas correcte, donne nombre de minutes")) + if seconde1>=60: + while seconde1>=60: + seconde1=int(input("ce n'est pas correcte, donnez le nombre de secondes")) + return((jour1,heure1,minute1,seconde1)) + +afficheTemps(demandeTemps()) + +def sommeTemps(temps1,temps2): + return (tempsEnSeconde(temps1)+tempsEnSeconde(temps2)) + +sommeTemps((2,3,4,25),(5,22,57,1)) \ No newline at end of file From 5f8ddb2625406c4ec1c303fd58b215f03275b8f6 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 6 Nov 2023 12:20:39 +0100 Subject: [PATCH 19/41] yes --- exercises/TD03_fonctions/TD3.py | 34 +++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py index 0514da2ec..f7bc1ce3f 100644 --- a/exercises/TD03_fonctions/TD3.py +++ b/exercises/TD03_fonctions/TD3.py @@ -1,7 +1,6 @@ #temps[0] : jours, temps[1]: heures, temps[2]: minutes, temps[3]: secondes def tempsEnSeconde(temps): - """ Renvoie la valeur en seconde de temps donné comme jour, heure, minute, seconde.""" return temps[0]*86400 + temps[1]*3600 + temps[2]*60 + temps[3]*1 @@ -15,7 +14,7 @@ def tempsEnSeconde(temps): # pass def secondeEnTemps(seconde): - """Renvoie le temps (jour, heure, minute, seconde) qui correspond au nombre de seconde passé en argument""" + jour=seconde//(24*60*60) reste=seconde%(24*60*60) heure=reste//(60*60) @@ -43,7 +42,7 @@ def afficheTemps(temps): pluriel("seconde",temps[3]) print() -#afficheTemps((1,0,14,23)) + def demandeTemps(): jour1=int(input("donnez nombr de jours")) @@ -61,9 +60,32 @@ def demandeTemps(): seconde1=int(input("ce n'est pas correcte, donnez le nombre de secondes")) return((jour1,heure1,minute1,seconde1)) -afficheTemps(demandeTemps()) +#afficheTemps(demandeTemps()) def sommeTemps(temps1,temps2): - return (tempsEnSeconde(temps1)+tempsEnSeconde(temps2)) + return (secondeEnTemps(tempsEnSeconde(temps1)+tempsEnSeconde(temps2))) + + + +sommeTemps((2,3,4,25),(5,22,57,1)) + + +def proportionTemps(temps,proportion): + return secondeEnTemps(int(tempsEnSeconde(temps)*proportion)) + + +afficheTemps((proportionTemps((2,0,36,0),0.2))) + +def tempsEnDate(temps): + annee=1970+(temps[0]//365) + jour=temps[0]%365+1 -sommeTemps((2,3,4,25),(5,22,57,1)) \ No newline at end of file +import time +def afficheDate(date): + if len(date)==0: + date= tempsEnDate(secondeEnTemps(int(time.time))) + print("jour",date[1],"de l'année",date[0],"à",str(date[2])+":"+str(date[3])+":"+str(date[4])) +temps = secondeEnTemps(1000000000) +afficheTemps(temps) +afficheDate(tempsEnDate(temps)) +afficheDate() \ No newline at end of file From c6e9ea9dfaec05d67c646a6fdd2051647f705d88 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 13 Nov 2023 09:56:29 +0100 Subject: [PATCH 20/41] mais que c'est lennnt!!! --- exercises/TD03_fonctions/TD3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py index f7bc1ce3f..59be761c1 100644 --- a/exercises/TD03_fonctions/TD3.py +++ b/exercises/TD03_fonctions/TD3.py @@ -88,4 +88,4 @@ def afficheDate(date): temps = secondeEnTemps(1000000000) afficheTemps(temps) afficheDate(tempsEnDate(temps)) -afficheDate() \ No newline at end of file +afficheDate() From ac695f4cc9ceff3515ad12550d297aa8005d5bf3 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 13 Nov 2023 09:58:39 +0100 Subject: [PATCH 21/41] ok --- exercises/TD03_fonctions/03_fonctions.ipynb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/exercises/TD03_fonctions/03_fonctions.ipynb b/exercises/TD03_fonctions/03_fonctions.ipynb index 5e08ec3cf..8f6c294bd 100644 --- a/exercises/TD03_fonctions/03_fonctions.ipynb +++ b/exercises/TD03_fonctions/03_fonctions.ipynb @@ -13,6 +13,13 @@ "Vous respecterez au mieux les règles d'écriture de code, en particulier chaque fonction devra avoir un **docstring** et des commentaires si nécessaire et les noms de variable seront illustratifs de leur usage. Vous utiliserez les outils de débogage (flake8, mypy, debugger, pythontutor ...) pour corriger vos bogues." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, From 8ce6c07d8463060cf6a2eb6a79b32beae6187043 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 13 Nov 2023 12:18:02 +0100 Subject: [PATCH 22/41] yes --- exercises/24 | 0 exercises/365 | 0 exercises/60 | 0 exercises/TD03_fonctions/TD3.py | 54 +++++- exercises/TD04_listes/04_listes.ipynb | 252 ++++++++++++++++++++++---- exercises/TD04_listes/syracuse.py | 0 6 files changed, 269 insertions(+), 37 deletions(-) create mode 100644 exercises/24 create mode 100644 exercises/365 create mode 100644 exercises/60 create mode 100644 exercises/TD04_listes/syracuse.py diff --git a/exercises/24 b/exercises/24 new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/365 b/exercises/365 new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/60 b/exercises/60 new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/TD03_fonctions/TD3.py b/exercises/TD03_fonctions/TD3.py index 59be761c1..c9c94f864 100644 --- a/exercises/TD03_fonctions/TD3.py +++ b/exercises/TD03_fonctions/TD3.py @@ -67,25 +67,71 @@ def sommeTemps(temps1,temps2): -sommeTemps((2,3,4,25),(5,22,57,1)) +#sommeTemps((2,3,4,25),(5,22,57,1)) def proportionTemps(temps,proportion): return secondeEnTemps(int(tempsEnSeconde(temps)*proportion)) -afficheTemps((proportionTemps((2,0,36,0),0.2))) +#afficheTemps((proportionTemps((2,0,36,0),0.2))) def tempsEnDate(temps): annee=1970+(temps[0]//365) jour=temps[0]%365+1 + heure=temps[1] + minute=temps[2] + seconde=temps[3] + return (annee,jour,heure,minute,seconde) + import time + def afficheDate(date): if len(date)==0: date= tempsEnDate(secondeEnTemps(int(time.time))) print("jour",date[1],"de l'année",date[0],"à",str(date[2])+":"+str(date[3])+":"+str(date[4])) +#temps = secondeEnTemps(1000000000) +#afficheTemps(temps) +#afficheDate(tempsEnDate(temps)) +#afficheDate() + + +def an_bissextile(annee): + return annee%4==0 and (annee%100!=0 or annee%400==0) + +def bisextile(jour): + annee=1970 + while jour>=365: + if an_bissextile(annee): + print("l'année"+str(annee)+"est bisextile") + jour-=366 + else: + jour-=365 + annee+=1 + +def nombrebisextile(jour): + count=0 + annee=1970 + while jour>=365: + if an_bissextile(annee): + print("l'année"+str(annee)+"est bisextile") + jour-=366 + count+=1 + else: + jour-=365 + annee+=1 + return count +#bisextile(20000) + +def tempsEnDateBisextile(temps): + jours,heures,minutes,secondes=temps + jours=jours-nombrebisextile(jours) + tempsbis=(jours,heures,minutes,secondes) + return tempsEnDate(tempsbis) + temps = secondeEnTemps(1000000000) afficheTemps(temps) -afficheDate(tempsEnDate(temps)) -afficheDate() +afficheDate(tempsEnDateBisextile(secondeEnTemps(int(time.time())))) + + diff --git a/exercises/TD04_listes/04_listes.ipynb b/exercises/TD04_listes/04_listes.ipynb index 5ef60e5fa..b18821680 100644 --- a/exercises/TD04_listes/04_listes.ipynb +++ b/exercises/TD04_listes/04_listes.ipynb @@ -25,7 +25,9 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "liste=[3,5,10]\n" + ] }, { "cell_type": "markdown", @@ -36,10 +38,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[3, 5, 10, 12, 17]\n" + ] + } + ], + "source": [ + "liste=[3,5,10]\n", + "liste.append(12)\n", + "liste.append(17)\n", + "print(liste)" + ] }, { "cell_type": "markdown", @@ -50,10 +65,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[3, 5, -7, 12, 17]\n" + ] + } + ], + "source": [ + "liste[2]=-7\n", + "print(liste)" + ] }, { "cell_type": "markdown", @@ -64,10 +90,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[6, 10, -14, 24, 34]\n" + ] + } + ], + "source": [ + "for i in range (len(liste)):\n", + " liste[i]*=2\n", + "print(liste)" + ] }, { "cell_type": "markdown", @@ -78,10 +116,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[6, 11, -12, 27, 38]\n" + ] + } + ], + "source": [ + "for i in range (len(liste)):\n", + " liste[i]+=i\n", + "print(liste)" + ] }, { "cell_type": "markdown", @@ -92,10 +142,37 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "68\n", + "26\n", + "77\n", + "13\n", + "557\n", + "13\n" + ] + } + ], + "source": [ + "import random\n", + "listebis=[]\n", + "nmax=0\n", + "somme=0\n", + "for i in range (10):\n", + " if nmax Date: Mon, 20 Nov 2023 12:39:30 +0100 Subject: [PATCH 23/41] Yesn't --- exercises/TD04_listes/04_listes.ipynb | 2 +- exercises/TD04_listes/syracuse.py | 102 ++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/exercises/TD04_listes/04_listes.ipynb b/exercises/TD04_listes/04_listes.ipynb index b18821680..e90862466 100644 --- a/exercises/TD04_listes/04_listes.ipynb +++ b/exercises/TD04_listes/04_listes.ipynb @@ -633,7 +633,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, diff --git a/exercises/TD04_listes/syracuse.py b/exercises/TD04_listes/syracuse.py index e69de29bb..6297677fa 100644 --- a/exercises/TD04_listes/syracuse.py +++ b/exercises/TD04_listes/syracuse.py @@ -0,0 +1,102 @@ + +def syracuse(n): + L=[n] + while n!=1: + if n%2==0: + n=n//2 + else: + n=n*3+1 + L.append(n) + return L +print(syracuse(3)) + + + +def testeConjecture(n_max): + if syracuse(n_max)[-1]==1: + return True + else: + return False +print(testeConjecture(10000)) + +import time +def tempsVol(n): + return len(syracuse(n))-1 +print("Le temps de vol de", 3, "est", tempsVol(3)) + +def tempsVolListe(n_max): + return [tempsVol(n)for n in range (1,n_max-1)] +print(tempsVolListe(100)) + +liste_t=tempsVolListe(10000) +liste_temps_max=max(liste_t) +print("l'entier",liste_t.index(liste_temps_max)+1,"a le plus grand temps de vol égal à ",liste_temps_max) + +def alt_max(n): + return mx(syracuse(n)) +def al_max_list(n_max): + return [alt_max(n)for n in range (n,n_max+1)] + +list_alt=al_max_list(10000) +altitude=max(list_alt) +print("l'entier", list_alt.index(altitude)+1,"le plus grand temps vol égal à ",altitude) + + +carre_mag=[[4,14,15,1],[9,7,6,12],[5,11,10,8],[16,2,3,13]] + +afficheCarre(carre_mag) +afficheCarre(carre_pas_mag) +carree_pasmag=[] +for ligne in range (carre_mag): + carree_pasmag.append(ligne.copy()) +carre_mag[3][2]=7 + +def afficheCarre(carre): + for ligne in carre: + print(ligne) + print() + +afficheCarre(carre_mag) +afficheCarre(carree_pasmag) + +def testLignesEgales(carre): + """ Renvoie la somme des éléments d'une ligne de la liste 2D carre si toutes les lignes ont la même somme, et -1 sinon """ + pass + +print(testLignesEgales(carre_mag)) +print(testLignesEgales(carre_pas_mag)) + +def test_ligneEgale(carre): + sommeligne=sum(carre[0]) + for ligne in carre: + if sommeligne!=sum(carre(ligne)): + return -1 + return (sommeligne) + +def testColonnesEgales(carre): + """ Renvoie la somme des éléments d'une colonne de la liste 2D carre si toutes les colonnes ont la même somme, et -1 sinon """ + pass + +print(testColonnesEgales(carre_mag)) +print(testColonnesEgales(carre_pas_mag)) + +def TestcolonneEgale(carre): + Colonne_1=[ligne[0] for ligne in carre] + somme_colonne_1=sum(Colonne_1) + for num_colonne in range (1,len(carre)): + colonne=[ligne[num_colonne] for ligne in carre] + if sum(colonne)!=somme_colonne_1: + return -1 + return somme_colonne_1 + +def TestDiagonalEgales(carre): + D1=[carre[i][i] for i in range (len(carre))] + D2=[carre[i][len(carre)-i-1] for i in range (len(carre))] + somme_D1=sum(D1) + if somme_D1 != sum(D2): + return -1 + else: + return somme_D1 + +def est_carre_mag(carre): + return test_ligneEgale(carre)==testColonnesEgales(carre)and test_ligneEgale(carre)==TestDiagonalEgales(carre) and testLignesEgales(carre)!=-1 From 9d537d0b0aeec5843492349b167de3b401719a61 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Mon, 20 Nov 2023 12:47:29 +0100 Subject: [PATCH 24/41] lol --- exercises/TD04_listes/syracuse.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/exercises/TD04_listes/syracuse.py b/exercises/TD04_listes/syracuse.py index 6297677fa..f05be0d57 100644 --- a/exercises/TD04_listes/syracuse.py +++ b/exercises/TD04_listes/syracuse.py @@ -100,3 +100,13 @@ def TestDiagonalEgales(carre): def est_carre_mag(carre): return test_ligneEgale(carre)==testColonnesEgales(carre)and test_ligneEgale(carre)==TestDiagonalEgales(carre) and testLignesEgales(carre)!=-1 + +def Est_normal(carre): + Liste=[] + for ligne in carre: + Liste.extend(ligne) + taille=len(carre) + for entier in range (1,taille*taille+1) + if entier not in Liste: + return False + return True \ No newline at end of file From 97f92cf3ddd8694bab0aaf10924a9f18630e2563 Mon Sep 17 00:00:00 2001 From: Sabri KABANI Date: Sat, 3 Feb 2024 16:53:38 +0100 Subject: [PATCH 25/41] additionS2 --- EXERCICES_S2/TP1_nombre.ipynb | 378 ++++++++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 EXERCICES_S2/TP1_nombre.ipynb diff --git a/EXERCICES_S2/TP1_nombre.ipynb b/EXERCICES_S2/TP1_nombre.ipynb new file mode 100644 index 000000000..ca7cf2814 --- /dev/null +++ b/EXERCICES_S2/TP1_nombre.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TD1 Représentation de nombres" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exercice sur papier:\n", + "\n", + "1. Convertir en binaire le nombre 115 (division successive par 2).\n", + "2. Donner la représentation de -115 en complément à 2 sur 8 bits.\n", + "3. Donner la représentation de 12,625 comme un flottant. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On représente un entier en binaire par une liste de 0 et de 1. Donner une fonction `conversionBase2(nombre)`\n", + "qui transforme un entier en sa représentation binaire. Attention, les bits sont calculés dans l'ordre inverse\n", + "(little endian), il faudra sans doute renverser la liste avec la méthode `.reverse()`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['1', '1', '1', '0', '0', '1', '1']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def conversionBase2(nombre):\n", + " if(nombre==0):\n", + " return [0]\n", + " res = []\n", + " while nombre!=0:\n", + " if nombre%2==1:\n", + " res.append(\"1\")\n", + " elif nombre%2==0:\n", + " res.append(\"0\")\n", + " nombre=nombre//2\n", + " res.reverse()\n", + " return res\n", + " \n", + "conversionBase2(115)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction d'affichage d'une liste représentant un nombre en binaire. Pour afficher avec `print` sans passer à la ligne il faut utiliser l'argument optionnel end=\"\"." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1110011" + ] + } + ], + "source": [ + "def afficheBase(liste):\n", + " for i in liste:\n", + " print(i,end=\"\")\n", + "\n", + "afficheBase(conversionBase2(115))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Convertir un nombre dans n'importe quelle base b (représentée comme une liste des chiffres dans cette base).\n", + "Que faut-il changer dans `conversionBase2` pour gérer n'importe quelle base ?" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['1', '1', '1', '0', '0', '1', '1']\n" + ] + }, + { + "data": { + "text/plain": [ + "['1', '1', '0', '2', '1']" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def conversionBase(nombre,b):\n", + " if(nombre==0):\n", + " return [0]\n", + " res = []\n", + " while nombre!=0:\n", + " if nombre%b==0:\n", + " res.append(\"0\")\n", + " elif nombre%b!=0:\n", + " res.append(str(nombre%b))\n", + " nombre=nombre//b\n", + " res.reverse()\n", + " return res\n", + "\n", + "print(conversionBase(115,2))\n", + "conversionBase(115,3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Quels sont les nombres entiers qu'on peut écrire avec n chiffres en base b ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Écrire une fonction d'affichage pour un nombre en Hexadécimal (en base 16).\n", + "On rappelle que 10 doit être représenté par A, 11 par B ..." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22B8\n" + ] + } + ], + "source": [ + "def afficheBaseHexa(liste):\n", + " lettres=[\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"]\n", + " for v in liste:\n", + " if int(v)<10:\n", + " print(v,end=\"\")\n", + " else:\n", + " print(lettres[int(v)%10],end=\"\")\n", + " print()\n", + " \n", + "\n", + " \n", + "\n", + "afficheBaseHexa(conversionBase(8888,16))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner la valeur de $(1001101)_2$ (dans la représentation traditionnelle en base 10).\n", + "Écrire une fonction qui transforme la représentation en base b d'un entier en cet entier." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "115\n", + "77\n" + ] + } + ], + "source": [ + "\n", + "def conversionEntier(liste,b):\n", + " res = 0\n", + " for i in range (len(liste)):\n", + " res+=int(liste[-i-1])*b**i\n", + "\n", + " return res\n", + "\n", + "\n", + "\n", + "test = conversionBase(115,2)\n", + "print(conversionEntier(test,2))\n", + "\n", + "print(conversionEntier([\"1\",\"0\",\"0\",\"1\",\"1\",\"0\",\"1\"],2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Additioner $(10001101)_2$ et $(10111001)_2$ à la main. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On a `l` un nombre en base b et on veut l'écrire sur n chiffres (en ajoutant des 0 devant). Donner une fonction pour réaliser cette transformation." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0, 0, 0, '1', '1', '1', '0', '0', '1', '1']" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def etendreEcriture(l,n):\n", + " if n len(l2)):\n", + " l2 = etendreEcriture(l2,len(l1))\n", + " else:\n", + " l1 = etendreEcriture(l1,len(l2))\n", + " res = []\n", + " ret=0\n", + " for i in range(len(l2)-1,-1,-1):\n", + " somme=l2[i]+l1[i]+ret\n", + "\n", + " res.insert(0,somme%b)\n", + " \n", + " \n", + "\n", + " return res\n", + "\n", + "test1 = conversionBase(7,2)\n", + "test2 = conversionBase(18,2)\n", + "\n", + "addition(test1,test2,2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La multiplication Égyptienne est basée sur la propriété suivante:\n", + "* si x est pair, x*y = (x/2)*(y*2)\n", + "* si x est impair, x*y = (x/2)*(y*2) + y\n", + "\n", + "Implémenter la multiplication et la division par 2 d'un nombre en binaire. \n", + "S'en servir pour implémenter la multiplication Égyptienne en base 2. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def division2(l):\n", + " l.pop()\n", + " return l\n", + "\n", + "def multiplication2(l):\n", + " l.append(0)\n", + " return l\n", + " \n", + " \n", + "def est_pair(l):\n", + " return l[-1] == 0\n", + " \n", + "\n", + "def est_zero(l):\n", + " for e in l:\n", + " if e:\n", + " return False\n", + " return True\n", + " \n", + "\n", + "def multiplication_egyptienne(l1,l2):\n", + " \n", + " \n", + "\n", + "\n", + "test1 = conversionBase(15,2)\n", + "test2 = conversionBase(6,2)\n", + "multiplication_egyptienne(test1,test2) " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "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.11.4" + }, + "vscode": { + "interpreter": { + "hash": "e5f921d2cbc40cc05b5a24db6ba0e6b62c33b50cc3ec097b0c624e897b5a9797" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 6625f06b628f3335e2c7d0bf4bdd0c97046af181 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 9 Feb 2024 09:50:26 +0100 Subject: [PATCH 26/41] okay? --- EXERCICES_S2/TP1_nombre.ipynb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/EXERCICES_S2/TP1_nombre.ipynb b/EXERCICES_S2/TP1_nombre.ipynb index ca7cf2814..8d3995fef 100644 --- a/EXERCICES_S2/TP1_nombre.ipynb +++ b/EXERCICES_S2/TP1_nombre.ipynb @@ -339,7 +339,10 @@ " \n", "\n", "def multiplication_egyptienne(l1,l2):\n", - " \n", + " if l1%2==0:\n", + " return(l1/2)*(l2*2)\n", + " elif l1%2!=0:\n", + " return(l1/2)*(l2*2)+l2\n", " \n", "\n", "\n", From 3d87a69edef2cd672ea23eec302e321d84912511 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 9 Feb 2024 10:03:42 +0100 Subject: [PATCH 27/41] TD2 --- EXERCICES_S2/2_gui.ipynb | 303 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 EXERCICES_S2/2_gui.ipynb diff --git a/EXERCICES_S2/2_gui.ipynb b/EXERCICES_S2/2_gui.ipynb new file mode 100644 index 000000000..9e86d19fb --- /dev/null +++ b/EXERCICES_S2/2_gui.ipynb @@ -0,0 +1,303 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Interface graphique\n", + "\n", + "\n", + "Ce [site](http://tkinter.fdex.eu/index.html) recense les méthodes utilisables dans les différents widgets, et permet de retrouver rapidement des informations à leur sujet.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Prise en main\n", + "\n", + "---\n", + "\n", + "1. Recopier le contenu du fichier `exemple03.py` depuis le répertoire `examples\\gui` du projet `L1-PYHTON` dans le fichier `debut.py`.\n", + "\n", + "2. Exécuter ce programme et comprendre ce qu'il fait.\n", + "\n", + "3. Retirer la condition \n", + "```python\n", + "if __name__ == '__main__':\n", + "```\n", + "et remplacer la fonction `canvas.pack()` par la fonction de positionnement des widgets que l'on a vue en cours. Puis testez votre programme.\n", + "\n", + "4. Importer la librairie `tkinter` avec l'instruction\n", + "```python\n", + "import tkinter as tk\n", + "```\n", + "au lieu de \n", + "```python\n", + "from tkinter import *\n", + "```\n", + "et modifier le programme pour qu'il fonctionne avec cette nouvelle manière de faire.\n", + "\n", + "5. Modifier le programme pour que la ligne qui s'affiche devienne verticale tout en conservant les cercles à ses extrémités.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## 2. Dessins aléatoires\n", + "\n", + "Cet exercice est à traiter dans un script `dessin.py`.\n", + "\n", + "\n", + "1. Créer la fenêtre graphique correspondant à la figure suivante:\n", + "\n", + "![](images/mon_dessin.png)\n", + "\n", + "\n", + "c'est-à-dire que la fenêtre est composée de:\n", + "* 4 widgets Button\n", + "* 1 widget Canvas dont le fond est noir\n", + "* titre à la fenêtre\n", + "\n", + "**Indication:** pour placer un widget sur plusieurs lignes (resp. colonnes), il faut utiliser le paramètre `rowspan` (resp. `columnspan`).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Modifier le style par défaut des boutons, par exemple, en modifiant les couleurs, en ajoutant des marges, en changeant la taille de la police. Pour savoir ce qu'il est possible de faire, consultez le site indiqué au début du sujet." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Dans les paramètres de création du canevas, chercher comment augmenter l'épaisseur du bord du widget, et comment le mettre en relief. Puis faites le." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Ajouter un lien (paramètre `command` du widget Button) entre le bouton `Cercle` et une fonction qui affiche un disque de diamètre 100 en bleu à un endroit choisi au hasard dans le canevas. Le cercle doit être inclu intégralement dans le canevas." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Faites pareil pour le bouton `Carré` qui doit afficher un carré rouge de côté 100, et puis pour `Croix` qui doit afficher une croix jaune inscrite dans un carré de côté 100 (les carrés dont on parle ont leur cotés horizontaux et verticaux)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Faire en sorte que le bouton `Choisir une couleur` demande une couleur à l'utilisateur dans le terminal. Ensuite, les objets qui s'affichent doivent être de cette couleur, qui peut être modifiée par l'utilisateur autant de fois qu'il le souhaite. Tant que l'utilisateur n'a pas choisi de couleur, la couleur est bleue. On rappelle les couleurs prédéfinies: white, black, red, green, blue, cyan, yellow." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Cible en couleur\n", + "\n", + "---\n", + "\n", + "Dans un fichier `cible.py`, écrire le programme qui affiche la figure suivante:\n", + "\n", + "![](images/cible.png)\n", + "\n", + "Dans l'ordre les couleurs sont blue, green, black, yellow, magenta, red.\n", + "Vous choisissez la taille d'image et le nombre de cercles que vous voulez. Mais le programme doit afficher une telle figure pour n'importe quelles valeurs choisies.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Couleurs\n", + "\n", + "---\n", + "Les questions qui suivent sont à traiter dans un fichier `couleurs.py`.\n", + "\n", + "On rappelle que les couleurs sont codées par leur 3 composantes rouge, vert et bleu auxquelles on associe des valeurs comprises entre 0 et 255. La fonction suivante retourne une couleur dans le format attendu par Python à partir de ces 3 composantes.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_color(r, g, b):\n", + " \"\"\" Retourne une couleur à partir de ses composantes r, g, b entre 0 et 255\"\"\"\n", + " return '#{:02x}{:02x}{:02x}'.format(r, g, b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cette fonction est à recopier au début de votre programme pour pouvoir l'utiliser ensuite.\n", + "\n", + "1. Créer la fenêtre graphique suivante (on demande juste de conserver la disposition des widgets les uns par rapport aux autres):\n", + "\n", + "![](images/fenetre_couleur.png)\n", + "\n", + "La taille du canvas doit être 256x256.\n", + "\n", + "2. Ecrire la fonction\n", + "\n", + "```python\n", + "def draw_pixel(i, j, color)\n", + "```\n", + "qui colorie le pixel `(i, j)` du canvas de la couleur color. La tester en allumant en blanc le pixel du milieu du canevas.\n", + "\n", + "**⚠️** Par défaut, lorsqu'on dessine un rectangle dans un canvas, celui-ci a une bordure noire de 1 pixel. Utilisez le paramètre `width=0` pour la supprimer.\n", + "\n", + "3. Ecrire la fonction \n", + "```python\n", + "def ecran_aleatoire()\n", + "```\n", + "qui est appelée par le bouton `aleatoire` et qui remplit le canevas de manière à ce que chaque pixel soit d'une couleur choisie au hasard.\n", + "\n", + "3. Ecrire la fonction \n", + "```python\n", + "def degrade_gris()\n", + "```\n", + "qui affiche le dégradé de gris comme sur la figure suivante quand on clique sur le bouton correspondant:\n", + "\n", + "![](images/degrade_gris.png)\n", + "\n", + "4. Ecrire la fonction \n", + "```python\n", + "def degrade_2D()\n", + "```\n", + "qui affiche le dégradé de rouge et bleu comme sur la figure suivante quand on clique sur le bouton correspondant:\n", + "\n", + "![](images/degrade_rouge_bleu.png)\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Fonction undo\n", + "\n", + "---\n", + "\n", + "Reprendre le programme de l'exercice 2. On va le compléter en ajoutant la possibilité d'annuler des dessins qui ont été faits dans l'ordre inverse de leur création. Cette fonctionnalité est souvent présente dans les logiciels d'édition de texte ou d'image, par exemple dans VSCode dans le menu \"Edit\" de la barre de menu, ou bien en tapant CTRL+Z. Pour faire cela, on va utiliser une liste contenant tous les objets dessinés, et il suffira de les supprimer à partir de la fin de la liste.\n", + "\n", + "\n", + "1. Dans le programme de l'exercice 2, ajouter un bouton \"Undo\" à côté du bouton \"Choisir une couleur\". Ce bouton doit être lié à la fonction `def undo()` que l'on écrira plus tard.\n", + "\n", + "2. Ajouter une variable globale appelée `objets`. Elle doit contenir une liste qui doit être initialisée vide. Ensuite, ajouter le code qui, à chaque création d'objet (cercle, carré ou croix), l'ajoute à la liste. \n", + "\n", + "3. Ecrivez maintenant la fonction `undo()` en utilisant la méthode `.delete()` du canevas, et tester votre fonction.\n", + "\n", + "4. Faire en sorte que, si l'on clique sur \"Undo\" alors que le dessin est vide, aucune erreur n'est générée.\n", + "\n", + "5. Les croix posent un problème car il faut cliquer 2 fois sur \"Undo\" pour supprimer les 2 lignes. Afin d'améliorer notre fonction `undo()`, récupérer le type de l'objet à supprimer avec la méthode `.type(objet)` du canevas. Cette méthode retourne `\"line\"` si l'objet passé en argument est une ligne. Puis utiliser cette information pour ne pas avoir à cliquer 2 fois pour supprimer les croix. \n", + "\n", + "**Remarque:** en fait, il vaudrait mieux utiliser la possibilité d'utiliser des \"tags\" sur les objets pour pouvoir grouper les deux lignes d'une croix dans le même tag, et les supprimer ensemble.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Avec des clics\n", + "\n", + "---\n", + "\n", + "Traiter cet exercice dans un fichier `clic.py`.\n", + "\n", + "1. Dans le fichier `clic1.py`, créer une fenêtre graphique qui contient un canevas de taille 500x500 et de couleur noire. Quand on clique sur le canevas, un pixel de couleur rouge s'affiche à l'endroit où l'on a cliqué.\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Copier le contenu du fichier `clic1.py` dans le fichier `clic2.py`. Modifier le fichier `clic2.py` de manière à faire les choses suivantes: \n", + " * afficher une ligne verticale en blanc qui sépare l'écran en 2 parties égales\n", + " * si l'utilisateur clique à gauche de la ligne afficher un cercle bleu et s'il est à droite, afficher un cercle rouge. Dans les deux cas, le cercle sera centré là où l'utilisateur a cliqué. Le rayon du cercle est 50." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Copier le contenu du fichier `clic2.py` dans le fichier `clic3.py`. Modifier le fichier `clic3.py` de manière à faire les choses suivantes: \n", + " * afficher une ligne verticale en blanc qui sépare l'écran en 2 parties égales\n", + " * à chaque fois que l'utilisateur a fait 2 clics, s'ils sont du même côté alors afficher une ligne bleue reliant les deux points où l'utilisateur a cliqué, sinon une ligne rouge. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Copier le contenu du fichier `clic3.py` dans le fichier `clic4.py`. Modifier le fichier `clic4.py` de manière à faire les choses suivantes: \n", + " * dessiner un carré vide au centre de l'écran (taille et couleur au choix au choix)\n", + " * à chaque clic, le carré se remplit et se vide alternativement\n", + " * au bout de 10 clics, la fenêtre se ferme (utiliser la fonction `racine.destroy()`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Copier le contenu du fichier `clic4.py` dans le fichier `clic5.py`. Modifier le fichier `clic5.py` de manière à faire les choses suivantes: \n", + " * pour les 8 premiers clics de l'utilisateur, on affiche un cercle rouge centré sur le point cliqué par l'utilisateur, et de rayon 50\n", + " * au neuvième clic, tous les cercles deviennent jaunes\n", + " * au dizième clic, tous les cercles disparaissent et on recommence au début" + ] + } + ], + "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.8.5" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": false, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 1a5c1351975a83161e8e94148f2cc4dfd72eecac Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 9 Feb 2024 10:05:58 +0100 Subject: [PATCH 28/41] TD22 --- EXERCICES_S2/2_gui.ipynb | 303 --------------------------------- EXERCICES_S2/TP2_Tkinter.ipynb | 195 +++++++++++++++++++++ 2 files changed, 195 insertions(+), 303 deletions(-) delete mode 100644 EXERCICES_S2/2_gui.ipynb create mode 100644 EXERCICES_S2/TP2_Tkinter.ipynb diff --git a/EXERCICES_S2/2_gui.ipynb b/EXERCICES_S2/2_gui.ipynb deleted file mode 100644 index 9e86d19fb..000000000 --- a/EXERCICES_S2/2_gui.ipynb +++ /dev/null @@ -1,303 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Interface graphique\n", - "\n", - "\n", - "Ce [site](http://tkinter.fdex.eu/index.html) recense les méthodes utilisables dans les différents widgets, et permet de retrouver rapidement des informations à leur sujet.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Prise en main\n", - "\n", - "---\n", - "\n", - "1. Recopier le contenu du fichier `exemple03.py` depuis le répertoire `examples\\gui` du projet `L1-PYHTON` dans le fichier `debut.py`.\n", - "\n", - "2. Exécuter ce programme et comprendre ce qu'il fait.\n", - "\n", - "3. Retirer la condition \n", - "```python\n", - "if __name__ == '__main__':\n", - "```\n", - "et remplacer la fonction `canvas.pack()` par la fonction de positionnement des widgets que l'on a vue en cours. Puis testez votre programme.\n", - "\n", - "4. Importer la librairie `tkinter` avec l'instruction\n", - "```python\n", - "import tkinter as tk\n", - "```\n", - "au lieu de \n", - "```python\n", - "from tkinter import *\n", - "```\n", - "et modifier le programme pour qu'il fonctionne avec cette nouvelle manière de faire.\n", - "\n", - "5. Modifier le programme pour que la ligne qui s'affiche devienne verticale tout en conservant les cercles à ses extrémités.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "\n", - "## 2. Dessins aléatoires\n", - "\n", - "Cet exercice est à traiter dans un script `dessin.py`.\n", - "\n", - "\n", - "1. Créer la fenêtre graphique correspondant à la figure suivante:\n", - "\n", - "![](images/mon_dessin.png)\n", - "\n", - "\n", - "c'est-à-dire que la fenêtre est composée de:\n", - "* 4 widgets Button\n", - "* 1 widget Canvas dont le fond est noir\n", - "* titre à la fenêtre\n", - "\n", - "**Indication:** pour placer un widget sur plusieurs lignes (resp. colonnes), il faut utiliser le paramètre `rowspan` (resp. `columnspan`).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2. Modifier le style par défaut des boutons, par exemple, en modifiant les couleurs, en ajoutant des marges, en changeant la taille de la police. Pour savoir ce qu'il est possible de faire, consultez le site indiqué au début du sujet." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3. Dans les paramètres de création du canevas, chercher comment augmenter l'épaisseur du bord du widget, et comment le mettre en relief. Puis faites le." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "4. Ajouter un lien (paramètre `command` du widget Button) entre le bouton `Cercle` et une fonction qui affiche un disque de diamètre 100 en bleu à un endroit choisi au hasard dans le canevas. Le cercle doit être inclu intégralement dans le canevas." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "5. Faites pareil pour le bouton `Carré` qui doit afficher un carré rouge de côté 100, et puis pour `Croix` qui doit afficher une croix jaune inscrite dans un carré de côté 100 (les carrés dont on parle ont leur cotés horizontaux et verticaux)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "6. Faire en sorte que le bouton `Choisir une couleur` demande une couleur à l'utilisateur dans le terminal. Ensuite, les objets qui s'affichent doivent être de cette couleur, qui peut être modifiée par l'utilisateur autant de fois qu'il le souhaite. Tant que l'utilisateur n'a pas choisi de couleur, la couleur est bleue. On rappelle les couleurs prédéfinies: white, black, red, green, blue, cyan, yellow." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Cible en couleur\n", - "\n", - "---\n", - "\n", - "Dans un fichier `cible.py`, écrire le programme qui affiche la figure suivante:\n", - "\n", - "![](images/cible.png)\n", - "\n", - "Dans l'ordre les couleurs sont blue, green, black, yellow, magenta, red.\n", - "Vous choisissez la taille d'image et le nombre de cercles que vous voulez. Mais le programme doit afficher une telle figure pour n'importe quelles valeurs choisies.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. Couleurs\n", - "\n", - "---\n", - "Les questions qui suivent sont à traiter dans un fichier `couleurs.py`.\n", - "\n", - "On rappelle que les couleurs sont codées par leur 3 composantes rouge, vert et bleu auxquelles on associe des valeurs comprises entre 0 et 255. La fonction suivante retourne une couleur dans le format attendu par Python à partir de ces 3 composantes.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_color(r, g, b):\n", - " \"\"\" Retourne une couleur à partir de ses composantes r, g, b entre 0 et 255\"\"\"\n", - " return '#{:02x}{:02x}{:02x}'.format(r, g, b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Cette fonction est à recopier au début de votre programme pour pouvoir l'utiliser ensuite.\n", - "\n", - "1. Créer la fenêtre graphique suivante (on demande juste de conserver la disposition des widgets les uns par rapport aux autres):\n", - "\n", - "![](images/fenetre_couleur.png)\n", - "\n", - "La taille du canvas doit être 256x256.\n", - "\n", - "2. Ecrire la fonction\n", - "\n", - "```python\n", - "def draw_pixel(i, j, color)\n", - "```\n", - "qui colorie le pixel `(i, j)` du canvas de la couleur color. La tester en allumant en blanc le pixel du milieu du canevas.\n", - "\n", - "**⚠️** Par défaut, lorsqu'on dessine un rectangle dans un canvas, celui-ci a une bordure noire de 1 pixel. Utilisez le paramètre `width=0` pour la supprimer.\n", - "\n", - "3. Ecrire la fonction \n", - "```python\n", - "def ecran_aleatoire()\n", - "```\n", - "qui est appelée par le bouton `aleatoire` et qui remplit le canevas de manière à ce que chaque pixel soit d'une couleur choisie au hasard.\n", - "\n", - "3. Ecrire la fonction \n", - "```python\n", - "def degrade_gris()\n", - "```\n", - "qui affiche le dégradé de gris comme sur la figure suivante quand on clique sur le bouton correspondant:\n", - "\n", - "![](images/degrade_gris.png)\n", - "\n", - "4. Ecrire la fonction \n", - "```python\n", - "def degrade_2D()\n", - "```\n", - "qui affiche le dégradé de rouge et bleu comme sur la figure suivante quand on clique sur le bouton correspondant:\n", - "\n", - "![](images/degrade_rouge_bleu.png)\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5. Fonction undo\n", - "\n", - "---\n", - "\n", - "Reprendre le programme de l'exercice 2. On va le compléter en ajoutant la possibilité d'annuler des dessins qui ont été faits dans l'ordre inverse de leur création. Cette fonctionnalité est souvent présente dans les logiciels d'édition de texte ou d'image, par exemple dans VSCode dans le menu \"Edit\" de la barre de menu, ou bien en tapant CTRL+Z. Pour faire cela, on va utiliser une liste contenant tous les objets dessinés, et il suffira de les supprimer à partir de la fin de la liste.\n", - "\n", - "\n", - "1. Dans le programme de l'exercice 2, ajouter un bouton \"Undo\" à côté du bouton \"Choisir une couleur\". Ce bouton doit être lié à la fonction `def undo()` que l'on écrira plus tard.\n", - "\n", - "2. Ajouter une variable globale appelée `objets`. Elle doit contenir une liste qui doit être initialisée vide. Ensuite, ajouter le code qui, à chaque création d'objet (cercle, carré ou croix), l'ajoute à la liste. \n", - "\n", - "3. Ecrivez maintenant la fonction `undo()` en utilisant la méthode `.delete()` du canevas, et tester votre fonction.\n", - "\n", - "4. Faire en sorte que, si l'on clique sur \"Undo\" alors que le dessin est vide, aucune erreur n'est générée.\n", - "\n", - "5. Les croix posent un problème car il faut cliquer 2 fois sur \"Undo\" pour supprimer les 2 lignes. Afin d'améliorer notre fonction `undo()`, récupérer le type de l'objet à supprimer avec la méthode `.type(objet)` du canevas. Cette méthode retourne `\"line\"` si l'objet passé en argument est une ligne. Puis utiliser cette information pour ne pas avoir à cliquer 2 fois pour supprimer les croix. \n", - "\n", - "**Remarque:** en fait, il vaudrait mieux utiliser la possibilité d'utiliser des \"tags\" sur les objets pour pouvoir grouper les deux lignes d'une croix dans le même tag, et les supprimer ensemble.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 6. Avec des clics\n", - "\n", - "---\n", - "\n", - "Traiter cet exercice dans un fichier `clic.py`.\n", - "\n", - "1. Dans le fichier `clic1.py`, créer une fenêtre graphique qui contient un canevas de taille 500x500 et de couleur noire. Quand on clique sur le canevas, un pixel de couleur rouge s'affiche à l'endroit où l'on a cliqué.\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2. Copier le contenu du fichier `clic1.py` dans le fichier `clic2.py`. Modifier le fichier `clic2.py` de manière à faire les choses suivantes: \n", - " * afficher une ligne verticale en blanc qui sépare l'écran en 2 parties égales\n", - " * si l'utilisateur clique à gauche de la ligne afficher un cercle bleu et s'il est à droite, afficher un cercle rouge. Dans les deux cas, le cercle sera centré là où l'utilisateur a cliqué. Le rayon du cercle est 50." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3. Copier le contenu du fichier `clic2.py` dans le fichier `clic3.py`. Modifier le fichier `clic3.py` de manière à faire les choses suivantes: \n", - " * afficher une ligne verticale en blanc qui sépare l'écran en 2 parties égales\n", - " * à chaque fois que l'utilisateur a fait 2 clics, s'ils sont du même côté alors afficher une ligne bleue reliant les deux points où l'utilisateur a cliqué, sinon une ligne rouge. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "4. Copier le contenu du fichier `clic3.py` dans le fichier `clic4.py`. Modifier le fichier `clic4.py` de manière à faire les choses suivantes: \n", - " * dessiner un carré vide au centre de l'écran (taille et couleur au choix au choix)\n", - " * à chaque clic, le carré se remplit et se vide alternativement\n", - " * au bout de 10 clics, la fenêtre se ferme (utiliser la fonction `racine.destroy()`)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "5. Copier le contenu du fichier `clic4.py` dans le fichier `clic5.py`. Modifier le fichier `clic5.py` de manière à faire les choses suivantes: \n", - " * pour les 8 premiers clics de l'utilisateur, on affiche un cercle rouge centré sur le point cliqué par l'utilisateur, et de rayon 50\n", - " * au neuvième clic, tous les cercles deviennent jaunes\n", - " * au dizième clic, tous les cercles disparaissent et on recommence au début" - ] - } - ], - "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.8.5" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": false, - "sideBar": false, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": false, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/EXERCICES_S2/TP2_Tkinter.ipynb b/EXERCICES_S2/TP2_Tkinter.ipynb new file mode 100644 index 000000000..63e98aeb8 --- /dev/null +++ b/EXERCICES_S2/TP2_Tkinter.ipynb @@ -0,0 +1,195 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Commencer par importer 'tkinter' et les librairies nécessaires à l'aide des commandes suivantes :" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import tkinter as tk\n", + "import PIL as pil\n", + "from PIL import Image\n", + "from PIL import ImageTk \n", + "from tkinter import filedialog\n", + "from tkinter import simpledialog" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vous pouvez consulter la documentation de tkinter https://docs.python.org/fr/3/library/tk.html et une documentation en français http://tkinter.fdex.eu/.\n", + "Créer une fenêtre tkinter qui a pour titre \"J'apprends Tkinter\" et qui affiche le texte \"J'adore Python !\" dans la fenêtre" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Toujours dans la même fenêtre, ajouter maintenant un bouton permettant de quitter la fenêtre, il faudra pour cela \n", + "créer une fonction callback `fermer_fenetre` qui appelle la méthode `destroy()`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maintenant nous allons modifier la disposition des différents éléments en utilisant une grille pour positionner les éléments dans la fenêtre. Ajouter un canevas rouge à droite du label et du bouton." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Faire un canevas de taile 300x300 pour que ce soit lisible\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter un canevas noir en dessous du canevas rouge précédent. Faire une fonction qui permet de compter le nombre de clics sur le carré rouge. Afficher cette valeur dans le label qui servait à afficher \"j'adore python\". Attention, le compteur du nombre de clics est appelé dans une fonction callback, il faut donc le récupérer en dehors de cette fonction en le déclarant comme variable globale. Utiliser la méthode `bind` pour récupérer le clic de souris." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une unique fonction qui renvoie la couleur du canevas sur lequel on a double-cliqué.\n", + "Afficher la couleur à la place du compteur précédent." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "REMARQUE : Attention à ne pas mettre deux `bind` différents qui se déclenchent \n", + "sur une même action sinon seul le dernier sera réalisé.\n", + "En effet, la variable `event` va être modifiée deux fois et seule sa dernière modification sera donc prise en compte." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une nouvelle fenêtre qui permet de charger une image depuis un fichier en utilisant la fonction `charger(widg)`. \n", + "Vous allez devoir passer un paramètre dans la fonction callback `charger`. On ne demande pas de comprendre le fonctionnement de la fonction `charger`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "create=True\n", + "\n", + "def charger(widg):\n", + " global create\n", + " global photo\n", + " global img\n", + " global canvas\n", + " filename= filedialog.askopenfile(mode='rb', title='Choose a file')\n", + " img = pil.Image.open(filename)\n", + " photo = ImageTk.PhotoImage(img)\n", + " print(photo)\n", + " if create: \n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.pack()\n", + " create=False\n", + " \n", + " else:\n", + " canvas.pack_forget()\n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.pack()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fenêtre qui :\n", + "- Permet d'écrire dans une zone de texte\n", + "- contient un label d'affichage\n", + "- contient deux boutons, respectivement \"Bouton1\" et \"Bouton2\" permettant d'afficher dans le label le numéro du bouton sur lequel on a cliqué\n", + "- contient un dernier bouton qui permet d'afficher dans le label le texte tapé dans la zone de texte" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 2edfd57d6b6a33d3f9803473333a3c042722f91b Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Wed, 14 Feb 2024 15:17:40 +0100 Subject: [PATCH 29/41] Skibidi --- EXERCICES_S2/TP2_Tkinter.ipynb | 128 +++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 12 deletions(-) diff --git a/EXERCICES_S2/TP2_Tkinter.ipynb b/EXERCICES_S2/TP2_Tkinter.ipynb index 63e98aeb8..9ee118737 100644 --- a/EXERCICES_S2/TP2_Tkinter.ipynb +++ b/EXERCICES_S2/TP2_Tkinter.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -32,10 +32,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import tkinter as tk\n", + "\n", + "root=tk.Tk()\n", + "root.geometry(\"500x500\")\n", + "root.title(\"J'apprends Tkinter\")\n", + "label= tk.Label(root, text=\"J'adore Python !\", font=('Arial',18))\n", + "label.pack(padx=20, pady=20)\n", + "root.mainloop()\n" + ] }, { "cell_type": "markdown", @@ -47,10 +56,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import tkinter as tk\n", + "def fermer_fenetre():\n", + " return root.destroy\n", + "\n", + "\n", + "root=tk.Tk()\n", + "root.geometry(\"500x500\")\n", + "root.title(\"J'apprends Tkinter\")\n", + "label= tk.Label(root, text=\"J'adore Python !\", font=('Arial',18))\n", + "label.pack(padx=20, pady=20)\n", + "button1= tk.Button(root, text=\"Click ici!\", command=fermer_fenetre())\n", + "button1.pack(padx=50 , pady=50)\n", + "root.mainloop()\n" + ] }, { "cell_type": "markdown", @@ -61,11 +84,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ - "#Faire un canevas de taile 300x300 pour que ce soit lisible\n" + "#Faire un canevas de taile 300x300 pour que ce soit lisible\n", + "import tkinter as tk\n", + "def fermer_fenetre():\n", + " return root.destroy\n", + "\n", + "\n", + "root=tk.Tk()\n", + "root.geometry(\"300x300\")\n", + "root.title(\"J'apprends Tkinter\")\n", + "label= tk.Label(root, text=\"J'adore Python !\", font=('Arial',18))\n", + "label.pack(padx=20, pady=20)\n", + "\n", + "buttonfenetre=tk.Frame(root)\n", + "button1= tk.Button(buttonfenetre, text=\"Click ici!\", command=fermer_fenetre())\n", + "button1.grid(row=0 , column=0 , sticky=\"we\")\n", + "canevas1=tk.Canvas(buttonfenetre, background=\"red\", width=50 , height=50)\n", + "canevas1.grid(row=0 , column=1, sticky=\"we\" )\n", + "buttonfenetre.pack()\n", + "\n", + "root.mainloop()\n", + "\n" ] }, { @@ -77,10 +120,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "#Faire un canevas de taile 300x300 pour que ce soit lisible\n", + "import tkinter as tk\n", + "def fermer_fenetre():\n", + " return root.destroy\n", + "cnt = 0\n", + "def countclick(event):\n", + " global cnt\n", + " cnt+=1\n", + " label.configure(text=\"J'adore Python ! \" +str(cnt))\n", + "\n", + "root=tk.Tk()\n", + "root.geometry(\"300x300\")\n", + "root.title(\"J'apprends Tkinter \")\n", + "label= tk.Label(root, text=\"J'adore Python ! \" +str(cnt), font=('Arial',18))\n", + "label.pack(padx=20, pady=20)\n", + "\n", + "buttonfenetre=tk.Frame(root)\n", + "button1= tk.Button(buttonfenetre, text=\"Click ici!\", command=fermer_fenetre())\n", + "button1.grid(row=0 , column=0 , sticky=\"we\")\n", + "canevasR=tk.Canvas(buttonfenetre, background=\"red\", width=50 , height=50)\n", + "canevasR.grid(row=0 , column=1, sticky=\"we\")\n", + "buttonfenetre.pack()\n", + "canevasN=tk.Canvas(buttonfenetre, background=\"black\", width=50, height=50)\n", + "canevasN.grid(row=1 , column=1, sticky=\"n\")\n", + "canevasR.bind('', countclick)\n", + "root.mainloop()\n", + "\n" + ] }, { "cell_type": "markdown", @@ -92,10 +163,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "#Faire un canevas de taile 300x300 pour que ce soit lisible\n", + "import tkinter as tk\n", + "def fermer_fenetre():\n", + " return root.destroy\n", + "\n", + "\n", + "cnt = 0\n", + "def givecouleurR(event):\n", + " label.configure(text=\"C'est du rouge!\")\n", + " \n", + "def givecouleurN(event):\n", + " label.configure(text=\"C'est du noir!\")\n", + "\n", + "root=tk.Tk()\n", + "root.geometry(\"300x300\")\n", + "root.title(\"J'apprends Tkinter \")\n", + "label= tk.Label(root, text=\"J'adore Python ! \", font=('Arial',18))\n", + "label.pack(padx=20, pady=20)\n", + "\n", + "buttonfenetre=tk.Frame(root)\n", + "button1= tk.Button(buttonfenetre, text=\"Click ici!\", command=fermer_fenetre())\n", + "button1.grid(row=0 , column=0 , sticky=\"we\")\n", + "canevasR=tk.Canvas(buttonfenetre, background=\"red\", width=50 , height=50)\n", + "canevasR.grid(row=0 , column=1, sticky=\"we\")\n", + "buttonfenetre.pack()\n", + "canevasN=tk.Canvas(buttonfenetre, background=\"black\", width=50, height=50)\n", + "canevasN.grid(row=1 , column=1, sticky=\"n\")\n", + "\n", + "canevasR.bind('', givecouleurR)\n", + "canevasN.bind('', givecouleurN)\n", + "root.mainloop()\n", + "\n" + ] }, { "cell_type": "markdown", @@ -187,7 +291,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.11.4" } }, "nbformat": 4, From cb1dcc1798d7b2e19031ffc74b773f27d3ca293c Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Wed, 14 Feb 2024 16:00:46 +0100 Subject: [PATCH 30/41] DONE!!! --- EXERCICES_S2/TP2_Tkinter.ipynb | 60 ++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/EXERCICES_S2/TP2_Tkinter.ipynb b/EXERCICES_S2/TP2_Tkinter.ipynb index 9ee118737..4b4db0b2f 100644 --- a/EXERCICES_S2/TP2_Tkinter.ipynb +++ b/EXERCICES_S2/TP2_Tkinter.ipynb @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -84,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -120,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -163,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -220,9 +220,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pyimage3\n" + ] + } + ], "source": [ "create=True\n", "\n", @@ -245,16 +253,13 @@ " canvas.pack_forget()\n", " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", " canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", - " canvas.pack()" + " canvas.pack()\n", + "root=tk.Tk()\n", + "root.title('Image')\n", + "img= charger(root)\n", + "root.mainloop()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "attachments": {}, "cell_type": "markdown", @@ -269,10 +274,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "root=tk.Tk()\n", + "root.title(\"ooooh baby, i feel right, music sound sbetter with you\")\n", + "root.geometry(\"500x500\")\n", + "Script=tk.Text(root,height=5, font=(\"Arial\",18))\n", + "Script.pack()\n", + "label= tk.Label(root, text=\"label d'affichage askip\")\n", + "label.pack() \n", + "def afficher1():\n", + " label.configure(text=\"boutton 1 clické !\")\n", + "def afficher2():\n", + " label.configure(text=\"boutton 2 clické !\")\n", + "bouton1=tk.Button(root,text=\"boutton1\",command=afficher1)\n", + "bouton2=tk.Button(root,text=\"boutton2\",command=afficher2)\n", + "bouton1.pack()\n", + "bouton2.pack()\n", + "def montrertext():\n", + " label.configure(text=Script.get(\"1.0\",\"end\"))\n", + "bouttonshow= tk.Button(root, text=\"Show\", command=montrertext)\n", + "bouttonshow.pack()\n", + "root.mainloop()" + ] } ], "metadata": { From fcf9b9e5e8040fac016d5c55e3ffd43422b330d9 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Wed, 21 Feb 2024 16:45:54 +0100 Subject: [PATCH 31/41] CHEETAHJHH --- EXERCICES_S2/TP3/TP3_Image.ipynb | 333 +++++++++++++++++++++++++++++++ EXERCICES_S2/TP3/cheetah.png | Bin 0 -> 112089 bytes EXERCICES_S2/TP3/test.bmp | Bin 0 -> 120054 bytes TP3.zip | Bin 0 -> 115289 bytes 4 files changed, 333 insertions(+) create mode 100644 EXERCICES_S2/TP3/TP3_Image.ipynb create mode 100644 EXERCICES_S2/TP3/cheetah.png create mode 100644 EXERCICES_S2/TP3/test.bmp create mode 100644 TP3.zip diff --git a/EXERCICES_S2/TP3/TP3_Image.ipynb b/EXERCICES_S2/TP3/TP3_Image.ipynb new file mode 100644 index 000000000..51e0d3055 --- /dev/null +++ b/EXERCICES_S2/TP3/TP3_Image.ipynb @@ -0,0 +1,333 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Questions de cours \n", + "\n", + "1.Qu'est-ce qu'un pixel ?\n", + "\n", + "2.Quel format de stockage utilise-t-on pour stocker un pixel ?\n", + "\n", + "3.Donner la suite de 0 et de 1 permettant de stocker une image de 2 fois 2 qui part du noir en haut à gauche\n", + "et devient plus rouge en allant à doite et plus bleu en allant vers le bas." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une matrice avec 3 lignes et 4 colonnes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#définir la matrice sans utiliser de boucles comme une liste de liste\n", + "mat_liste = []\n", + "\n", + "#définir la matrice comme un numpy array à deux dimensions\n", + "import numpy as np\n", + "mat_numpy = [] " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Afficher le nombre de lignes et de colonnes de `mat_liste` et de `mat_numpy`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remplir `mat_numpy` de 9 en utilisant deux boucles sur les index de la matrice." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def rempli9(matrice):\n", + " pass\n", + "\n", + "rempli9(mat_numpy)\n", + "print(mat_numpy)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Maintenant, remplir la matrice de 8 en utilisant les fonctions spécifiques de numpy, sans faire de boucle. Consulter la documentation de numpy pour trouver une solution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def rempli8(matrice):\n", + " pass\n", + "\n", + "rempli8(mat_numpy)\n", + "print(mat_numpy)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une liste de taille 50 qui ne contient que des 3, en utilisant la compréhension de liste.\n", + "Créer ensuite une matrice comme liste de listes dont la première ligne contient des 1, la deuxième des 2 ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrice de Pixels" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On va importer la librairie PIL pour charger et afficher des images. On importe aussi tkinter pour l'interface d'ouverture de fichier." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import PIL as pil\n", + "from PIL import Image\n", + "from PIL import ImageTk " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La fonction `save` permet de stocker la matrice de pixels passée en paramètre `matPix` dans un fichier spécifié par `filename`.\n", + "La fonction `load` renvoie la matrice représentant l'image stockée dans le fichier `filename`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def save(matPix, filename):\n", + " Image.fromarray(matPix).save(filename)\n", + "\n", + "def load(filename):\n", + " return np.array(pil.Image.open(filename))\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une matrice de pixels de taille 100x100 ainsi qu'une fonction qui met à vert les pixels de la moitié gauche de l'image et à bleu les pixels de moitié droite.\n", + "Afin de visualiser l'image obtenue, on utilisera la fonction `save` et on ouvrira le fichier ainsi généré. On utilisera ensuite la méthode show de PIL." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#definir une nouvelle matrice 100x100\n", + "matVB= np.empty((100,100,3),dtype=np.uint8)\n", + "\n", + "#utiliser une double boucle\n", + "def rempliVB(matrice):\n", + " pass\n", + "\n", + "#alternativement, utiliser les slices de numpy\n", + "\n", + " \n", + "rempliVB(matVB)\n", + "save(matVB,\"vertbleu.png\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En vous servant de la fonction `load`, calculer le nombre de pixels dans une image `.bmp` de votre choix, puis calculer la taille de l'image en octets. Comparer avec la taille donnée par votre machine." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mat=load(\"test.bmp\")\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modifier l'image que vous avez créé précédemment en ajoutant un rectangle noir au milieu de l'image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrice=load(\"vertbleu.png\")\n", + "\n", + "def ajouteCarreNoir(mat):\n", + " pass\n", + "\n", + "ajouteCarreNoir(matrice)\n", + "save(matrice,\"vertbleumodif.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "De la même manière ajouter un filtre qui ne conserve que la composante verte d'une image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrice=load(\"cheetah.png\")\n", + "\n", + "#avec une boucle\n", + "def filtre_vert(mat):\n", + " pass\n", + "\n", + "#avec les slices de numpy\n", + "\n", + "\n", + "filtre_vert(matrice)\n", + "save(matrice,\"filtre.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une méthode qui permet d'afficher le négatif de l'image (on inverse la luminosité)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrice=load(\"cheetah.png\")\n", + "\n", + "def negatif(mat): \n", + " pass\n", + "\n", + "negatif(matrice)\n", + "save(matrice,\"negatif.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créer une méthode qui permet d'afficher le symétrique de l'image par rapport à la droite verticale en son milieu." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matrice=load(\"cheetah.png\")\n", + "\n", + "def symetrique(mat): \n", + " pass\n", + "\n", + "save(symetrique(matrice),\"sym.png\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "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.16" + }, + "vscode": { + "interpreter": { + "hash": "e5f921d2cbc40cc05b5a24db6ba0e6b62c33b50cc3ec097b0c624e897b5a9797" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/EXERCICES_S2/TP3/cheetah.png b/EXERCICES_S2/TP3/cheetah.png new file mode 100644 index 0000000000000000000000000000000000000000..91706ebddeb7589d32013bcd5d33677900dd6f3a GIT binary patch literal 112089 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

cavkd z!8Vwo=&myDw|c@CI+AC(i1AL$%m{sLd1Pm2Nx|P@f=ck5ROzX(r=T z%efxE36B2)H*BiaXPM?dPjOzNSjq!sNATW#`r-h9%q8ds(o@xK6edklfbH7(T z|FMgV7r4$vE!8B;nyQO>3EIuuQjFZ}*&MhD|V%C%K5p zKJ4r`eR-jOYkeM^Hx@#TAR?)}@^d6p1=Sx9k?Z8_p1dLjh z7fPw%dP-;W@|fo~FE z+iV7?ZetxuL+z-!A*SqLM|J=<*+QM6LTKPu01eN{EkVUl(()v7b$$NvXD5+M>C+E? zd**}Ryn|fwtHIyp@pi$=4sUm5e54(XNT@3gZ?8}5Zq6W=2Tm|E7rWu(%+zjDT8M~XbKyq1WYobTdIQ%mA<%p_Men4{Py7w|7v*W(~2}#dSzt1r@D>q z52lZQ2y)SBtjJy*@7`URlL^29C%J+1`%3g+Llr=AWzqwgWLqX!7i=%=uFkAZ4=qm& z?X1p0y;r+H!~hjm!1k-dIexh(g;ezBTKw|!mq_0GV4UL1uLEK4#j?Mys{`!VgmU71 zfn;!SI59RxPxX%BgD-Lel$*1)8dL5!rl}>nUbWTv!N=x-yVbb}m!Fz)AJcLl(qMOo zYqe&HPX{WLI}5J#6kX~ozSLKCwZHOKSIL#BntQLB)MpwLr-|xIEe7*slSz`rB-wtX z*$qtTvQs9y5HtO_nZcI%@vhCqDZ%z@nE=eygX29CA*7VB56v6!LF77`#y$iuC<*;u zM~S~j*NZ$PJCy%~8mfd)t{iyuAig3J@Bm8mdUbJbVz9HVsREJZQJaLr9Q{%q9%)_}{ft=b%fdw0!d&xW zt;%wIIW47YbKP5OQy?UXz@t(C)=ecx74+j-3WgH^^g0i?hcn-9ua)ZQoiM7woTt(*t6WP%HqLpuAfUq!kj$;dr*_jb4Hn?0^&g zr2*p~x_W=8>J3gKiQn{yz0r(>zRDQ`I1~W=6ukX|oz0D%SF`k{lAT-<;G3Yg2!7zW>}F6ozXKL!SkHZ<<78IT_Fo?-Yd+Ye7_r^ z7T+TyHAh>cm-}E7+?<)dO0c1l2O!rzc!h+Ag=1(^Km@j`{z>H0QB(N*ZRC;*n1GKt zSXl%WF99O6{c3uom&&E1y2*(X%tU&%2c^`hpA<1pO&V)W2EePgDR!8a*h`M#HU>>F z6DAq4oj9MK#$bSgv2jt9a&Ky-F9#pOt_x(;1~M?A&FD}BbyaxVIn@tV;nV zB?D9D@)ldUgVwtmcM|EbUb}o6AK>8vDPJf9BTV6uIsM@+aV#Axksaw{OJt|$^xwUc z3@qh=jj*BvP+M3sJvUy0NOH5jo9h37kfYg{u2P$*k>vJJ^Tt;Sm(FTGyz%(vR|!sc zD7jiKIoFv*ms_)c=q$d`jd<8sqDe|oq~&YRwK(-wtM{YNPhl^Q)!kieF(KxtcpH6a zr};^k{jFrbhsl07Tgt6B2GW)~GiKXi6YYrEzPgE_hS#t9g#2}(U{8G5z$}4=c%S%m^iNj-5Qx8aBxc?{D^*W<^gkBNo~tw)zv7JECxzh6#?>{fy6M z`l}955@)*$huQG;=@$ORxNvs^xF}#I5NxW4^vz{J5GfE#PBgm7d+1s1U!6JgCPV*+ zkV`)D4yp+W_yBTkERT1y39a?8_QuFjdMu~jza8T}+#ESdi5;fI3^qp%wnQ=NygG>i z!}O?u*6;yJWN%{x2NT*>8OFgyvoJx7TCaATZ#&+fg$tonh7w96S&aqrBTUiml1#KE z6z&Mb`=I=o2t=+!Li7vdI!b5Ay}+c<=sBo$F94AX5&(ZMavj3%I{`^&E*998`um3Zk5plUSS-2WgLHd7_Ws0xo)fev8~o6Z!2YA zn>!&6SE@5LhnroN7(olH$SFp`C_7__n>RX8vANPE+Fz7OcSOQ{AeNBVzT{PV=?P)s zlQI*($~BVxGAun&9+Am|H@Sm45WgI3Z;bV^NVR#Dd7;J0&N*Smm1%aUc(aCF2WEv2 zw=Q6`H3r~Q{Y}9O+@xNje-9x5;4UlO$*Vm{i`=+zT3B0!OJn|vOn+r$qVX^-eXbWd z#wi}@tle6fl{~q8s zJi*?9XrCuO*gseq?!nii0&6nO3AtwYO!INmf+`ppL_mp%)%zSfYT*OI5i zEPT|CP-%l})JCfZ=%2M!K5y~pCm)L&=mf34N{tEJ{lS{ceHeu-p9{J-{!RJ9mpXSY zTWMa6bbf@4dc-Qzo1@q+&>W_y?jtncQEpU!d&2Z!$<9ifj5i}WSO;!#c~%QJX~E-J zCa)Vo9oN4eaviG}y{ly;&*ICgQcw#882ShW@&{228X8Ua4RMG~)#*hkE=7q}6&aSb zF!LtV3wn)HAIXn{^X?~wE^^XFS|hp|{D!HKi{0t7+{D@T*w-T&bKLMLRw%31g3{FFIM|}vlA+WpAzqc`___Uj`@G^0FI zef2}0E2nxH+iPF6)%rd^`YELc?)jVFY%YLNQc z`;qI2bV(q=BRO)(C3K-X^<)m~P_p#|X*=$wIbHv~(`GX8P7p$39-vPA{w{xqFWBB# z8SH8;#lbzW*|wMr>&g_Xyckdi+(_kH-{<#`k(w>}PpJ9oEQCgTiC$fTa+3Wuqies{ zxbpqu>pyAT{mRYwJ8a^ui8|$x+UtWDh5UevI#>Va&9bL0}-+p3)V z2*E%cHqA&FqlNV}`AxRR&2ST^JL0D~Q43vRLsYj}PRL4c;!tbU7$aqxlhuZcP7ZyM z9q->xu9NXM0EWch-GWL6hfM|Y7#5191sqlzD4KYTT)HaCpMUUHSA-lIjxu(@kA484 zi|}A$cC3d=M73bjX_&Z9LM+%TU+>$A^XkEQ17Ep#uWpimM}v2FQ_v7Cu{_~lPDn69r0l(`|nNlQAe~O`2k<+L9zk9eS0zxxzsu3jd0^orIh`EUWdUd9^ zwI-`7)4ejy9+P8Vm+zDxuOI7s82S58t>8Jne)|dak#~1&}?A|{ig0FU0XinnQ z7Mj)Onl)G1rjsqE!_Cin8lH_(eOCwI{H0de?xakxC2y&Rgfw_EP)%SD3>qLa`@@{q z-?v!w2ldxZHq#vqFhKN0D1*AS_rc~>@qu7xeSL1EgHn#nbj^rVN2aOM>z;R!UUt@d zbLxCLYkh}FArp+??k2a1_K2CTgr&aBac1;lchnf&bDHh5(i=X@jvS#!Ot6w>y7Jrb zDe-}psbLPIT_hQAO}xJWo;qSMP(5@xILrnL+S%_zuFrmdh+H6#f$DO{wK-4$2Grg< z*xOhf>!S}UhR_!HYEIgAiNWUR|EnnkRu925J5cA7A*ZE$n~aTB6%CR z-ttkCC-UXUb+}KF>%V!hD3vp7Iqd?g$s)O#g%~W6Pjpe6P^mT9-jx})b#U8SxM?L! zyRk^84XMXQ>M{$psQDTIauIV4!|X2V-v98{Oht%*kU38MaRz1~Fgiy3CX zLRaScWP{-KfRw)`6mAJcyC8T;A-Okz>43*A6hBC1fB!L9$$PV1a=<$IT5{ww05%v& zKw&Fryh6X(yLrklw{;QrXd< zCGejDKEi{;cKDaUF&@4PRSR}#fEa$lZWU%ujKxymp`je}NbLp@@ZYp_bR#v9BQ znoXwgiU4xWHQZhzK3F2CEH~*aH5<$jpN zRTYdC1Q6Pa{;tUNNA!!{dE(?43T2l?^5Y*;(1&y#z;;m)Z*6Y6r-@t<+kkLm)%o<1 z0{R=hdg@&JaIT$LhrVX_9*W0!N8}7Q_0>SpT36vXId+L1x7ryoMfaFv`_FYmj4`5S zI@1^X5ku^}eimY3l)SOn$KPHCXz4L>$yI$MhsgEOyT~Pv7Ue28a^!;4ehz;RFx4f3 z^wLB-GX9F-_0Z}BiB=z9mFH9gbHo>TGHc>E_{_H26b3epT9Zhwj%}%pZ$w97OQPG! z)hjcD{GA0ce_bZog9ajGLLrDPLeMlvEJrSRK?n?|rLyBH!JmU%@2Y|v-m;RnVCz_8 zkt)hDUY6CV!3Rmah)LlyV?s&5YC z?vFNTjMnSTk)Dp!sE^euEjMY*6BH(~_ZNs-^No7bI6ZEuYHN{NTct6(!I9G%GS&lM zo1+MJriJ^jB?950eiw*bV3#6@Tqo`A--kHA8gj`FNsmw}w}A#TU(&2MnCU}|a!`{4jXSSKga@x6xt^2AC1JA|pPo6vxwKW3j;DW) zlm%sPGe(JAAWg3OBN1##`Rlyx*~KX?mw|0*EMZbA2f0l%!|b`yj+xPRAfg=TY#Qn& z1Fu)-2M@Mi@piZPyd6-CT(A!f3?3%lhycOI1f?LOzz^?x9EN#E9bI^pvo79Q+M z4mQ{4hPqk!I#f!4n~|aBHC^Si?&df0f*;qXY0>i^Q}Z7-=RB%OR!{U)GS|3q_rmw* zzxnvePrtQ#@_kXPA~oaTK)ynEoozCJLW7vmFWZij!7O)3_K(a=6w&Ce0yKn%L z001=lNkl(|%dIoSBJy~>_lZ9hu!?Z7%Rs-F*#y@#kFL$v7m?)>S_yrn_J;z0gvZ~FW|>Oz0g z@<7@=CwZ8(uSniaH0G1<@w|B|2^_&j&ryu|B4RUF!DnV+_ z?;_VRY(a^-qtPdD91Ii@2M!1R{^r)k%G&bG#@gck&a3^Mjf36wgWb*DtySRt?agK2 zwSd1XZ|#3a5BlUV?dijIx_+%_NG#ajk%|uZd#~2!M+ZA;Wr$336Wyy9zqx<;jH}6Y zc(6)+x*8ewur*&1cu^Xy9buMnga zSfet5*Bh?YoWN?e7u=hwH{D=34`U5S8!g63P9&HfCQdEZ<|h}e&)iMEO$)kCtuh{` z+V?hEP1B;*`q8}AZV7KyBnIdApf<)6=Fca7^kd-((Ocm4t0C7>MG|V2l|Z#op+t5d z6af$T=IUTS6UoMh_SSm=aU!SMsSEpZsL6+1Y|N;z>T7fzYVn_Jk6Y@`o9@n=A1a<5 zD4Ohn&GqNZ52P;-X0CK+&9|pavm=-LQm45YqwQJ4o%yrlME>5Y49ZS|%o!5Y0MP04 zGavl9$aSP8azdg^urDW2knW;D0?A;@q@a2RSkMuHD$ggr^4>wNUur6yK5VD!@BGvq zQ4~=7epdz@y^y*Ke|vd!umgoEaCWfNRJf^i_Xk^@AJcvBRi`|vO}>Foe?ZLB#ip63 zdOm*s_`Anf|HaneYecLH3#rLPJfP=Yrxo00l_q_#-u1TWGePxjF*{q(`1uT zywL*1sjK)|y6yRVk9#@pN=Z)Y{-)Oho}Dd^SLnx?Og23mZm=6`4w~sizFy>l!4XIc ztTZP6U`!*LEaWOCYi7rDFpSjMs)xq4kUXXLm^%YKa<<9rz&i7|855U&?;j?Ujb49HU zW&!9n&dKR#Wsme!zFr=a$z8$0Xb(iLb~f|#&p!I=kqdI-;mJi~MMA!Szb6!c5C(je zONj&T%R@_WVoSi|^ZC#m;-P}&;aHDMb_!dk>(@js`Hd&f*h=_&pkk7A|6pfzabcQ9 zCFf^nI6gBrP&n^xeXA%&wK`p~D)9y>PmNw=)(kU8hHJ$+-bnVijY-#L73*}O)L5nW z+mH|NnF_Fg8=*Gmope9Cyl6)IJkseK*qT zPJr>ZSucNNz!j$P`lA?wu?E`-TJ%DH`Pw{d_w_vR_(%^!LirdFR3Vjs?v;>dqW}`Q zm(Pa$>c}NeD?`X7g`!wc>Qe+74)FFCN4jv$)e+PRpYHm_y=71wPxLOlKnSkE9fG?P z+=Dv=m*Bo+afgsVaF^ijPLRdjCAdQZEbeX#ck}J`7VgXgEY=M(Vm$ ze@51^V*sj`x4I+3Dl})voLOSVuw#D52BkFlhJ#rNw&^%hTZaTIfJUz8v_iL{fhTez zTIJ$%Fg1nsvWA-dWz=E4HZmuj;-rPpT2MA{EiT_UwQvJoAh-7y@pqDA&EzIr6|Zw? z(s>SEcK=GBhbzO)*NnsmM8ELQ90U1CCE^>lye0*!NnU)jH(CrguVY%TA+|>ip9d+E z?q4`H%D7^6Osf}v4vG`^i&IiPMSDUz(@T&&hQ8o(L7p7K^G<18Rrp2nsT94ZzR~|KgqWU@<^4;(f^HTA7;eD9Q6D_v}Al&Up0=J z`jBR9HBi-f#NhSS7-#Lev4;k`y%mk1?Qg@{u|B3_S&eOaA}oX^GNEF47{YOl5XB0N z%MxGFpV~}M4Q~P*r@SW&QGhmlSmg4`nlny1svn!xVOXA3kQXAx?>u`w#A{Gp41@!X zP`ZQjH}d+@-+%&=;PwaJp<1;G_r~W<6G*9GaJM)82G`x|BPbK57Ouq=Do@VQ7BULZ ziraoKdpDbeToyZA`-Ioxvoasb~|Q()lNc|1p5IFC_HZgxi)}f+0^vdMu1Sa4`Fon z7{m$x6iSTK(+cM(Z%+n)keT>ycfc`hLKdCG0 z1=HJpUMHz?8ZIbBh5Aq9`?T}|`O$XSQSIS7@b>jRX@Rh~h_@Te!+w&}^|)0L`S)Y7f>kB?~NK88#yBDswX=a!vw6S-dRf1nJk;FVySHh(=fl;PL|z znaDG>By2S;T9(#Lq=G%KXuONQFGBA;pGG4i)JK)0!A{a3MqNtoV0x@WaLnH&$R36| zzAFSGY(-5C8{K=W7>o@nfA8DG<5@3iQOx7|OSB@@q?Uhva5Ww7+yEX!qkidHP5f!U zMy@&$@CE}({ssA4$5nI55o`!)7KN3vA=rwTJ0?vcoigaE`-=CgH8R3i!b)ocl758L zSw_bS<8_s4vozLBK?e`q2=r2D5_O?-VK985uM&{od!DS?9Qz{e?l)nS0ng8~N~W(b zWxb1~GJWCnPt=tr!0)?6CcZJ1B0oC%*&ji*hig)OSzOlxW#vbGkkmo0<~@0P<75Cw zTiTH)DTVzvmZ(FExvK?ht9E}bi4II!z!k3a73EMU@Qg#^nPeF8D`8S@>Zl>Cih2%P zBJ$0u(h-j+OMw#_G+K1Rd;TZ84l#e}n}S{QwoiC1u=8c8!Ta4dZo*dA;w60^a?T(R zwma%nIhI`{4M4zzCq6v&4y~|zN(ScdYB8V5OCmd&Le`r*0eFI(8?(JaiK`rH-?1Ehqz$~%%gn(tAYW)gm&&K z8-N+OrdrsIqxGF9tGyO7E0jj(sQTuRm&@sF(; z6{JH~^u8$kY78UceEY^z*tMoaXfQ1~dbl=0rXrm+6K7!3 zPu?EYoU_TCtzGAdzbQj3x}hw4ZP;kW53}UmPsFopQ8*sAmOwfesMWK|PrUIGgyEZI z*zU3ye>AmTqBe8zi1d-&C0Cl}`!)6(8bA*W8lX^%2`>Uu2F5}g=;~_6c%7a;>SO;Wtwmt5T?{Rljatjw^10 z#V8Vo;xW*6G}F--G9TZ$0CJQx(or4ib1RCKF35ksTnvwQMa@g_c<;r;^* z3TN{}IdpJ!e>?w=!@*<@m57*y)jE-s(b-q%8djH}QTgy>2bX5aP!<0v@K!&Ial6Ah zQg+s_r(VAPJ>E%VF1@0yh#`pfGc#2Bqhg@zj?joaX0#Lafn+V2=YG{hDl%XYHFxQD za?8x-9d7b1w{U+h4HQPoS(QW9x|YMYne`Sh>!(IgJG7!T)Mn<2FboNfAXde}W}9>? zRCU!10;cUNlOpLYF=oB`D9{rO#~+RVjD>l|+_GpEKX)U0ppV3(QSq8RF<9|u9a&lB7ue zD>5xu>K@_ziD3JFNKV%}VRyHLSbir|$-dF-C=UDVYv@J|lwmfA5BIdf?U|OSCbHM@9}9(& zdw%c2@amuhV$nkT}TBJ>lW7*G>_}9X`i>$|8+Btuf7d_^N-TROKhw6QRGa zfY|MjFKXAs;}nr7G_0I?#$iA%G39~Bc83QT=Ic?-+@e?UC_(q!RlP~{T->#i`a|}& z5h3%4t!to*2&}qz@Hk{VbBFb}i@{pNSpi8UPl9; zfz+UpiYGarJrJ9*H=Byj8Y;6IGs=DL-Fn3YWI8^8rfGDw=lSRE%?E*-ObN(g;Sg<_ zs>9!RmOJZ=Pn6sU6xLy-)^C}%xhIw(m{FSV99vb}VZq<+92ITxW}Zi({s*J>qgeSa z!zu;l4)EPzTr&YDmNn;H3D+nrUk$OIxKWQd86?bc8}O+`(N(rviX&8DD!y7xp_#y{ zU8M|06zR>D5WIjfG^xX26CJzC_G&Wh4l9>SX%H#({UlcZW~C6A{J-BSgg?V>m5f?zq&}_$%@sjTHBI!YF@?w%6{%JNqS_ zcWpWB9NZ~>E!>k*rE1@%p3J(p2DtC|_|iW>iKAdHAir%t#^laAqxe_8wElQ$5?e&% zhXXiA#{f`0qHe5wxB?nK%nQR9qupmij15xBKVf$;g-#^;nvybS^JzT5k{UzQ%?7Hy zKe7mnU2D1WwZ3TI2(O3P(5xr*I#%ztGOC-qKV9h{p*ml`=TO-`Q!}HC{>%HJNQjst z&~4%Vw<^@tCX4c&k&b~9l%9Awqd=#|Mxnh5F5WDfgCJNOEDxGFeQH605%m6f1@9YP zp3cQzTNd!)*ZYfMc&)?W^6iauYA_g$H$l^fsIx9DeBy_JdSu9oMEaMuc`hR*Ut zQ$igngzR$MwV?DX`>QLtSL@%Kk<@jE>|upW_;2mCSCrf$;ek)YSr`og*k_gaW&r~8 zO3~`Ji*l$W7Ic*{x=vm8o6G5Y7q@wHE$Z;mzk;fN=c3okoC-Y-)|`u9d3D~cZg4?_ zq}YROFC^>y&uJtL0*;QhPw?E}g_b*+PnKa(=7tr!!sWm!7VlvEu3?2`qHhzRcfsc_ zp;-;xY?0=faQB-;u7*Ox=%~pxnHQgOgM>VBv$E+d`|F2Gk}E z4xr=BXWZ7fM!jYLU?Zox{_qD*oD91r{1)JbkM{lYf@%b1nJoOC4TXG!15co+zAG(@ z%%oC!!fluZ{m1DW^Ow$~=8i5Q!QoOnMieHc=0E(8Q8Qm#yoTxsy5=Xp72WR4S06Kd z+@j^N3Qgo2n=m;YGdvAZapkdoy0k`$2o?NMgi`Jms6j6lhkQ?tKFL7o?-612&qnwT zV9+JTrjYPQ`AtU6m<7N@hr71%bue?o?#nIIp%LANzplDrCt=FG;nZ?lXge)@(yAX? z_gT_1D8t8b)=Vi4`7u3$9+0_Th3)9dK5~Og|DxeA=;U!Ls5*(2*~_wC=&(J}uDhKO!uGoc+fg;q z>FO5l9L67ZRb+m^g@!1JiW&*IT{*Kw91F-3_fsx>VIB2Y+oMZ(%K2(NmAg}?KDg?` zH_O+}>>%?HH%jKq6yUFt4OPjunEO+7+yBLW{EcWp9*b+ExMxa+*k*FaQmSyzNcJgn zI(cc@e#N@p*66n}?h%Th5J&pG@u8d?n#BVl<3M7^ks_piSm6|}A`O8gDyE#&IQPL3 zw5qPr+nS>dJuE^o*6Y-{%(l#3<>62u7U)lE_L|GOUWw_v5X9-g$UlHDMxCF{pDe}} ztz|2}Xt{UPzrVmUDh$CQ6pEpLb#UV14CN=lqIy#_Gi8;(LIYMnlNX zWgA4YrUK(aMM*pRQIL1yLkdl4)ilA{n~)rC{Ea~Qx#y!WHd^1!SR(JsZIW^m4CTkP zcF4Lx9C|$)D<%Tl`e2I|{CEPzU=-kQ0`gA8u{k)p9vQ|RgK3$+$lY_ep!n*=5j_8m zQTf)5Ti46wK}jjZ_aL4CF?^Q^j(H>iYZigB7-^kVMXT^r+Mjy9AIs_EejS);kJ!%| zfg5c0m&syuAw zP~G<9rNmi3@YBBekru@ecM;5%Fy!_-!>n(GIzVBw^b7fkbbQ5o^~4GX`AwxEOf758 z2g@S)H=i&qL3ec1FT0oLR7hjA)?b*)pw~Mn&WeUvN;)y8oCA~+)$<$I`p&y<41Sr0 zsNYiF`S+hR;%u-JF(?)y0gf;Gk)mRn)HVg0z5ZLC1c%+1gahWv19;!Oe}n&Zz>ng? zQ}1TNag7r@rn}}egmZD`dJkfUS^6f7H?{=xaPhjv&#uT#@^xXzc~HCrNxXDo_I+x) zCiX6qs&3!JB*W5rY+a}NAO9u{k2X^8Sd6Yw*>y^~L-YhbhO|(n^(i?+6#{+s8X>>M z<$y@1o>`}Gt?|nECT&eHAyAXkOk85@n z#1?m%$F`&N2L87pMZJ9rnGYSg^SOZkb_;7wog(JEzHC>e8<{D?gH?QnJbWpm(9((l zG3C}=EU02o2q)y&%`eLKi(wV=9a8f0`PmIF*!RCl4pM~0I^unT}ALkE2#81{M^+g=a(g^S9J zj&xNvcFq`6i{9vG`{lLrrLl&O-QWEzEU=F2zMS_7g}^Q}^ruh8Ccm!8-s^MST>~i& zM}Y0PW_mXVvZ zWtx>>X(g5jUs|_~75g|44jBehX?WGrC%I<940B!hpF0>J zNtIjNQc^%t1YtPVEml*{Ir<+{Gk-Pu^;P^X64QPAeQG@HNGTT0lb|ee%TtHq%bkrP z!_DW6?~}TvBD3kZT1MfqvxT~yQmb*)UIOSZA(e`l`ZLY(N7!X_a>P(m5WBYn z$DAHVibZBSG9V~l0$@+8=uJ8k;!Par=aev~GDd92L1NFMN74%%|5dHZ1Gj`r#u_;w z44U@mq(r)1g|B6>?!D*bOB^6P4PlttBV@kJ=FOitA6U>2-Yt&M4S2Z@6lr

MHC<(6m_5a9OaK;>#)~~fe@EB>l&S>w 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 literal 0 HcmV?d00001 diff --git a/EXERCICES_S2/TP3/test.bmp b/EXERCICES_S2/TP3/test.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a4a6f68d2b96f3048b8f6880e94a098d974f2c2b GIT binary patch literal 120054 zcmeI*+nL)o5Qbs7i0Ele}4V>{QBqh_3iP;^VQj}pN|LskN^pg011#l#sr=-^FxpXWE1%KgCtv% zYRMCLe|Juv1LF%O@J7YYLBUj$m)fGjRdNhc;~!ArN-EgQb-tp)Rb~$&vlmg}N+jE~ zMb1#+DlLie!7otZYCPVY6|Pa?DyNFUsc%u?YB1r1+iOtaDj|%Kkt&H>yDua`z8AVXxswwmEi=|NEDm<0?0R>Uvsy_DED`ipPDz=u&>BLdt zsxtY&%Vwa$RbVhRqfJ7EtD5kmu9=4lS5eK}&NUSku5R-WxnMRbT!mzFJ=6kJxVpZA zcu&`$!c{yu7ZWW*g{zBO2=-_tDqID_b2iRmRJc03h)AEWM}@0Meu}fGpu$!0F2a1M zg$h?;2z?zy5f!e!UPp{ibW!0dhN8n1>ZovaxRC&FEug|x07%;rjG)5R_ENmRwu1^+ z-YvcRH-!pU?|X6m!Wt@Ex#slIyg^jB^6tteDqOjCWfm2#{JOG?3Rg~D8ApXHkFM;a z!j(H$E>Pjhmn$!*aOKFABUHHZ;>s5)T)A-N4i&EKyYh$%SH@jAMTINNuKc3Hm04G= zQQ^v_EAOaqWzbasRJgL{Dh4WCnQ|2d6|U^Kii8SRMqC9$g)0lL;-SKox~q_=aHZ=i zDk@wlx(bX6S6Z%Oqr#PntMI6Bwcb?*RJdB~DhVoFt#p+K6|R=KN`(qnYg}bRg{uXw z5~9M@Y*#r^;cBX@w5V`3&sAnrxSHfDIVxPua0Mz{iMs;TM*`x(W-bV-cLJFi$j<(b zlo!tgWV20M4NHdv(n=5<{17Q`p9u)Yo3j*(iV5VzAT@O{Qa*epAeC^!I{3LrAfX45 zkuM_U(K7*&kh2v*&TRtONQ}>W8z~E(35@5Qssd&z6G)|Ebl9Jd%2Zi48g-teKdpTJ zo@er&NpV$`z#h~7T~F-cD^#VLJh>8r(r3wI+KrE^n*`1Qoj=(noO9Vts>u_&GjaDk zZ+y5qO`r}<-KuoJPE$>n#2(20-E|l(Yp*NCd5Wt-0_{-Rcf=u7oV}20@QI5tY(Ct) zY)YbcU(+FO7UOD{z!;9P-EPd(jJZoS)MPc&@7L_#^@Sl(qwi!}yKwbNKn{dlC0kUQ z=EBvl1ezkNSX{A0{7hQ~aW&~alGDoWYUcINtUc*ZgIL+ruI69-{1e0^$hMl-m28gZ z)y|(7B_YyqQdc6`RTrsV7)M%0R~px>ai*rybguL+Snp&7V7XjrU#<4}>wqP4W#dw9 zbTJ)R7FU+8(^4<9fTeI{?;`DWBn&LRE2~#%wJ#Z9!Cl$DJlow30gLR)!?k(nu?JXK zSAH(cPp1vQV!HBnRo?o&2Nuwk&r9;z^(nAut~_6l=iZONLb>vPG5#lb0gK}*%9X^J zBZ#XQm+?8p=kLcKE{;Br;L1_l)vZ=9G-}ViEAJO@-v9X%qn5S}`*yXRB;sqoGdXtU zH}sayThA}ab|-t>#mH) zr`n$C;Wx%iyRsadjoxf@Q7~rLmD$LQHD;`xmocNRY=&jED}#MmbY(Cm^DS9x(3~r4 z0r~02RHwFFnTp0?Gj>`w~eDu>5=hJkhICh$&wFXslr8RKAb5$nRaiub9;zQSuuHb6@ken$0zwRvjI}F>H zSG(Gt&Fi%ZtUPV0tCfRsRw;qfXE)z@`nIfd)z=@pq!W;?S7y1$)tX^Ar7nTGRb?=h zdsn!sY=vbD6PSI}bXT(npnh)xz5A-ZkIi*8wRMUQCoo*#)YwE<^O~lzTmo{HcE)D8 zn$#|3CnPYTO13$wtxZ7iG)Y&2ZBa@o0jXof zTuC)V9qj}}&X;i|(h5b)Brx8HfUEH)s9-OF!Hz~<4Ia;S!wHPEHsosLVD@@Qpu5L@ zSKUXl(NzL{&33x#JB(dE6X@u=$5qEMY;m4IYx~WvS`T1-lmwdQXmiz6n#JJ~s2`}o zRee!b#!aAdvRYS_2YDi{aGO*#j{{zu0u{Qt! literal 0 HcmV?d00001 diff --git a/TP3.zip b/TP3.zip new file mode 100644 index 0000000000000000000000000000000000000000..7c494637e14292484e4c1564b2dca0a07f43f8c9 GIT binary patch literal 115289 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�&HPIKNvA7>Lyl)SdOj5$f^k-JS%!lTl(fZTZ3 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≤3!PLxDyWRt)Hc9`*iJX103@aafDg9d)C3*%vK< znS8y~=F+8;8}JWlr^o{&(xmXt6bgGcS(jVKyzuHXZ#nq^k&$zb& z(yo48mm(T%Dv-NulKbW;ix=*`8h1k_+4zya3cPYnlKCZ)^7W2x!;wM%olKaU{p;Qy z=^qG}#_-MKD6aCDyl_m3!NXnQrNMs4KB^x`RX?Q2e$uJ(w1OAY_Vs=sUcBCXTM{^d z*rqmU?;A7UjTuRpE7l|7rO5mX)613a$Ni5v2u{vnbsiL+qtc=i1isd&EK(%;9M)i1 zo4Njn78y>kr1sN;kMg`CA}N68!o|Vfxye1vd|n=}n?T}rhACDz+l$Zk@R~p6*XNGP zT!5G{_dOv}LV^U_;Ui=~MFb1_+7l!NYP|2k7-Z|KRK8_hy?Dr#zN*+3=q1U^YGJ!Sw?WwgMt4$TSw(0ZuYh%(io>Q*-u-ipAB#d z{>47G1f16WYepo6>a;>2*?NeCqC>2eb`Px{pA3A^ac#9wkhCgbxBvWuM!xw^#ffg` zTXP(=E=I%7YM5a6G;%xn0#=Pu`@-)AQ;qN$c9!4P&^sl27~px}Bh!c@(`2XprKV>8 zZJVpio#ka0>aWFA-zdEw?8NNN$(`dx&+(CWN=kaiGFd|a4oQl;VgB3hGp2^R2 zG%ZB?*GU43;&5?_VN;PCH;CRQC4i(OV_=C#bf32D@W~XJFINEkZZ2)DibKo{F49G^ za4UpZQS;-N>QbONzrhCC#DggHBD=2YSSUCijs)Bs2S_*!;Z2BfAHdwxiFJ>Ikphi( zR_gPSNK}f@JvMW^;k~4-OvjMb`!1?sz;|K{J_8FAXlr57A%D!C7dP7XZv81tLWSTR zFcl&uhR7ra?AN*99?k9F*_~8jw(xuX5BW^2!FcRwhrO@A0RmSN_1`QJrf1q=>bcny zMoc=eKEIVp43!HryUk6x&K_9_$*{{K3|b~ZsDEPl6+&_igdgBUT(1u#68P=yLVF{1 z%zo*>S%jUt3op;&S~p*D)l?jz)dCX$64TKU5C;mZ9iB8A6iJd#d2D+~bHLeO7Nfcb z8R>df6zR~~>h%$6pG)X)_@MH|?(@^znV@H4oyKoyXS~%%KDa-{ z_k4C(RD@JPjJOy0mF>^SpYf69z0_OB+yJOsfJ0HopY)!*%jPe{;$!#ZEU7@5(W?cSMkHRd_{G?wnPCc>9HDuB zVnuFpvyRIh_NNsQM6m6)v2sCK&#=h{_Z`2AH)c+>hAtja84_phrPj7KwIdgX*|*!L znle1jm3}oMD)<7A40=YO%u{a-;jQU%)wPQnV3(CY)S@!o?Wr#)mrhz-Mt`9rrZ#eY zf2Z*c@m7LjA*m1o*A*!~lIOtQks~}h%V;RzQ?!^;)Eh68ojK>e=oaZ-Tr(X$fY>MiA6uog~3Ti;))6p$L+Iz z?7{Y?)Y@}@74yW|C1%?oP^}Q&M2t6~hxok({5j(eFEhAza*$;3=p_}R*u7#`C=3;)sr|e#Rj9#&X z>k}?1dgEBLt&qW;45OLP!F~>Zd@#Xgmct5NO{nik$Wh=;gMKmR)=0F;!Br7b$=fNU z+u{pmqlj9SPj&C2T!f(L@Q&U3A{IP*8nyiz*yuFKw`V{g))op}v80IT<*s%?nIhCO zo`xYbuG7~D73eS3sD^=o+pTod;2#S0t~pDi(MiIjIUOpO3NbTQ4q+_?ebTOb)pGdQ zn3Y_W6ziAKGGZ@zWT1KG6mpEOVkGS(u@*f)mVT^D58>y&u#d8VEF%1r40zBs=Ug!2 zzn*a#8l!6*>Ln$j1ecde$-4d7?Ddv>(YqL?P*h*5K#*Lp-nZxEY+(@;=$na6o{m+M z4#$Kp9I)mYINJ`xj-YFbrK?)5t_s`%`~jsE&}?PWd|hW)U}<5o7j*qdVE&Gz)etijKA3PSFc#YtoL6z1((@>(}% zjD+o^An!35sHFvL3h$Cpw}-=qAg%f>9>{lTCO77K`3}722|y&2kD3fPVCo6bFRo(o z8cbOX`jHIs?XtKu)g9=eNB-jl$)2;2=guEW8UqX!v1w1)`uN$fvAW7k=*mEDHx#6< zqm7Rj2(H1|B`|Tn0TVsNB0vnGr@q(Dk6iOB&#~3L$mtSJ@jF#!n>Q3uEJ|v-m@~nj z^y%qJoT?=aR}N0daYXJ#JBeaSbgi&mq?^C{khz?-*~i-J_l}nN8vv?i;Z;;wl zS@6Uzul8R*4e%)~a#9|pw+)jzde$RF4cT>x#n+LH0CX<#Chd76HFa^zb4xVbM^WFZ zmFCI!{MNE#!cE>MnIJO^->GBxINE)kOhKK-A-Rl^qe+^mgqf*q6yN^p$(FWPMp(PK zNvHp^t{Rh=*f6dUPSY~U<~mAO0J`dRgRN8C)N-ovW*FHy#2so$hauJx)5;bWyTU|^ zZq<mUSF{P+oNlPtNy&2j?=nO(i;!ZdnwLI-Gi6b(h715!O*uYBT z{vb|#pw!7tM!7h5@9$2why)`Zjyte&$^wkrye{NX(UD|?2TQxGYDTX8J@R3(q2cM3 zaaxdHO{_=^b9M~Cl%gV|1l~OPSH1GdpxYJNCajCJyp&Thh6!nP`+;x)?rstEpFoK@fr%zdG2yni#GRzt9{aN&qjpm|_7a=Av{2dD zQcEXF5|!-()Q7maD@~BosOf?9{w0-5;L zktpWd6ohy)u1kH=Cfb0(C-y-4t@|{;pm+RNs6_wmA*4b< zPsCCVQX?8Y1A`Ue+ow~Ag0=~HBeZdcx3_uYW4{;SKw)H{PkK#p`l_;nB;w3VClGz^ zW)9$G@V&>{5wJabz;d_RZVGheEr9gB5iyUgt-L%xyrAhGqmI#wju0-TaO@=tC$Bx4 zDbx_i^k%bk-jH{fdFP6hB zbCE}+W48Nn>J@k-Lf&9^8!rSfBo?ZQ3b(M|aGL)pFbpejpfq099F zKgoLsP$icU2h!yq{27+`N3WhGp>jz^&LBR0aIHBVW+o7t9UJyM?+L^;(azXd?cy-y z57dr_g_Ex8sm-aa>*g*MKcaY+e{(S=H#z*5<#2@S<+V7Nx%JTd75wTXDQHb?EwTh5zpe(s%Nu*zQH){)@~JT z)qYNcJuzpAMFC}u{cqN@oikW;Rwog&;M3O_om>qi0$=t>WbUW9Dfu5FQ1-klN;de) z)pS&mL0f6zzSZo=;UxqZx$fQTWII6NzeBihnZ&mzhDxS8Yf6fA6=JkYP28uC&UmZO z1JXP)p$~7%aFqeq`&(CjJ#Oa!;?{RAbt2AS+KF}2tWL*W_cQ)}$O$%E=WVR4qgyYW zW6`(n26B)>=;pY^#}Ci0XpTX`c$XB-Ib`j0M<+Q;Eb~SFhC$@1%L+vZPF-EP6S@9z zq8rMf!{GVkO_>zh0!?qvr$YQILJx` zdf{ee-3dSM9Suolay+iI#>&$fmqts3*zxMoJ3z4CtmI@!vV5!ladZvX)$=cem)M&D z5a?wq33*gaE`cioHf2%M&9+|LJmU7jkj)_z26|g|x-06HM=0r?rGHyo88nbD-irNl ztofXG@iaMWMS00vxLieMpCuVUmKwEFC@uV3HmJ!vy$Eh>0nWtZIpoxUOxbEx4K)Yh zfBY=8&qmRUWlFPEJOi0 z=PYN2OJ!TH;}RNX3g%$fmcc5ED<1^|q(Y`^&aFEOa7}~pzZL-9pR^F?)Ka~3QR>7^ zGH9CLXcdm;hC{}d@WHjwF*R3x$vO@RpRehY=&!-@pT9mToFT?iQ_ESCqW9+9mr9Lh zONxb;8o(Sv!ng=28ZE)eRw`DksufSLI+3sIFwOR{7~cED&ktZe2>GU_2g(+;%@K1E zM)|F~#2d?YHclO=?jHPuFC}lF;U$oV3O-tZv`4Gxjn@eBaim!UPu*i0QUO-2XX=Icb-U?PZW!JWDtt^3OAJJA+1VvZ>AvtkLkduOHIgogy(lnWIVac33KhLR#4jo+J;Hov&r(Qv02@}`<`|K_T&P0DmP@e!z2r#l%b zEj@JQt(9{RI=w>}&-V4Z1u7fuVs(02)J2LxK_imljfDSSh+kfzZYZ^Hef?;KgP7@Q@q8sBPD>0-Rmy1)lSaJ&Fl6DF1Vn;0(j7`=yDO1T}a;aYHIuT9VaY~s({ zd|#%U&rzh$ryuU5tM=kjB-$I(u6&boV{SsTh&t9LiET~MFRvfCzH6|~y zZ(hzu#aV>f>N$Upw5$xhYvN~}Fy|aVtRs7#h7P)K+_C7c<|4C%juwHWn{G5vLW zU}wK?%(X!KN9}Ni0iv!qyrI|Eo@ou_94I4nh`XsNpO^D0L#1tYz41==ZWb*TV@ID% z!Id4Ufd@T42Ip@ac*Bdw{iP=(G0KUSAW$}PtP-!f7t%HP>+kRPYV^{i6j}oqoLUR* zoIA^~Ji)av`iBC&_`P2e$IV}fky&0wau%;iuEfLgDRqh=84c&&Vfj8HZ6ylYh#+#trU%^0+>*^0#?)#V(NjLrwNk^f`XLQyWPT+v#Qdh>c9cJ?`S6I;gL%N{+#g zxjQD(H~NDa?x>1N%G)} zkFH*HbW7~y^^3LG!Mge%ONTW^scv431OEkn7GZj36Fo4m$z-UtaD~MF#dg(-KG4zfvd9wpHM#u2?Z%pBjqm^^?98Dm zc$geG+?(*_S!T(tV7y;4T5-J;S>ESsn3Lxs0;V+uEvzV`1zXggk@B8ReAjsT2?+abAdn!9fGwaqL} z_(`tZAfZL088qU~V4fSABI}lL1x}aoaXWI{X#Z^vk-A+Y}}O&H4?7 zsB|LMgzir7&*eJI-HRljYQPmm0tS@81Q1WCr*+d7ZY}>Snc6z<59uxME7z^+?W)`L|)Zj`CN5FWQPc8CUv$EM#+~!;V zWI?h0WXwBC!)UMs{OI(E`sCmtPv2iT>4UO1yCstXgQ>vR#8Mfo-5Dq@%X*(@Y|~pG z_o4TBYYS#-#|xtwGX5$(!6SC93;&s~D-)@A+^$ApE%o35NEO`^ou7$&`UoTz3!!V_HAD2b5@(= zb9S4Jsi?bvdSAcu!PRt?s>U=vkU>m!5wl_W>~?FDLFmrgD)Ya0rb%FCXa_EJ z3D616dDY^io0d>uMoo>a&zloWNk*GLSj$6zpKSJfmgtnT2}u&=mMvt4O)fE5*w_UT zBpj4cnA$dh(0C{LS^r^p<(U00pT0R@x9d4z{EbIP5bS)!uOo&+V{zz+W<#HZe7uUw zc)oY8cI@+N%H`z~iTE-kIp^Zi{Pe=^&-{oHshE*ol-=(*#k9V1HI)6}bOf^u71!;o z7c?8Z@BCXysv7Ql1tVq4!h57232(x6L@BpWov%@>+FB`M`77!4J!ePs7OYds(` zdRpa6Vi$c~y$KeC`&?tr{>F~A*KM<-Ka#hsA^WCdLl=U0y{x8u^wj*`i^7~dY zYUna`3L+D*x6ltk*bXohZUdmvfvtG%#Y8}LHFwykvlC^b?7TVQ_@R@3f{%SyKkKwR zMdeOr$eW{d4fD0?T1DUl*UO5nt3rVr&qI*i+E{if`^f>ik4>bH9{dWkvqxDj=UC00 zDaZsO`k}W%Cv#ZBYtJ*!T5wV*c(KV@1OExPcU)7KvB@Y;fEszYF_=JG*1h91&AF3{ zyHe@jI+Y%VI{J23`A(Aa;uQ&}=BW3FL3E^^;7@4OI9;CqvXW!b8j)@=v!MzV^${O- zYj+o|g@FUM*Pa#9|2l87o;#Cn@bH-iu0~)EbGY5q(Gnm)OiQ~sLQQQdd(fgxGz>~G zuCz(V&AQ8+J55Jzet0ro!~KoX9Qp`Xw+$2v&4*D?xl!Ufew!fK^;CF`>Q3(+XG1 zw8FXR|IrWuuMuJbfvJIfoW`I&`e(w01TcXKB4Y#H+mC#se>2ZNg#0J&iCs5)_Q>pq0*ZVPo?sczQS(0!Hx3_`<{Bwh3Gcqc#pU z1K2kpAtmED;VD1_oxLvpc)z4`S?8De?+s=BPO6nI%nkpBG1awhE3j6q#qsXpj38x! zZucV#PG7pHkP3$8zFuct?daD1kx`3bjU~k2gGAL#KTBxwC{-G}>gahY~A!LiWQ;iie7A&96zuQd}+pZ>W)t3C`GJ8QjoO;L}FRJj8SQQa4N zXUsiXP~qkWlMOcZa{0^7m-*#}W=g=9!R%-W4_4kP)E#tVqp=Izuce4N}vBFOuH?;8tE0H)q7W{28PA1RcvXs=Lz!=W*fsOx&ITfNOMC zyMnRCrX_y2k5)B=K-|Ch`HX4qwM5SKguE_Ro$3xEbZ5q+D<`|%m491 z*6}@eG-Vn7cw=Dd3=S6Gz?NZE64jE*dE@0?ub7;GXx0VK^2VMSTg~+iTW?WCV{2a8 zq|O|ojkI+`o1+Cwa8EnXDqPYbb6Y@D#kHIx6Z&_4VZT&_kd0-=#H`R;v#uoEL`Og} zym*E1TiyEa^1|JV_P^B1rHR9VrLE5;Rc?PlHQ{;7SC3VSc1-4R>p<20D-y1|D~ftL zli=ON20nOJ?NvA)cQcKFHR zm&8Ze9;0KY%?;L!3EhU47Y~<2vC&hdzxY2u^jK%%ZeQ~ZPWo)`LGy#bIZ+X}<))w{ zk@sz{*sVd+@{u04|Akk0W*5t`2(M6p{f&Cf)&#k{`9&}Z6o0isx7D&R>Gv6Z7uH_jA{Fq<{kxARxj0qLK@<6C+DHlk3Y}I49Rv zD?4Z)k7~yO5TH$bEBls)?$JRk2L(H-UmQB$SySk+^XqFwj~vFpz>YFbFCrDiG998?cpEqtbMH zO@ssjGR6l2LIffN`k$*Q@W1a=6j<~nZ4J#$=`9^R?Tl1a;DI0!7cY(fr@MN<0s(`a zf&u~kXZYXXKsxejK309_?BGB^Pm91m(-Hm;Hc(UG&CirBrp_+(Mz#+BLCtTvG!|O; zfBpYJ< Date: Fri, 8 Mar 2024 15:14:38 +0100 Subject: [PATCH 32/41] T1 --- EXERCICES_S2/TP4_Photoshop.ipynb | 368 ++++++++++++++++++ TP3.zip | Bin 115289 -> 0 bytes .../03_structures_iteratives.ipynb | 110 +++++- exercises/TD03_fonctions/test.py | 1 + 4 files changed, 466 insertions(+), 13 deletions(-) create mode 100644 EXERCICES_S2/TP4_Photoshop.ipynb delete mode 100644 TP3.zip create mode 100644 exercises/TD03_fonctions/test.py diff --git a/EXERCICES_S2/TP4_Photoshop.ipynb b/EXERCICES_S2/TP4_Photoshop.ipynb new file mode 100644 index 000000000..59562e1f0 --- /dev/null +++ b/EXERCICES_S2/TP4_Photoshop.ipynb @@ -0,0 +1,368 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Petit Photoshop" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Importer les librairies suivantes :" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tkinter as tk\n", + "import numpy as np\n", + "import PIL as pil\n", + "from PIL import Image\n", + "from PIL import ImageTk \n", + "from tkinter import filedialog\n", + "from tkinter import simpledialog" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter les fonctions `save`et `load`à votre code." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def save(matPix, filename):\n", + " Image.fromarray(matPix).save(filename)\n", + "\n", + "def load(filename):\n", + " return np.array(pil.Image.open(filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter la fonction `charger` qui permet d'afficher une image dans un canevas dans la colonne 1 d'une grid." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "create=True\n", + "nomImgCourante=\"\"\n", + "nomImgDebut = \"\"\n", + "\n", + "def charger(widg):\n", + " global create\n", + " global photo\n", + " global img\n", + " global canvas\n", + " global dessin\n", + " global nomImgCourante\n", + " global nomImgDebut\n", + " filename= filedialog.askopenfile(mode='rb', title='Choose a file')\n", + " img = pil.Image.open(filename)\n", + " nomImgCourante=filename.name\n", + " nomImgDebut = filename.name\n", + " photo = ImageTk.PhotoImage(img)\n", + " if create: \n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " dessin = canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", + " create=False\n", + " \n", + " else:\n", + " canvas.grid_forget()\n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " dessin=canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter la fonction `modify(matrice)` qui permet de modifier une matrice de pixels au sein même d'un canevas créé par la methode `charger()`, et la fonction callback `reaffiche` qui permet de réafficher l'image de départ après lui avoir appliqué des effets." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def modify(matrice):\n", + " global imgModif\n", + " global nomImgCourante\n", + " save(matrice,\"modif.png\")\n", + " imgModif=ImageTk.PhotoImage(file=\"modif.png\")\n", + " canvas.itemconfigure(dessin, image=imgModif)\n", + " canvas['width'] = imgModif.width()\n", + " canvas['height'] = imgModif.height()\n", + " nomImgCourante=\"modif.png\"\n", + "\n", + "def reaffiche():\n", + " global imgDebut\n", + " global nomImgCourante\n", + " if not create :\n", + " imgDebut=ImageTk.PhotoImage(file=nomImgDebut)\n", + " canvas.itemconfigure(dessin, image=imgDebut)\n", + " canvas['width'] = imgDebut.width()\n", + " canvas['height'] = imgDebut.height()\n", + " nomImgCourante = nomImgDebut\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créez une fenêtre tkinter appelée \"Mon Petit Photoshop\", dans laquelle vous mettrez un bouton pour chacune des fonctions de traitement d'image que vous allez écrire. Vous mettrez égalment un bouton pour *charger* une image, un bouton pour *quitter la fenêtre* et un bouton pour *revenir à l'image de départ* en utilisant la fonction callback `reaffiche`. Vous ajouterez également un label contenant votre nom, prénom et numéro d'étudiant. Vous pourrez ajouter un bouton pour sauvegarder l'image, éventuellement sous un nouveau nom. ATTENTION : L'image est placée grâce à la méthode `grid` et elle couvre les colonnes 1 et 2 et les lignes 0,1,2 et 3." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Mise en Page \n", + "1. Vous placerez les boutons pour les fonctions de traitement d'image dans la colonne 0 d'une grid respectivement\n", + " aux lignes 0,1,2\n", + "1. Le bouton `Retour` (pour revenir à l'image de départ) sera placé dans la colonne 0 à l'avant dernière ligne\n", + "1. Le bouton `Charger` sera placé dans la colonne 0 dans la dernière ligne\n", + "1. Le bouton `Quitter` sera placé dans la dernière colonne et la dernière ligne\n", + "1. Le label sera placé juste sous l'image, entre les boutons `Charger` et `Quitter`\n", + " \n", + "Si tout fonctionne, regardez la doc tkinter pour rendre ça un peu plus \"joli\"." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "create=True\n", + "#Fonctions auxiliaires \n", + " \n", + "fenetre = tk.Tk()\n", + "\n", + "#Création des Widgets\n", + "\n", + "\n", + "#Positionnement des Widgets\n", + "\n", + "\n", + "#Lancement de la boucle \n", + "fenetre.mainloop()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modifiez les fonctions du TD précédent pour qu'elles deviennent des fonctions callback qui s'appliquent directement sur l'image dans le canevas. On donne la première comme exemple." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def filtre_vert():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0,mat[i,j,1],0)\n", + " modify(mat)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui permet de transformer une image en couleur en une image en niveau de gris." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def gris():\n", + " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", + " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " # calcul de la teinte de gris du pixel (CIE709)\n", + " modify(mat)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui permet de transformer une image en couleur en une image en noir et blanc." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def noirBlanc():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner une fonction qui multiplie par 4 la définition d'une image (chaque pixel donne un carré de 4 pixels)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def zoom():\n", + " mat=load(nomImgCourante)\n", + " #créer une matrice de largeur et hauteur deux fois plus grande \n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner une fonction qui divise par 4 la définition d'une image. Chaque carré de 4 pixels est remplacé par 1 pixel dont la valeur est la moyenne de ces 4 pixels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def shrink():\n", + " mat=load(nomImgCourante)\n", + " #créer une matrice de largeur et hauteur deux fois plus petite \n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Combiner les fonctions `zoom` et `shrink` pour obtenir un effet poster (effet de perte de résolution)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def poster():\n", + " mat=load(nomImgCourante)\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner une fonction qui effectue une rotation d'une image vers la droite." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def rotate():\n", + " mat=load(nomImgCourante)\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Voici quelques fonctions que vous pouvez implémenter si vous en avez le temps:\n", + "1. modification de la luminosité d'une image (avec un slider pour la sélection)\n", + "1. flou de l'image, chaque pixel est remplacé par la moyenne de ses voisins et de lui-même\n", + "1. bruitage de l'image, chaque pixel est modifié par une valeur aléatoire\n", + "1. implémenter une méthode de dithering pour obtenir une image en noir et blanc plus subtile (au lieu de prendre un seuil\n", + "à 127, on tire aléaoirement la valeur du pixel avec une probabilité qui dépend de sa luminosité)\n", + "1. mode stylo, qui permet avec la souris d'écrire des pixels noirs sur l'image " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.7 ('l1-python')", + "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" + }, + "vscode": { + "interpreter": { + "hash": "7d87edbe593bf1e4e96623606fa487dbb5c6e9299b74648cb83b1cd8ad219f97" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/TP3.zip b/TP3.zip deleted file mode 100644 index 7c494637e14292484e4c1564b2dca0a07f43f8c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115289 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�&HPIKNvA7>Lyl)SdOj5$f^k-JS%!lTl(fZTZ3 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≤3!PLxDyWRt)Hc9`*iJX103@aafDg9d)C3*%vK< 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\n" + ] + } + ], + "source": [ + "print(type(5 + 2.0))" + ] }, { "cell_type": "code", @@ -839,7 +923,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.4" } }, "nbformat": 4, diff --git a/exercises/TD03_fonctions/test.py b/exercises/TD03_fonctions/test.py new file mode 100644 index 000000000..f4b5695d9 --- /dev/null +++ b/exercises/TD03_fonctions/test.py @@ -0,0 +1 @@ +print(3*0.1) \ No newline at end of file From 09e000eca11f85f90f9b9445863deb636002c465 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 8 Mar 2024 15:20:51 +0100 Subject: [PATCH 33/41] AHHH --- EXERCICES_S2/TP4_Photoshop.ipynb | 65 ++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/EXERCICES_S2/TP4_Photoshop.ipynb b/EXERCICES_S2/TP4_Photoshop.ipynb index 59562e1f0..8d55ba524 100644 --- a/EXERCICES_S2/TP4_Photoshop.ipynb +++ b/EXERCICES_S2/TP4_Photoshop.ipynb @@ -154,20 +154,53 @@ "cell_type": "code", "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception in Tkinter callback\n", + "Traceback (most recent call last):\n", + " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 1948, in __call__\n", + " return self.func(*args)\n", + " ^^^^^^^^^^^^^^^^\n", + " File \"C:\\Users\\Sabri\\AppData\\Local\\Temp\\ipykernel_6156\\1297232671.py\", line 10, in \n", + " Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", + " ^^^^^^^^^^^^^^^^\n", + " File \"C:\\Users\\Sabri\\AppData\\Local\\Temp\\ipykernel_6156\\2135464311.py\", line 17, in charger\n", + " photo = ImageTk.PhotoImage(img)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\site-packages\\PIL\\ImageTk.py\", line 127, in __init__\n", + " self.__photo = tkinter.PhotoImage(**kw)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 4129, in __init__\n", + " Image.__init__(self, 'photo', name, cnf, master, **kw)\n", + " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 4062, in __init__\n", + " master = _get_default_root('create image')\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 319, in _get_default_root\n", + " raise RuntimeError(f\"Too early to {what}: no default root window\")\n", + "RuntimeError: Too early to create image: no default root window\n" + ] + } + ], "source": [ "create=True\n", "#Fonctions auxiliaires \n", " \n", "fenetre = tk.Tk()\n", + "fenetre.title(\"Mon Petit Photoshop\")\n", + "fenetre.geometry(\"600x600\")\n", + "placement=tk.Frame(fenetre)\n", + "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", + "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", + "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", + "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", + "Button1.grid(row=0 , column=0)\n", + "Button2.grid(row=1, column=0)\n", + "Button3.grid(row=2, column=0)\n", + "placement.grid()\n", "\n", - "#Création des Widgets\n", - "\n", - "\n", - "#Positionnement des Widgets\n", - "\n", - "\n", - "#Lancement de la boucle \n", "fenetre.mainloop()" ] }, @@ -181,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -203,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -227,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -249,7 +282,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -271,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -293,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -311,7 +344,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -355,7 +388,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.11.4" }, "vscode": { "interpreter": { From 62d099367444fbb35b83c4322a44c0e8ddec281d Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 8 Mar 2024 15:35:46 +0100 Subject: [PATCH 34/41] Yeah id win --- EXERCICES_S2/modif.png | Bin 0 -> 1408 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 EXERCICES_S2/modif.png diff --git a/EXERCICES_S2/modif.png b/EXERCICES_S2/modif.png new file mode 100644 index 0000000000000000000000000000000000000000..1902c3baf1e6854a8ef724a1e83328e520649805 GIT binary patch literal 1408 zcmWlZeN0nl6viulgb!iZjf!j#Wz>;t>*h8!f~f1Ld>9!Yy>0Ckr7*Cy6c)BNOhx7d zvfWONF?8A~N*Pk$dy7|SFAGMIi!~r3OrhFVzz`=$L8B8ESTv&`3qV3+3CUFT3!pORLoAhVI(NqM={Q zKw~?hH{PYjDxe=5$#w~q8tT9cG=_;Bcv}e4@Iv(Xlm+wNkPyyxnk-@lO$35$JAuu?(pUT!$>$&s9zgkvM2?8d zcTwb`5WN(2V7K6I>!Pe=J?uEO{ZjttBFFm6N6=}Q-KU|kr!c$V{bo`NvaQILzgpxN z>PSPUVfIXM9rhGvS6C1k4&nYHDmED8W*!QJaA$lCmJi_%f*Z(h;Ph2#wlrC(@gM4x zEqhPkO~~1d->j}?k4I!j)T`_53MnrA4&I^T21^hKbNate(tfx=Se%L!Gg$b_t3PG@WJlU$U+iwRo^5vW4j`psX0y6?@cf zMe$*#hwLP>ZV_3%n4J{nE$f#Xa5})0$_g@F66PnhE)=I1n>?&J%T>ml-lr4dbf9Sk zE68zKnMj>338zC$S*%&+y2nhE>TsM6Gu5#Ic{Ow4gx!g+qPOaImJ)j+xH+GDA_iZ; zwQH{)I*P9I-FjbjDLx}s4?C~T)S{Ai-3{!iaoq4LWAuidmkl*kIY*6;e?dmR`##%L ziaXCUdz{l#)TEY67%;XqAVrX0>1%VMusFI){{uQcdvtGWO83wU&%(H#O8QjAotTwr zT*7%4^tO9$s%oahd%(i1{oVey${^NH$I-o7e-^j@B>S8%Z*UlXW4w*_(jZFfol95R z?+aGaYqdL+*Hj~BrrpVk)icFvf}4DV*s7rpp*~2L>i6*7HbJY9K4SlRhq8dUWoByH zYQ*Y3%>sh6$P7>vS}3YqD7je#7n~_2I5KM!P>vW#whBld0i*~5+I1L6RR*-X2q;$t zv^Rs`Zf8meE|+};J3J9Ep+cc+IsgtRNFaEH>r{-&8R(;Z^9 zU9}I4f7F4|I9wd0do%ZtZ#G;JiWYi(d~?OnpqZH>ri+7mOLXukMnwq0wWQ>-LXq#8 zMXdH5UJg>-Y%?G=(jpWk4tx)Wf^!bQM=Jn7iw19^XC2_*(Tq@ZkW#Q!g)e63b0z-* zKJdb@tB*begJ9UhH?N;`n;ANH6ml)Iu&TTLop7_^*_TRp(|^1teT5HfuF?tkv+~lU L8OhC(ydVDua7nN^ literal 0 HcmV?d00001 From 3b45473dba972766906b4bac50ae886aba68fac4 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 8 Mar 2024 16:08:08 +0100 Subject: [PATCH 35/41] ok --- EXERCICES_S2/modif.png | Bin 1408 -> 57763 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EXERCICES_S2/modif.png b/EXERCICES_S2/modif.png index 1902c3baf1e6854a8ef724a1e83328e520649805..a81e706d5b7758a22a00e1cdfb66e80e1b4b899f 100644 GIT binary patch literal 57763 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 L8OhC(ydVDua7nN^ From 71cd41589b2bbd233d87885da2f54f46e3e427fe Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 8 Mar 2024 16:24:20 +0100 Subject: [PATCH 36/41] ye --- EXERCICES_S2/modif.png | Bin 57763 -> 6067 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EXERCICES_S2/modif.png b/EXERCICES_S2/modif.png index a81e706d5b7758a22a00e1cdfb66e80e1b4b899f..e30b76788a454b17860dd894705ee3adc423e142 100644 GIT binary patch literal 6067 zcmeI0=Tj4mvc@R~3tdqVrKq5QG^I!l`U;|;5a~*PK|l!*AP^vd1oRbDRGM@`M4FV) z34~r$KqQfpgiwu?5E4ib0s@j;&)m5m?;mhx&d&Tk>@%~oJI~C{&g_eOwztHDPYd($ z@rha8wy@{p?%5#;l^t;GlXFaN0? zTqn{taWEMz^KkykIo6JEfAXThKb`ZeswnDdUKB^1udc+&DbE2-pw-uN-Y*MS0F1Dn z$})A0_Pv}qdOgZrJ6&Wl>zLbF9G?|yXI~~jLZfS?D5*n!uQFibR(5v zEGPYY0v_I$3s8By65{y|46uoHLZnW_s4ktE}7hp?utR7P*RrrjIAIF+{ii? z_r1E$?ogI%{UN#$xzfZx6!BtY9M<0TL!T@@&ij1nrq$#6b6_;oqAFC_F#9*ki*Pa| zU`ZQRkevlNNcsRF)3f*5O3i#fkmH=;@xAUYue#urFtxsNU_9o)@wM>-+CQD3 zlgoK0sitB#ZVf2jEwoHh;q+O_%+&-q9Va<%VRUV)K%m)#1l9)IbDgXV1L)%VmS7C$ zSC415MZp2R@cqRps**`RD61@S*h9Sxp+tkM$*v_;&9{bBW`pU(>d+urljWKBo#|qP zQOd3+p}mdSZxUOaka9tmg?a=RN*^|w3p)q=QQ!ul`M|$x3AIu8Q#PryG0Y^ctOZRa_?e-@z6b$z_R^n>^yA$-<|*Gi*Sr!LaGizoaU$aC{M~BBFAP<8EJ| z06n|^rVqT?r*0P46S3akb63qKPw|XfzqTz8;^@d-3+C$CzCPWLHNm;kpd8lIfZakH z@Ni)T+jqy)L`Li2Ja|72=3|NqpG{xA%y%E2QyrOyg3Rr1ISZwz|g?V);UQVsV7kB!RKYU|LUC$&mR?TWDFFt z+crWmRm(rKMJdmc8iAJdyNU=ib_opDrSd|4ZB?n!LAtf4~MQi)3>kfhN}n7mEE~j``E2eJ>VcN(kv`#_;JP| zW>wttP#Zz0l+u8-ihOO^t3lgGhP<8ZczoPS49FaNT)aY7Wl7RXFdx1xT{ZpFbnF!e zta^2QYjGc9;DnZhJquy|?NdmgVuZF`6)^ovfWRU6Nyfb9FPI`HZx33v@4=%EVO!{}QWR zbso6m_AV-yk0TwV`J zmGZ8J6~_0({M<1%czwpODyQfEN1T4#(Dl%u6Q6ht=wXT~2&LL`)68rB+ z1e_Ls94O1EfLa^xvrz4SGtG?~i}JiI(^lq75A=5+nyRg@r07BQ!m^QRF+V$pXo~P$ zJmz7{7rFfd7z{afs0&Fu0OK~}OFVojNaS%}1I@ol<;cE)^-b^_G;dx0cv)ek^1l6c zo7!v5hvaYbK6%I7=-mJoEZ1swySNQu$}n;a?yoA!&vbdvTmLEH)j6D>(j)x2Zl(lE zFtFZJnV{33q_o_eCNUg=1y)@HYt9Lh-RQ8}RVD0mnntF6$U`AMNF|UKVSG6*uaEZN z`{lY{`%yfzfSq2+mCWHTFB%|d5oJe;*&d&qN&RH4&-_9~S?y`}ZMKg8RV`FU3ms6F znQ%uL@Sdo=8m%7IV$oxVLi%uDONPUuHB)PFNU?-jMm0UpSoOC|(P*RRtkgmg=bw=1 z{`f^<$A8&qA4um!nqK<8zZV zDh^Pa#m~B*V&82ScV$2H>UrzoCIx=N3y~J=SPv$v2df{jy^wQLze8|wscSUCgY7ar z=9@R?*m&4o)WPJ4!0TuIo}BsJ!txg0*{y;+h{|5WzhXQ#BTo)Rel`fJBzH+n54a1=qr-YVMFS5mfTq+>3KBP6B>d|5%w@Fzhxzpfu_ca#e zZSAa7fSos4!v^@v%AymGJZDDmJ7aWcDYx~SZ*uYgOC0c5=@JS|(!DZ*`xGBz;D!V*e>rQIeFsxKR_H~c zKr)6Q=LfRJlOEhek!=WK%dFq{H!Chkb*#%gvZ<@KN!abd8UL2(Q^r6qF(!2~ZH6n@ zoXO~3T0UfU)Hin(cvWVON^K6_uJD~m2L;l+^iJ8}sPN-Q_Rf4HF^2TBiz*UymEv7R zQmr=y|2kM4}&20GwQ>s?d^1 z7im7#G?IJmVuwN@wGo|Vo>iZX-jd`3R$ESAlGnfYtqnI{+CX%yuzR+-T)iF;Et)$L zR7;7j$(pjp%dgOt|Exn9XR`hDbSY>2Edt!#MxVZ0)HZ_-*NIDbdZu-dbPaqb3IUAf zupovVV@s%_<(ZcQAE7vi1Sgkrh6m+4){pAPgpBbG)!fB5uS`P%IvF}uGQx}3cj)i(VeE1s-*ji z9{bMe$*bBrMQ-bGZTEit^4;F&{gkgIeHb*v`7fHMAK@*DgDo1kkUd^9w9?PI3q&}% z^$xGUFBFSZFfPW?ZK$pJepPHQVhw z^{FQ=x-L%b>T}yP*p(0lx5X>)qtTfttb8AX4e3+=9ya9EwnDfzU(Sox08)rX+9i+O zO63Q+FE{vFOE&z#O%+Pv-xL6!)_s#dmn!CWZCNM6@hMwup%Zhteq)a_L`pD4LJ*W` zKFGrs69bR?zk z{|z+A^{U9I2?(w~xy|aCP{QuMJ_y-m*ceXh;r!9VRtGY^;7|61DXvT#&rnaOzH>28 zW#GCmVZqrWTqJ1ENGBiJGwN9e`3Cz-@ps;cQ=^jeTQNm2r@*kS9<0&%9!jVEjA|`O zc0&3&?hJe|>7}%^wL(LodC}1QpT-+m^4BAV&}-@Lf7@*G!SQk4*KJ(4@5>&pbIcNd zl^(U={u_R_t^s?yW(;?X~u=cV{ zJdp4X;W(*M=&jbBj}#Z;__$FAWOd3jUr*b*ytpYgD8Xg@SITRQm`NW@D}Oow7C3;Y z2|T&r4m7^gNT(um1hD3qjj1y7a{k2x`;EGEW;bE@)PWyrY`FivWvK%_^!A1An75kg zAaC9dgQZpwA!zz>_c^MO9@}r20^!)26twr0B=vOZzvkT?gA|#mbo?1!!*|LyG8bhV3iv{9^a~IEPAk}3`laJ+xQWZkvsn!A!c6Kzeuji(kL|f!u!3m zo&k5`mN`UHhcTwF99&veij$(Q&K{XI#(7F55|LGTX(x!8EIHs6n}Bj-e`DzRVM!45 zEGga4odAgXvNV7rO8X{z&4+jsz7>wbPckMip|H%H<%6++=cFqp3l=5=Q%s2bdK?@# zU=O~|2rh%eM`+S_Ty|@dJGaL6=iNUx$@q>PYhhI#05^T0(1#}bfU3MGgjl%H?VNSL z4mfDztY&OO^M(o4E11)DeAQvz;n#g5K|G?F#x?z@suCyl=ipn8e{I$11Kh&H45u$w zx0Rfibiz0Zu5C=}`_{4}2O9Peaq=#R;gMaeBI3R;aB#X{7DTBJ56!tvJmEP4hki2F zjud*a6EAx35Msm>GuMQxjQD z@@<4ecw%eSyw$F}I^kGjyPEIoJ*KA+B90=7fea*-At%-;mKpy zo1dj~JzXM+K&-r3pPy)$hM|rOp$Kh!#0Dwt+AK~8o|A2wdt$QJtq$}`H9Jh#k04GS zhDx;_FO1!I^#x^>fXG;EP`AhIJc&{5%x4{J=xe6nw-C7Nhgqa^g8?8VcUf(TDZ z`e=1Yy(C2YSb4n<*0@3PhNk}{uTC#T^UdCKjppN|K{K`Sa{5T(5k;R*cPHjMn)Bma zDM%c^ zChh`+PdvCHh~}5dU~G~*#Q6E4wIBvLHT;>j<;XLdajYc4KP7Sey=d|??iNA|uL_m! zGK>0EmJNT7dh%lErayJAwNKjubSwp$uN{Us?SJz-&Wy($+y(hNUTOC^6sTpIeL(Ih zLv)@nPIHfLGLL?Juwei7a9$GWd?CJYF1UMY?-PG)(yHo&dk@2D{}G1vv}G0f$T^uE z^;G>HG%~X3rlUQLP2Rhnvmy;Ck_x^&vq1dYX z6Zg~Hdn~r!?u|tV|EzksC?H+*%usSjsCr@7`B8MLdru&REer(2`7_e%Z+gol7)hq= zrAjuQk9Vu5xy>x61nH^^q&fzkf^|)>BWno~Y3}if{Vn(8qW8E&P|by)&2mkv)=WFfb2{yu`wu@^y_%kdl&a5RmQ$0TB_97U`0ZmJ$&Vkd|%%=>}*L^JjM!ipYS?0IoH~?etONtCYhfKk5A>`%zMBRvFtpt zb!^6ErKO{TsDj74*5CB`opBZx7D{8(Oo~xP{okj@sb~;O=M-9&>odiN4OnXFB=II`tWA!z&OS})Z`ENft7bg`!9#~MT)C3krsaHI6U4?UZ}63#;%ZO5OI zYrPbioLe_-ucHJ11z)*((hliz-f`7MIGA8@@6Ws=xkTq`F|n)$@p4ELK0^8N7U#$e z5oUft_(9u$*2%v&j(AnHbl&nL=}+08I0^<~a#Kg^==jvX;FdhRdjnasL{N27V4XMWx;y7;C_)1AC*=J256(C59FqNeX1Kyw&IKQ8po(Uk!;1qUaQnEOT#EV2 z@nMzH%Y-2XUmAJ_Umq6V&hfr3J*NBBt0pu4?b|cucar)?P8oKt^NN8{Qq_M zfAKtQ{l}w%@ZD6ZrMA2%=WMwxLr<^xr&`3zcbnqeI+TZALMg>G_TIb7r&jd*(X2iG zzccSeHb8E{624#jf0TL4?rJSqa$WHmVj>#zO(*i>KpCm!S7mWEf}mQ7Ks zs;?GR>yYWyxKesM{;rUOzV<%uh}+a}3!YfLm*x5;CfNg zULP9JFiX&FqI%B@gJ0}+p<9jW5tg8)uoBh1JCRYyf z3lvF(l9VIwbQf~3nZAeCSmic8L&V%j+FeKN(a8AO^O5n@U)w#{EHU%8+V28F5ryLp zF5WykRMFk1rG~}7?Q1rUehgTmE>T8zcbf05uCAUPtiZg3cX;zA-kYFmV~B;&nC!7w zqV;$e$IDlVUpeT|oI;KZkl)^az>{%7ySUSoYDqUk&|vKRr0e|O>*sunH$U;YJ-H>> z=+FdxY9=2g_QCSn*WjZEnv||M3L0}H&hD5#dsaPRJ7If#dg^Xt!%BsRojN01VcqZm z^Wds8=-KVM|NT62LEf0aC3t7;&eD+o>0I;DN{=63z=Xr!Nj;w&_c4UVTK(aHL%@3J zC+tYF7B|>aD_+VdIe6912(qk^Z{r&tjV3jd|3!2%#bd@a46Q`SWhE%)7<1eWloFSr zHT*O-X)#j_1x-<#D8JlW$QYBgfN8wa5GBWXWPSOY=D!kKs z>Wxj`9i4mz4vlBKnx53`@BCJ1{5|s__MpfS*+Pv!WnjxSy88uHw;7jzVLmgKZ&Z4B zhJLZ`10l%~7L9$s;MV88b`C*NrzG{$A0j$VD5RXk)lrs4aa%{}58Iy@6zi%yjQDx~ zBS!^d?eOA?jMGHa@0zOXQ{QrUr};a{mYox~`e!9l7_rJs)AlD56G@%sVV&lxd6nZE zy+gc~9i}N{rkod)LvP>WQn>wn%dX$BmfYNHedF^d-O%^^#7vIhN>h``6k*0?mVWOD z2_N1tlS{#+4Vlod7wIXwRhNX@TIm5BX@u-G7f1iRBgXW--X0~BghNx~gaOO@cp<8J z2%G8;-7h5F#6P94JY0Ue?-SCVVQrYNeZF2;s+bcuzOi-W87t2~9j%nUd~l|!s)`K7ajNXtd$|s|w&^Z6Dxhxc$ zaYfyN#g>w$kGbXP)~ST0^io{}J8_8}PppM0o?Ty>aSgl3)#qBb&&S*>EAFOQlqTom zqN5g$2~$SxDne03WzO)UMu^1(c)tvZUuZEVLzcUksSHJr<9vQUo8CK}+ z*)D1}B<~QkF^7-Bp18T)k3t{dZZ#vwv#gvj=Fn@N&7)p%t-tbZMy&C^*XU|~jdQq! zX{WpjIQVSMf`biOt#Q5YHua$=usEM7^S`;)(+_Xs`z@KNCz73*e=z=V+wH7OmpuX#io z(YG8hcfFREP8!jvnint6U_bq%`o|AS9CXYN&?jmp8A;y=Qq4OGQb#|GSFp;t@-;>9 zQhd0B^3J~IVsqlLtcLjM9BLk-R|1pHu=o>L$0~{nLjY2Kf)kTCMH5!+@%snELZaP+a`jU395U8bfn& z9Bc8CF==a^mD@f|sV<{~Fe;<^GLL4v0QWd|!w)f7_d|eV&xeDNuq!<=Gh8C7Cj=BZS8z4XA zql|){Wl?ERGYJfiH33T~nZTTjoER$@fk5~+(_o(r&)#N1AykLSi zZ{CnbwB@SDn&8{qTwQ%MA42n9nyyV?@ktY9 z*p0$OyU50ct=@>Df*w@wM2hteSoPwd33RJ_6f=hZ9H6g=F z{}Qtk{ey(k^M~)JHy3$7^TF2h={EXZbr@Fq_NT*nLgDO3hYt6D6oibrS?094N-Kp0 zthJiWvz)|O-QC?Vsko4UQ@7942000*Zn;h_JKNdWon85^`NK5JL*$QdWV;`E{%1-W zCIiRLQSi`R6qvj^GthW>2BIiA64`RY;wZTXDFfTv+rMq9gM))%ZJK9i?Q7^h;)Xm~ z_W>?G??`}&j)Gh|UdSBYx9lvO3VSzZ!xFyWD0u1H+`S0st>L8CV!^qNpPzqKVM(s% z6`cpj0`x^@To|J?Si$Ilt$TY;rQ;w#z{Iq#;pF5Dk*4$DU9ekz-0VVrKm8_W?n-54 z`L*d@^y}}1gyBveZ|k42)@NT~yzWW=C`zfIdRD%v`9<26{_qM_(@gXU?JxP6uftBb z_0xm+S}xtDrbl6IWwRycKG#R1tgUbNO%+wm8Y>*Tko{+6{se7gD>F65HE<3{+AkdN zrFy%t6nSlp%RLsSSSNIM)^!(wOvo{i8#8%;Q$Asm-mHx=HpC15?LZGFZ}yub@B4-P=EbjIY? zV1GYSJG@Te*x#L#E!TR{f&@0CZ|+B-d?mdBE~T>Hdo^qrW;GUFEKXCQ2X9hBjF0jQ`;^={K5* z-AkE$`rib3A>~PQ_RD#v-4R+5Xr^D868pw($Y`pX3IYb5NdLZ8V5a9HE(k3*i(!S zZA;`-#H=3Uvw<-z$!%|( z_H*-2l2WgT4ue=7IGWaZQzrbzt3EV5q2irJ#wuY>w? zreT)2@=Z_Q1b72bZ0+>QS4YRF_*1U+*M|iKo}$zxFM3Hati#mfUb> zjV&intI6(cZL)YrX)pDXlaP5F`YIgHI^z=E!uVdauHUV#tur&QtS=(q@bs867{Fpe zUF)-B(ZQMHNm?qcHRebe(9PF|0SDY6L9x!5gE9(cjrbS7IoJANg1}b)KL47RHIrKT zzxw+l+vj)Byy5JP+4$^r!oeg1PK5@4Wv?o@bBOUD=ID}T5HAV}%-j|WgdB^{(! zwF5O~S!rD}3ClZef43hH4V2a5UhVX@3_Y@SAw2uw%taWeL)Rj=LD}q%Tm3Z1d#hq5od)!FrJ05UmiHO} zQ~^tYC6Z_0N$QulUX*YZPBr8DX8rf@u(cJ5tfm z>}+kpgkuXQ3X}P_vf?97lNS3RD5`ihE}N=%-)zwiHnkwB&iDf&IGZO{UNBX)f&6L+ zRLw2d1L(*~nkdh7H9qF&vxKx0;-Cv{F+?QvflfMR!PU%FxW7;z4H$Ir1z4c7^9&5c82xC`rmpDFZ0?PQ9BP1p&L0k&^CW$W$y{>NM&wM!jgSsleZ8OV zb3E}X-3PEBAnjclX5xY|o2-#lK(upnbE~UXqSRiZY49Rg!GB0d8|`Xmcb=H{TkveE z^(Zo6H(*EDcjYmZsPA?Zif>GIn)KZY5Xqq%l^Dwx>U>ggt&3SZrr1BMu# z3`gP{;Z%Ss00NCG#y85Dpdn37eJLo&P-iBMkP0+|HvXi_9LDs}ic*f|h}B2G0^Pz* zo1g08nMg}O@0w=;CJ8bC`l*=&+<4}lHl?ER(Tr>L;2~{g=6a{7ZX-7bjBQHPYEsb6rM0pJKfu>AV~Ed_ccOgH9rhZAhPr{L?N!}iC6GYrzSOCNR(V)C@leo=>OaS-jo5L z%5Z4dNnckRRvUtL@J@2>`sza3A>mYG+xXo01uw%ruK}baP!lXG4LA}XC-u+Fq!9!R zAoV*rJMTx|oJK!<_^_|9uh*htcBk9CJVn3(%cl(M#DpU;Y@|q+?d~(ygv_sl3xg{M zQF2*hHkfp6zyPR@JsW>{>br_6>*&0)w1l%9*gChcKrbazu73%X)791W@7D3?=;-nB zF)TAQ@iTArcR>Vo#&~AIop;AD(1gixx)z;iscR-x==0YI(zr!=#eXQxM<23u#m$cC zZw_I$F1_rLPY?Z!QKipLighR4f1h%W11F^Y7Gh#!W4D@>O>PmT)lS=AN{dqChqOCl ze^Jfb?1Ub><$5ugDspgeuzH|zTButX!#}yj9}N%P5a(MfeggNz(9Tz!H$dj^%7!*LyksDHXZ+iiA0Hn+$#YR^31Q)i$t{VCiJ>0SlmRBcWacz9 zKo)?vSoUnaox1cm)t1M%OWlTT_gCZ7Uh`7&r3{#t11N@mGJA71D?o`0gXG{0xZ8%c zAXSt1**+A;?_wj+@qDrOUX`vn*mZ3PWD0ex5O~0Ipw%(O_pTfyD8BUd6(Q8xY1hzMUj``Cl3Jl3Z*r=Tgs{=DlX#49lx4TZ&hvA}1tOovjx-&y>Ed*%TL%@2 zwjUh4!9&+2M!%W+H;_WS?_SLH3qZsjsRsP=$by0>xfi0;@pboZ{bX!8ZwAgRl1UCswd_L}!~AG_2$v ze|}v(J?OL0df+iG!mw+w&s5iN_$MbPVcN&5i3^E|>FAJr&n_r{ve|6Ey1H_%`_i}k za~b3;Wd(CS|LmoHz^ z)1&1cP$H!aSke-NcADD)ef+(1VqlrwB}hC6P~<5 zXAUg7g}vHb>l{t%=g;Yg!anxBtlhC_(ySMX?{%qvrlTX&GG#BI24Zk5YHOD~Q+%rG zL+WUw;@{F4F$0!vuCAn{q@!z9-HQf>hJPm~AEfEGG|LH?cO+ZU%(zHkV$Dx zLjx#4earh{2n+6 zu5m;}1OROpVO$4)Z!~YThhTVoQGLZggoz&b>u{=M}#NKYPTvul-V= z;Td^sG9guL>Dr@=2_1xsNs4z0t$IjE2$UGnOQ2Q*mXC?T{FR^lTWAyf!rUVrfoe&w z70--ZEiI2zv};+pcI5f4>&G<5=YM;9 zU`gymWXt1Mv=sYOQ^w-yrbb3yXZy=*Yb;|}&9g)8SZFAKT0n$j>}Ywz@;-dV%{L=4 z#!}~1<9&g4cTtW6#dN>xGl|P~2~fX;s6Jer+?pLwfsKt~(cMq}uqPqByu4(9Fo1n< zK-PRJn>C`Y1LPkzzqIMRKr_F8U;sE&wD>tjvW_4XQ$gY|2^|zIayC2+vGyf3Rfm-X zRHlTu8Lyp2N5LuknxUZ~HC0vp4>BHH#n01;gjvEX>g!X6R@N#X48N|KB=C@TW~rKP z^0`k!ELvpo@Ez&S&dxz5c7urJ`!P zc7)+fBAZcHs?Pke55yd8c2XJ%Ut@Ms%tV0w7&XK1v~_k6nL)2=CINR#Ac+tkH)Jwj z{>Zg9d!jBU)e4Bae)^MzS+X<6mke_$i?_n578a|*En7eVi*+O16zxI;K(4T;lAS7M z#=1l=9iOzX8UOv;@uwv2p=gD6t+p=SnHeZblDGBiIM=f`*C#aIyRATj7>ItJ8t#XbG?lvjzApaG zoUWaR0Pw1oE?%r#xcWSBoH-mt_y7=U=i(lmhlgruU((V*e6hE+mA7W-BSGfednIva zO+Si;5!=qzy)Eh1uAuR|+*|Ah0*BWl@J=Ud#9tpI)|#4{ovAu4jzo~7*}zTF1j?+X zrN#a_v5zlFIZe##(}1M_KR<@wE@gNoFD35v;q|q6*+&BDQNpKL8sh19!=4g+SU);H z7p_8gPBJO&=AWxl%h5C`6(EfuJahI3mF7tTuF~x%@F=FMfq4_xrPnNW+3&D%)_lU(yjzOah zrPQa+!E=$Fh~KZyn28tMIA|W}5i?J7b`oQ7fA{&=3j zUzIT^Ch8s+9f*nWlR3gnV$y)F`Y2_fjW)++!@2J77QaX)Vy)+x{W?6TC9IXNaSS$Q zm*`1G%+LyUu=Gb3KuV=Rca&9Bq`bSItEj0VGH|Ur4cbN+gT8Y8%!i@??8QtB06Sdu zA58IJ>3Kjb;~NA0{l7NeGW$ZZW_&};@7fsSo#{W#s4d3vKHF0-m4|~KqG^_uXYlO- zD;JJ|&&ZR+@I1rx<0>WT)bHPy~!kTfE=eO@{Pek1rNn0j58m4ptBR+T@+=X94&%t^f$ zh7CyaqSOyxEvZ3IAi=sL-fCI-h=XHrV1SVblPZauCeecJdOS2(#bj*e(lBc+p$x;l z5V0mhPuSExg{Z82?CK>*h0cEW#Tf4+D!i;JSw(C+8=jCkf~N`&iaq3uh;%STo3Q>9LZW zn+g4avqQnSayBsmkWE#T+SJ%Mdjy=3=Gkb|Ih(~j!Fmmw9%Kuv_Rf#y4A^VZD`gqO!v;R@d2nO}uSqU2a8I~MoAx+)w4YvE2e zSQ0Qo07{lquqOPhd^H57=pbHRc)BtZSWbzbK7C3|G&pH_UV;6L!%C$_$zgqKM|;dp zl)Bvwv@xE~^fP;B-mhQ3&QQ0qw0w^%S6**e{N1n^^p~^-Z6_p0i?>qOAM>f2a2yp^ z2MWxN!(`}*v2qaBpdOSxafK<3T=4Bcaza8(OiWyS`{V+MBPjQ$?9zt++>i=KYM;dQ zgni)ufLQx@eTO!#TYem`K@>~S|0VbgCZ&m5Ax}!QS*0jYO&X}7<~)RxkMjY>&N zgVNZWnVH$#WbZ?@vi0zw*tIX(P%Qkxew1=NC-Rzq&HkkyK-T>;@4UP`fI@IM>g(%a z^!9N!Urz7%3h?n&H#B%}{C-41xpd&c^4DPrH{TO+lj8k*l4c;sFTpyZ!0i%~?oU;n z@%Cc01a!0vb&MJj$|y@qOZjUS9GJ>SM_@>T=(sb}*tdsw^reb9eMrLdFm$1Pety3B zvai`H`Fm|G^KCHg)CsRqGvCG8dEv+tx;v;?*E=^?&8EI*FWE_r3=9;Q;)C1)xJ}y! z`Vg46@G)*>%CwxM4CIc{9w1fpkxJKvk;vUu$Qlt85vi}Og@3naA@_PT&LkyK_{Le8 z+uP&$qvoW^tq0aKHc1Hu(3W%(J#PO~TDXs>eg zEF%+_@!yz&Ae-3N=)Mv7bF*tE#5P$v5`0)>w_kRxL z(cQhu`K&}`yLay5=QFz%Fk`I{Sml2Cgz=FhA_J@pe)K!`n+j1VdOZYkK;bA*G(4-kGGy;re<3_~~+4E_tS&KKonbHS6^s-XItG zUrL>T`-+AEYT9`7^%1mUC{BI-TCbDs^>rI)d6*Ad?hC_0Dl z(Bt3_)~*^bgJNmS0lM3N)YP{u8nh)iUi)+_MqK3CcaaW>O^(*rS&>!QNx}DE|8I4i zHlNBz^5I8!=?wL(5e)RekH4g&q2V$Km)2l zEc;vu2`5&JFb||u)2nqo04T_1{+Y~s?q7)R_Zc1|0UxWCmLcV;3nu6iS0AIzV7#aB zBAN3AFIMQq#YHr=ScN`2l!NxRQ8DSWmtf73M!X9JfwVEx8kI}!luJSae?wDe43w%p z_gzJJJm4jUb;z^8Y0VkmX!JN>nqpHyNSSGqheVhv zi2XCsVc-qOzcyU!Z*>>z)2?4+o; zT;Dyum9ln+NpP#3&kuARA{TNTW-(*wgh8W<=-ijM?!IA8Pz0#wcjD$()7bbZ@VPFa zW{CeF(}v2>mks3)8@X@?Dk&Lw{dW=jK&j;6bziW;VTd3FyZ^nE%vTxe@_Fzf5ET+# z^Nz!<_oBO5zU&FNs{gOi0!AB3myi$@1+St=DWVfdgnaDwOd~*OWX{?+P+u!LC27Ah z|AdA`bG>`_hXn+CfB*ii=69}zHN$(Jo}Rw5y=`J_jDrrc2?>GuC}z=mngP2@I}*u5yV9`uMVh?XR{qaz}I8+9wO)l3pW zG$szZKwS56R1gS)8C46(CVR8T|iB6MMVLi|HFoGVhXe!XDk<;u%?V&+lFn(FGej*dugAZP*n z<>Gj2(*F~qVYK#+27|$FccrQRNqhJP#!Z{KYJJWOuZD=Jd{On9F%gNVQHUFJG z4obVDU_Yj-uP=2(CrF*a1nj^7t!Ju0i4snQY3eBW{6*j|0v1P6dpo;Ulq{oqZC0QC z-iJVdC9T2COCN$#a?}QLubuQ~Qoa`OE%Fj-JyNRV4$K<@T|55!IQ=75yh+M2AN7rm zJ9c7F99tc&dbP5bs9i3tcoqHQ2P}gLc14|5@j?QbOHE22VCUSbmT-y*enZkDL;WjW z&zNSYKW$h1J0Z;J=$R)R=yyO-)^1dKc?HG5QWj8|HEHHsBupS5UrVHb5h?*;HJ(b+X8^ z^@IK(>)r3L@b$g!in`C`5=8Jzz)5F+BCd=;f+&F)>kieu&Zj>)87?-3rPmCL zhj~C`d+_?vzXj$w3lkF)-<`&jG*J)wAotz5*3nTS&VP`yglT8X#p;%?4Kfc998axP z(_lnLW}*|R>0CmP>P!ON=iEMDLtIZUKtSn3w><%Jjb+b)U4yc{xw+ZeitNQn6sBD` z25LB7$Q}#Gqj0o5J(Ic6#)$R3adiFf1R`~Hc0zdZ@(0d872?_OL1apCzH zAwzFw@~eymZ;k?t6gY<24si|CynVq0;FeQpNveWs#r{P*aT6qaaEe-3=z_Wz0Ss28 zMlA{_DEjQS-tAeOUuH2Fosl8JQd7Zb-2vk;k<-*!D|~PiE2P~_Sd+MQ=Y*4kW7G}P zjch&@WGR)TWezqi3ts=#T1z6eVG0#QOC21;r&%MLn?*R={xO7;sMK+U$RjcgL@cBc z(8pfB41U29D_;Z`2!@8h(2SA!vu-S*!TM;JpxSCBJ0XBgNJJ!XLFDmc)S`E67IvU9 z0eK>v#G+eO2CRj%78?=Ii7~KShJm(F=Ra1*U|XY8yn6UrR1YMZ7y<1 zGa*fUPD+v*2{OcW5-8CsaDrfqQ0kyz@olrj3U2vTq`Lu@Xg_1Vkkt=TL=?{r*~XLtNyf1yPkFZITQyG5QLW+=%QZTr?O^98?fs1N8Rx!mX8bQ4e5c8O%RH`J-A<5*6g*3zj2!YQRN~ zb_TK@pbr+f>^?0VqvxL|zN0EVUpQeqQ}5;g8tleV8#QxcpM{CV2TAP? zGTUc#GPDGe^#Szg+$_5}xz@wWDDNceVg4$rrHMYLC3ix0qA}wVvTQWD>uAkO`BgSU zJ+zIg%wM$8O0{jT93l7xEHIK9fJg5)%Jym*bSZ`QM@KaQDH|IHJy%O0;QFw6z1)`w zuf~$tcji4~Svd`2zR-&it3w#0NO&BH;FDSZ=t5`2mQB1`5ZkA3**O)TC)y)^opvv| ztw&}&-amB3xvpmsls;nfFM{SK#{9~XDh@x|Mgk|Dd!B=)m8yDob98Y})c2D7!=Z!U zg%OvC4a#oArmKjjqj8z6L-qsiAM5|kynK4>kl1IZf9RX6&3ZIBdrf-GM7KIKL(Ou3 zi&Fb`paYc!O9N2Cy)d+zpYyim`kMK~zofFF^;}w!$}m;ZTcwWievMi2I@e9n+?;m9 z_QT|&L#wu9=KnaU&j?~w?N{AGjVkE0&@R-O{l&Z*XCNa)3QH@PWy>!jAW&0Y4q9h| zJj1Xjw8f&fRa4$-M?5ace2)_ltCC`Uv%@fdQQLhcN@ohOXi z+NI-+d$>g^uDW|Tz$;3?ut6O~jcl8q7eWh^y2k9b7#lk@*b-!sBoa^G#cjouK7yKe zblmMTy@u-sgM)*=ZTLbT==z*~_x7)dwDfx0)L;LFLGeO>`up&5Kc;c2>PlBv7kFCh z)3EZ;-8Yd7$HK!W!7t|YJ5%b33iS@)z8bnYlQ;nf+5Y5qz~3CEUu!`@dwq)K-*|#v zIBid+9`>WD)BO4RFNrIJ1oE;Ree7h714yEYii|%k$_QBSHIPPmaWPc{?wUJI2&>~*8=HSmTAeu0O%K5fp-C&= zn5pG$FhQ7!GYRTyYuz_~7X!G`XP4XV+NbYo04@qDVv9k!eh1&&>pAZE1orbFHXaP! zJe?ig2h8zhcbYXz$H5z3JMdTk$)ru3Gh(IgpBJsCqci2kPWnJ?z8~Zn{|%z-_#8Qo zxiv%{K*z6x-o%?vD`f2nIF&V($yE#CyMOFN8+Nnd)W)%RjP)Z6E~M!-pOcs~I3FU% z;at+I$Kw2X?kxS?tSd2c+lg2G1FSNb@-~Cg4m0L_KMNTbnab$bUK|AkLul!I>E&yI z=)?{JwBMQ7<*jTe_P63_Y0c!;_U5K~31+Z#k7~>@N*r@|Ko8{+^01ntn7M11hT&VG zd$j|AunEgWKR=-*aKAj|j!y0d`)akjqfilN+s0#$X!EFKq8S%M1IOovy(m9F-}L5u z9Dv2z_Tu6Tf^Eed$TUKd9(E!-z^-}rW)X^bf4R?$>-20T{ldG+MOciFPluTpq&r;3 zD)Zh?dV{?{6g)l857!XNOj!l%Taz^-LSM^YKr6MZ1VI{)p5rTY?WYg#epHqSt(dU= z#Qy=zL&cnmhT9)-R3VzQek5GI1ooJtKdPZqrp*s_;!dvuevq&LujxQuBL|O)_oO?T zMkI9*up}2{6j2272iN*%9c?eO*xy2wDU1egZ!Q6p=6Li78ULQnva=BF^WThhVYa=N zdc$Y(lwf>YEOLL1?AOZ8%M8vM5y-@+Lc%zaoK z&?!H&;3BC>V)=zrf-L>d#-qUXS>dNAc!>-_fByc>bV0onxrjv>#r|@xPTugPwrqf0 z_|pV}0lq^$LbnH!OxMfJheFr$_t&?M3^Eii(2x2}t_M zt0y{Re%C90_Pms^0$_}R)n0-CKV-FkVPOG|N1oq#9^?g75LU^kQ^6!2uC8*7*ybN* zcZOCDf~ArF(Om>BqWnESJmhs3WejkwSFt{WFpPl1%;A|g&x^QhgCtHIbW};+=4C`Jb zI@cjyj^J!^Kig*vV~F`qfTI4sIaHc7`R*@LFo{6h6NQ@`)(1>Q{;5Ol40gzLmZ74( z#H-ZL-$EFO2HQgJm53+{{eP#gWrPn|Ax|L4G5p)3;EPxg*Qv{HH(ck{4#-Z-jW{E? zSgey={am4yuWkEda9w|#crl7#q{YU9ajp$xPoFv)k63PZgjg7&35_OsWC0|y`z7mQ z549f$&%`N^vppseC0l9Cj%=mO_!01p9pzI;G{hj(nMHlhiR0d6jhtQ{41qq%Ht~4s z&UVXcbIH^GV2aYX$kbvlP&YEAB8Tn4@T#f#{#~B}yj6&-059sNnECVPbh7zs5?X<` z_{{}q9$=J(XAbYmYIQ=3zgYoE7UGe&aTy5ZM38aL9YGR8o~_85NI_8Cxo8IN=~g~5 zzaP;Fu7hnP5(O+NdxsV8kJ?&t3^WiMKtt5i)zufSCF!JnDmzajUprz2DKzkP!ODG2 z$95lMBBRgnKPoD&KnLJ|mX>n5Qw+~O@nQAjb1E>^HJYd`WC71}aM*!S^y}h(iC1j& zK%j!^98RG!V(vdw^WHc*`t#FSOYkTm@=U3vwS_DlR?+pzM;3JS#h!t5PZ_y8r8}uriy$AD ztqafRH?7~aYt6o4f=60i&G((dx`-fiaw|YjQ6`}o`@$6C`H09}$iGk)QL#RbH1_wB zWmgb?iMV*4Q4B`e>mRDf9_6`xZwd;+ZSlT>zXb{(FuRI`Tx(_7dE_?Zco{5u_CnR_ zS4#90($SBSW1l<|BeCS9OgFQGF_4ltd?mDa?K8^U2e0oZX zk+HG1&e8432dCD=lJTsme_67+yxbum5-F$=Hib8Y;a^5L_k+tn~uD zlemW!45wjYJt!(iGmP=&Sjr@$qf*D-;hI*}E8wKY;o!T2m%&N5=Fep&35+t`dmodK ze#{@FNIt$hk3-e*I7)_DWZ`N{oW@IUm7=FTnC9~N)S|DSKYwm*t$-o*mP9!O4YDwg zpZdbDUcbf`2ILT+&GJT!f?d+>>wZ~tGrlKnU+kz<`%n-A<{QRTRV|7+y0Sl^pFu^t z8`wHEMdh5!kjAd6Q2Oq$g#w3!lsl=M!v@D0&6JJ+gWxo#55#KjH?-t9ARr@nRD|2O z=Z2q}aGRs!q@9bDp-TYZ+nKJfsjY>GPUy$ytY|3jj5!3v#BiUhV@Syj#dbM$B0n&Y zfnd#=6bt#9a~%dg9h_eB6T#lYKl3dz>EL>{R<@r>60Igjm4`> zCH)KDCj+iW&X3N6#J}o#p3M5)T!rA%q@|?^rw#(t0j8!w0wg>d%zx--$T#o;$H%U4 z;a@_+@A^_G_OTg|9?%=vjZ+37ppvZ2M2G}`bpVk4a4R2VB5i_xLhO<{T8rM;*m&tH zUa&OtjYcRM$A7C@c<)fb>ib5=&dK=zySEvu@oTS8|9Ng3bVo>qHR)rtT3eUv)6zpg zUk5Dq)ncQX82(0|3;tA8h#aI3J^27)k1;NKrXwr5fq~#(S?s+6K9#^Z z%W;t$y01N~c6kVeJOun*hh_^E1cZ_UrNSe>+J5z#V(KB&ypqOPtyj&vhwJoL;!Irg z9+kYmxpH~t=^%1^-!i%UxAls@qi=dYD|v+&`2|^InkQ%6ljrA#E1D2By+vZ|2mp@P z7dw4rb%?cFwniZ*ZS`5aK@`ImL^XL+z7&9oSAw&m{(5=qLiuF*#mY~}jw35wh@C^^ofuS&opKbQi4AIx3* znFdT0RKH>OH0$wq`0pCq!nwMlq%rX5d9uK0*iRf1zldB4n4(J`x_1gVhnVT?;R0Vr z#_#cQ1MaVB_BCFhRlj|k;CJU;rhXqi_+4Q#0UhDYaAgnz1s13#P2OO3lQXtl6H9|6 zM3_ov8}I`)ra-15=v^&m1QFoZ9@BqqaTH1-vT*kzO73G-Yu?Lln!-<#(b=DO-!WjQ zq8{0njw`*3l=-|YpC>#eKxs^AnX|}jg^h!t zh-Q-+;izXhV50JJI;DP&MC_6K(%}%)shvnxP1JE2LwymG)1Y&3{Iupq&xqGI;wIs4 zFhPKoAH;Ymqnx#|=&X#kPA=X_e!abrS8aN^K<3hd9Ik+q(Ei26e;Bh0gM*Fz-EI8W z;Om?!X?qi>h{l+Y;vve!$Yr^j*1edqP+wQ45M|2W8s~)JBUyxI5G*bZSATg1LOnW% zf5N5q{(c-Mm1@J_10X?xt+bUM-;A8ppTxi|2l(Rz3-#bR5D*o+wKamAs~R06YFnY2 z_ZWm@0fDD_QMTO%`udXEYOd|-j7U?#=I9%g%s$rEYoIC_6S>gUJ~KN5Eb#G-e|RVT zfr`$wydwrFz@irrUH=D~kLc%mw;f1TwS3Bc(Yob&;@Jq8>o&%rV7z()#qaq(n4m-a z5>qz)6e3}gf($wy@^fNNAI*ZLF@CbM;}3rBwFt<@e-{UNk8qTOG_T%eXZUDe$6GE> zvCReWNX!OquWS2W){faob?4lCcLR}k zaUTm>$&K(vVaTp#xe+%a-;pA>646fez1lEsm%1yy((=&cy&`b==Y&d_)&ZgAGgoYt z*0LJV#QjRXo91i#v%^Sz6zPuY&f&nC*hjaHf0$9gTJfy~ zB|H;y*v<|PobkN`mvApI{pNB-vHnJD9F_TmE+D+pKmb65s26xz`PU z&)_Kt10WCFl3m~sc6P-Rw)>etqzcER@r9F=+qggd5_0X(aW~nHb$dKVl&DX*Fjl2u zud2cslwa_ZJ3z#Lq^YV3O($7W0g?3O@aM=P)*bX(!X@%?By41>PlrL;<=U*=$L3yM zDOmr7{2!LiI;`sK>*6$*zQCoCZjf$~xO7S?-5?+;ASfW+-AYP#Nr+M^-6!>uJ}*bxliQ1e6PhK2^#|BfcaOWV0LH6ZB#;UB?Fhjb$;7SamwwvLX+ z-rn9G9=0v!P(==MaWi1OEXdA2hjoM)seIA2P$+Q3=IdhX2fm)*Z&JbEKox~T34E#e zWK1ma8ZHoW;J(1nN|T80RWgm6C_X5}>ZU?tAWZAt>u`O8y?J}G;I=4Tjr>Hsb!2M& z5`>SX+hbBO(?IX+Ai9TtqtLw0>k&>=x2;D|koDa6708cxya7d1IfkAs`IbQj^wxJB z9eOx#T0upJB6PWJbh2(siH5|>!Ojk1^-A9ZusLaL^Qs@kL?AsXc*(o|f*)l}bM=mw zwfUwD8OARBIw-^a{kV!8jdf7Q+<=94Viw}jsUw-&Vk!XZ1d3y6iZ-qH3O&|mZ({4k z|85LZsz~VXdhYZRn)Ysb(WU;eeohms@^$%bfnEjkb$=WmO#>AD36CemRl~rvQo`r+ zqxR{Xwq|WFcZ_&V-Jd@4DO|X7W;s%G8ob-K5e%z>?@8Jmvzr=q{3hg)o@jxI7qAJB zO-w+feb<_NZ~67(pJ2fP25s#!iqAQ)9#S<5xnpNBeVIQI)SHQB zU-k@Jxh>)}!SW9RtRzDts{waKe7`*eoDl^OngVTh=8h7%9~f{-$-D@jC-^2ZDL47n zFIL@n#d+D?29X;M$4zn#KOFIpybNqjFO`tLySv!;uV1?cY5l@<98b8hfkcJjVQBZH zOBh86@DJ2IxcZ0YMfI}srwbc}<#VhHkcGKW%aLqL=8`NhFSgg>hPQi_ikRXwE<%xn zxQM9n{W0y*CvyRbw!8Q4y$kjJ_2ceV+flpSU)S~*8Pz}I3`{xjA^gRZj6bq;hy3D^ z!JR zjIk>&kR&y>hsWN@3BLcNjm!g`ewz3oI7V1)hj-{-XdO!C>PDFx zb#xh3`rl_s`UQr#fYTjv?17>lNLWH!{~~E{eN6FbUaw)*DLkF_jT+-b&v*%*_C8i5 zf)lskpZV^1FsJ-8#AP5~RO_oL_-ZFCscVCAXsTQzX!lPjNf$ksYBF>^ErQQ_nL)kP zw0~`#dCfAe7Mm$lHt}@91zrPU`taxE!~{4EmJe?S2(>7L5Dl4G5+u1-lC3K}$P@Pf zEicx9LXfYBg+T7EEb}fCa4TrgNEPMs%vnC3T6dqDv!Lq2mszzJ^3=n_OQ_34PVnjA z?Ck8nL;AR}y1KIo5CUMoA+^<9Nh2oy5F^f@!ACqq-$#@@2ui_t==JwbC6UNs#}jxT z`1trNGK>QuW;hMrA^NymrQGQzr$x7`1?Qb!9KKr)c=SVUl5=UL6C=>r%67)Sv5Nqd z?8e?zjBRHEx151kUC)p9jf_{W5U?U{$T8h`yL{WFd2$^3sx8L3A2p zJ;^qIAW3R!@z1KMha+#$N(IGA%?ko3LSacoGT1Jsr>6%7@Dy~ou(~49y^f-x!5rB( z;(BoFH#AXvAGN)>>kXmVsNPk$?Jq9oEzX^>$HnTnsK-C6q+X&|jRZy1Qv zU)c?_5xqKhnwoQ1{>?vkyC>n+^PQ1k0UI|>u+u5=Ju$bka@tlV$5LK(C1iz8sjCAR z>#wpclm}nS*4g@Y4yQV--FKE;5g{UDHb9_)tq(3rTk86DW};GC&DHXFW^#%K(;vmE5z@sI4v>!iI`omO^Eu%SR3V?4Hr3OMoN{U-VW#L}z8Ws~PiV%XjFTQE=OPRR2_nGb;LT*jP>E4I0FivymGoZ}l<$eSZv5any};~kLNpRu7rn& z-+RT7sHVw|QdPQd_*Fulq!p6iViS4>sA@aXz^1&JU7Tppgy38;v$Rxs8oz--aAlDh zSO5KkGDA$9h_^j~uSch;e@Nu-Q=D+V<(1-=lbWK|`h}2$-0s}m9F&XDec?etFXipo z8c~i97=R~(|2&Af`u5l7!#~H&e^a$);Qb8?HFeq+^2C7|mpyd|)I}e)m-Qxx-uOSe zUyrP4TUS3U^U^Zpy;jNUsJ|nSIXaY>nyZn+?@CXKMkuK=-|d7ztCUpq4{%+gDtLWU zqrp`G577{?ULfgGnBDl|1=!0SZ;lpcWUw{OgXEd4@UMM*{kpE$Lt$Du85zIJGf%Gc ze{_Ne+obC7r+~55_lBIcHwy0FvCWmHn5)=JGtEj&>X+|(vX_bZiU@0f> zDV=dOj}Ng`T!^9HnGQ7_*DAxRMfeN4!|{DBhAT?q zm`S5|pKtZA*6~1I{)!fxXp7yd(#Mc|`7X z9<%=b%x{V|UqO%gr7(9v>8}Pe+e)_62!*vptTBjw-@biYfa9eO;7P^l#a$U(m6t~f zEk7A~6LquU@X($T<3GemWEUD2Ap@H%?@Fb!@D5gY@O-wAk350UH z%MY&g7-eAg?sTu(XOVi@Ns)qRy81r!i%)w}CNUSLlBg^F<^8wI!BE7sw`&dGz#D5w zF%!@8&CAU6{JuCY>tYSzpVMxr5#2`Nilvc!J- zqyD2iO*DifPY#$_`cgJ22&KpACN$04Po_EgXu#|CL*VSnMEmlg(IMbWp!c|wWn>;H z2WAWD@a}o(&fSN_-19}+v~KOx`vp5Uf~0@Z=fw+&V=L(H9GBwUE5kG~N<9l3eUROLpZ14vf14brLYl|j?D<{08wQ|pM062!Oo~QY=x`T)R1I+4r zoi16irz)F?AKWEnYcy|5<1Hladi&qIr$;)S5+=!bM}^XZ#qNH}!xr;8=!Y!g*vbjx zw`YoeW)Xw9DnfC_QTa9V*stMq?#fsZA97CYKU8Zm0A*+~7qa$VnvzSLJ6xL^!?>q|!$M@IuLhnP{!PTAR zCR=$|izYguHo9lewpxVm)0D)Q3w_TuORSnA`S%I$Dg<`1+*4mm(vzggV|0A^a(79z zQNdNd-=1*?FuIbt35WmE^Ol11a1{4i?gTkS1-$x%`vFape!a*4!47)_?^chKLnGz@ zxTYcGGVJK`=eD%qAy4}7ip9AjQt=+0{8jGCYO---n=f*|9|Vs5bg*GA?c93gegAH4 zDW7a?tSUi;nh9*KCX)I8m{%Zhkef(0$-QS|h&{^MLR1n zpL}#o7`VVz-yUQA?Rc7f`p8icQabthfN*?14<52!3B^Yt+o4P82M5@;)c%fILDRe5 zF_XYvlMR3aA|Hq0ad7Zo*!CI9fm{sR^9UbTWpebCDiUHas>dH7qYL$QrIn(l(<|iE^i`IH8<1#&##I9E z=8xzo0v%gxed@}e3tt`vU>?(aN<+R`KE&2&9+bu_o_2w7oLUJ>cw8|A7k~c_4B#R8 z;TTym9drJ@_Qk`FFUP)JD{UBSPWcMgnB}zNHeP(X%O~vkUYgXcqhZ6t8g&xW)@r6| zp#MFr2;gWT!)CqJ)$##n4VHp`f4q7Nn6%7!_FUr;=0Nh7&mZU^3{9< zc{GV4BCE%t^!A^A8b#2*N{ttmu4so|wYq2J{;VEV>_Q0isPyj?)!C znwBAt#TW@@*Or$4$>yC<=e1*L6FwxHhH?O^PpU95JDmd0@H&L_M5T)jm4=kJ#fq-) zg~SPNInDH6J<5l|81~K5Y`7`g*@eoMBYWzSf3!hkRptP!G^N}{li!QB6c@W614M4; z=jZ`}5N||^=@}R@;cA4Tmc_@#pzSALE&s)IC(*miaCp}n%s*uEXBZT`F1NrfjHG=P zv_6n%%qIaoL=6u5L_A?!lgA&3OY`#j7_9OQ7d?;FB)dIKt zUJg4foop>M9wr59PjXsQg}nEslqJc$@71*6Lq~#jpB1QZg|~HOd3T$A-`o!)_*=To z^IYo>^)x0*C5hgH?SiB5POojsuJB$+AvQSf%&e`;hhQmy(-~ zW41%d6Y}`O3-3#;Z$>&84}pq;-X{2lt$(+7wV{|tJcz;~(Yp#yxG7Zd6Up~jFD7#S z^LXO>o=At@QWKWjYobNHNzi()RX2&Ka5J93TsJbADUKx>YD;BF&Mr&K0}E8UvveR za?u+MO$tv^1k1?mm9?@RyXADA;_Rq!rJtXS3PHKpVh-Hyu^D9rurH;$Lt}%|7=pFc z)r5VG?d|?x>KA%*W`F-aSzK%Xlm~d6m4f(x9)WalYMB$dZ)bU%qGx*|QJ+~s=SN@t zd+)DhQ{cF95lIqEhg08N;3<6Yz8mh60VJ<5 z`ofJI%qJm~S?)4p5Ccd`oLF?SY)ZkH)lN5w?v|Mf zKxEaerM;=i3!-WD!l@d7BfukaX*UPfV(~p((takcS$q7ihle!rss)oY$%Cv-`nDJJzS=n1yO|5@lGJY2*woi z5Vz3pvp1PBluUyU2s4zN%~ z5XUCd4mz<|6Fu*J$1tKjcj}iUpl)h4H3d;m&^Dr(gLooV0>YP7etm^t2(cOk&z?6L zu~7TTt)-P+!%&e)KxwZipvaZp!5fGTW*GA_Vq)Jw!oj>{fVYN+neUVar*sP6HF^07 zN72gUbT!Du4;PoxVMtY11E^3&R+dezM43TabGj;4p9dlXfJLx<$G+9_^5uZFDu)C3 ztzw_PV4R^HOQ3@#@tEil(Dh(52M!Y8p&c_RNMuDzSa+Lu#q6WoyU0JtO(TOws*`ie zki!lct;9ko<|3Xrt4yEra=bC2%=a3Z81~pkB_Yxe{ryKiplEwk-mhSk7Ry;=yLsvf z+bJU8&e60W@cD{E;KS@G3GJ0P;6rA=RCMHvD8x|;PW$u)?@>wGFSy-<_Fpm6*3^Wx zr>>$I0hXu>Ky7+A%DlR_*m^uu@CWr*8y~l^RGB$2>>l4;S};vOpB;F0etzfM3V+X` zL5>i%>1bKj{WT*uUxv``r02AX6FwH|yO#NGOPl=ZrJ}=y>m|3Y(1U<)_2Yf(N|LuHaknQB-;1ojqR{}=E&K*Y zNBH-wpyzdI1neUGHeBfj-h20<>d}IPb%Z%O1|DE=BqA|^q_?^0)c)+?;)QYU_(M<6 zWB7F3CABS9!F${F$MId6NV zS^LCe*;b4<)a?&3xN)Y(zim%KvjW1j;LErmarf;I)Q*=$e1$gc`+c9MIQZ{;F6N0c|?l7!`@fqMJD*10Fkh`T9Ax1WyoBp#p&>D-J@Akb?Py z$V*cWE4tIs3eri#dEmZR;lCa@mQe0$$daKYvu5^Uw2 zfUw+Lz?m@m##z^GUGJHQ#^^@!=6{3!8hw%FBxD7Q3c8hjo~Y#N7~SNETnYuQRraQy z=L+N!4-VWPJfPgVN^FwP{Ra?=G=!0$fdjU8phcenlxxI?ZeE8m{ExaGq&o_OHY+Dn z;Z*3MB-QwSv_!+qF2o`3-@m_Js!^bs68qj&pMe+;uEucXkY+5-NB;;(ptzBh9)5Bi zvFj@bs+YBm&0EiPC@NSqXNg7C58r&E2-bUf#wE5?_rpy$MM&WJ%=npkCdaDsm${s+ zvcD2|W=*EUL3qY^`4z`li!?hV4>>h$UVVDGAZjBHunPV9{ReUdrUZ%XV6=EW07^*BT&YIX!I_Z{ zd0>&$v&w1!zr;gR)yR(f<7szrU|>vkxhptd-JD_S$NWCV5#vcKUyidc7P02LQ#yfB*>T4qn;)q{#fCJAgfF1V`XJK%S9wlpQshHtYz=r4Kbj zzbdOieXJy4yN7)hyQ_$EvbJgR0^%ax%kGPKop0IuUKKxzs>R~-=Va0YtG3vP=jxp z#dP$2B!i}Ue!lbFqsBf6%d=YtjFq{kz8;LD^4b35#Oo~~v-6-CFj(ox8kwqA=wy2@BY(3+@7t3j>ivqjSa%FnhFJ_`hYLVSCxN3jlmb!bs-g zjssC0L#m4e>=qZOAk3^b^EyaI=Z+8bDQam$xWOjyyNP^(!nJGgSpRdUI|OM^pWy@u z4jw>yAKXX%>^U_bj4!Q9t!)3Y+hU{$8F0+Devq+s3y`l$NiA3D!EH`WR2k1GVfrj@ z{Mww{eEPz+YTLZvl88c2g{lyk&fTu{++*2~%jD*^-@&A^V7oTL zt`C35=7(P{SG&3Lu*oR;=HVe z_PqjyEDW8BrbM_#!mEge8nC!H8KozIV+J5|5osE;&X8_&U^@*)W%2 za(sNX0Rss=6_VT46LT5Yt1pXnGntz9L{t88`VeU7i;hQaWVO}-I~shMEpZu%w+5_+ za4`~&`e|%DT!8NLul4`Wd;Ub_-@uI_<&|5$yNV9J*W1gXJagcoi&9I{B#)&K8&B9- zzA7XHQL)jr0g1SV`i~u(ZNlSSLCC09&7g0FTW3%6@+d9lEc#q)R9*m(9m0+?Ge&Oz zI3`e&0nX#J2aD|#C|r`AeUN_-+kph-Mgf08uR{ zr!v)M-op^sFC>W2nqVVjbe;;p8gC39;w) zim-F;71b4{jthG@WXDht24`jxQDPyOUy$GEBVfH{%$92V^fMfGBi?-p87g-rEn3V2 zp+DJwExtZMfZd5g_C21fkUnbE-OVj-z`Z^$`Uc0Sb`eCIIlyCMYTju2U-uIRQt;rD zizkpIZKI32$itfI%WJB6WT`YeF$04#zgV4GW|8X~)$`n?OP`YJZ@<-R+Y_W8}N2ms`NrSH$A`9R@nF3mM(`DVB(Qs_p$icpTt(Mbg?o)a|_&M8{|hXTXj7soq4@J z7-p;pMj+wF3_M&f8DTDST}@eW-S9>wQwSdd{jsM9>$?!Gb%;cD^*ehkA_x~l=f|q4EIT3>C__ zv!4qrtRZH?XHuhR`dvdw^eqpzCr>Nes>NzzhnN(CE&)OaCXG)sP}*9l)QSuhh~FY) zb)0{N3=@v?fq_}8Gmz2}pY?s2sX=zhp}%fg&^D+jx%3%c=4>bMd2XG9g>!vo``hmg zZiP^;wTB(#e^c(RqWoI;t8wQ0mt-c(Xe-axOst;G%iEkgWM1aTnLAAkRgu2ZH$XXG zvhIcC5qX^a{`C{!(Evce{fe!1wL>=M3XA5y1iUKP)}c-5Xtn!SRzV@UF3BdG6_6yL z_5s3wbrm3*5Yyxo51AHxatL%$P=2cC_JF)r`{>9#XSA{#h?#m7*douw`3fdW+N-Mh ztf`hcB3KY?%%y9jRf#Od2qgoXom6r`Y%TmYT1|-1E3aXl(UmE-lfv~6dQyB(pphBj zgjQ0-8n6||2y?U(HA}yWU+8SffGaP@GFdPgx;W~`vK$2TYlWw#1o-oAEg_@?s_<^0 zCgIUCKcyyR#W}F=VT@lo>*lWXe_mWnmg9t}ZwQ1fa58pYgok7AhQYf@WRNPH#ZDZh zPc43M=UB`4I+)*n{&Jm3rLmov3zT?$seUE)FD_xBMXtR_zmmqcgn1(ra6E$?9Kvyj zb44X@jXq*dz3ELqbF9!S2V+aCh=RQ0OW@CPibFodX*2S1y%?K(^& zq3<`M-|g{Yu`&Gd0J^57v6y0B1saWtNKOy7oQUi#j7}`7ryur!)oxhTh2j+8WHdUp zi}xlka=^E&m37C!JftS=B8iy-fdkxkw;iMz1qB2O zdqahQVXh;$?qP2+ym<7HGxpt*!K9OTEIa+`)$_o)uC}+Q*yu-waTA`A)SxQ!9379W zc0>0U%6m^w%r$s6vB!pglsv<_VoZ&B4DjtSNHSfhg9DUg5}0z((};@|_LpY3+O9_7 z8@(X{F*Yr9h)UP(e?4n)dZ%>CEe%Pv*Ve(uYmxu44Po<7h;9q~^$=#FY=0Zm0qKcH zv6~8uGPQUNQ3;)YAQ+*D5Q{@3k;qFKzWr9?yjtCPTL@@}Dh<3ZmIc_d!INU_sHnSU z9;Gk!{Fn&=40jotu2CZEYjC0032a4@B0lDwiQBy=|YEs4~giwsmW>Z>OKc3 z0z3f!Vv2GmCJrq+3F=fd3=>Hwi7JJcQO{;_3Kd6m&1Bg4BMH zx!iI)uAWemxYzqgj__CN_4zrR6eDy{Xs_Y-DiUg|KN;%=amBO>aqN-zPr}aW>}#MG z0K7g=>(E(@3`fyyXi$It{Mo+o>{jsiTj0?YKp6^;d=XtxDGk+Y2OR-kywcXeK|-67 zCG9yqMGhzt(DVo6DwID5hH=T>>XatreyJ7&tTE@19QldMsJFkiwdLGmUiN7MdXP)Be3}O5+al;p%f4cgPCO1l0LY zvR}!_L!K#Nv5DTyZkk5n+Q0-Z(S{3XtDL@m&>q6KW?2|@{qYaTYQabpNJc?lRG8Go zR4|iH)R+ea{tf`5aAQhMe1_{MUJmlnw;(&-aI(V6UdI7b0cTWR+o{c1wG^!uK1nlK zP|GDZPt!=v+(WyV<_+#qvWy=|9aoP_9@lG=4bk%0G43|_ioe#c+-aVcvAX*FA-QIQ zB3By4Vd;H?8S!!+=)O_xwjTQe;sFZb-S1_KYL&&iMihlA$27xQtwF{*sc$*~-vT-Y z+;D?4F5nsiw=uvDkMUTVnqn+$E&)qdT*&1>y|cA&2K)ywty;!X*IIE=VJZ&^@2$moXC_^1!DUra-5N^<0a_ zRokUp$b+H=JWT)1=!ryX5R8`V#f3QD73RP=IrctcC_Nyix-r4JL@r2Xh|5ZKN3E0Z zFjkGkF6Tgmc3(G4!$6zyN{|qKF0y#eO(aYVeEO?cNtNZU#DlO^g1@fRqWB=diwEU@ zw4%g<#Q5phh)JXvc_n#pM|y1+oc@%56I!Dk-_gF#viwFJ?i_k-nfX}jYf}x=-o?j` ztg9nV>e-#khs}{8&aolVaejj*{g&g5WshvzfZz?U+?cP-)x1dG_s`|IP|$IFVj>Ak z16V&|0ay)YCFrc5umc;IG$TP5$v^d|oMhcPwz||&`dT)lE+4%Y7dAtvU1~{{KUqWX zDiD+)lS^W#ddnMmkxd5{v+Zp=89+vB9h@Eyv(MMpYyz~c;zhOr~mFNw_}aWUGa>`0Y^aH&EDHqgzcClN~hwlamnxpb5=RmnEk>9Gxy<9 zM8|-_C-J_TXnm!`&n8sS7W$RU_|M{=U}WHZDV*6|p$@(DxGQW73+4q`ji5iacDyOo z{0*wC8};-1Ueuu?*}`f!;wGG@tZ!u*o~qqj7oz`}*-FYfH~+EY$yKehDf>p?fxu4T z*1~5)+gn)q+#t3>3Rf^;j6YJTC9F(gJ}NRmRZ@n6FmE?w|b z^r%PS#8=LeIF-CZ59_rH~B6UI8M!GO?+`G8)>$amSW6oe}UV8*#hZ#J=d7^ zz`!NuTJwl+o|uM0`a2m0@=ul4U{b>gvtvJK3DQ4_F)hr^*NUd8v4_Kh=!fVcA~tM} z6nL+}0HPyXzaeEFs*8L~BKEGTIX5^Jcyd;C2QFH<{y;zy%nyDLm2KD!BLvp{(h4N5 zVYGr)S!po2KbgXx3`LW(a0reQ(qMXJEK_xKEA1nL-$%BC}E_E6OwtGR*7BtNEO?sHsRWbn@5> zsM;w)7kS_94lSaCmUl)=E5w4fTNsXV{2Q6aAJEzHmi#TwdB5vz-RXM_yES-19YrDe6gJ!^s?Vsu2uQ$@GTq4#Wap5ytzh5ud)BUTU#>@CZuoY&>4XaK0rxW zf2*^RqkgjX!6cgMN<*#;(XXb=*1GI`S7t-L#vEO_as@PPuxA5FxPdu^OOGCHut=9o zK1E_k`+_0`N9~*0>3J0RkU266lV{@J+$k5-Xo?SDx8xqbgf$2aTt?^1&*pV%p^>4) za*C?lcP&Xu5{B9v1wE;ho;nlH^yNOAzsB_J_nAnhc#%RMU@?Xr!JPl=xBPV;0hFkU zKC7NsYi5^hf}TEcoGtZheq8l|sV%s0-gJ~NsF1iZT}D&smMSUxU4~^vfZ|1uMJlO& z2tHX9jaKiK3BCLQI55E=tjuuyIE|N)u|n3A;9A}n?o%EZ3Xn(hI0RGXs2UC)M^QWM zZ=sY{HldFz@>EiTZr{cilqlu){qO>yL{w(p$}Yl?w*nPc9a2cujnXafIw!Z2laipp zJl(j#HhiVuXpNjV4iZ1v=Lp@5M~U$jZZhm%l^MaHtW-G7?W}ra|V?mmSHqqsXz4Nn#Swj-z!+wZx(w`H_c8nNFU)OuH=v zJH%q8v8zWxMg}G=0sW2pMsyg^PGU59J0Y#rnAp8+%p!DMg`x$IN5Xu|l{;!1_b<2#vvnYw2UoNHE~_GkVVHF=?IK)497Xe> z)H8TdI`pa(0_8Giq64c9>}bE*2|G|*w-;}U(*qP8V{b)C!%{ypt3x z+OBz8DSWH1YinUjJtqXs?^qZpk3-{?%G0@d)FX9x1z9`S2#bZRX{@a-CM3LWE97mb zO%C~L(H5W*I)KCpCas4L@s_y@CdKa9Lb`jVqa37$*Vcc*P4nhrkG~53f zUDeuO4c3J+N1@`&`vTxM#H`3mYXj7)Pvagx6#g71pO%B*3m~^)&j>Vv=R{gxPGIMn z3nGkUMFM(2Kr)aT;me>=e&N!*kfmL{`MD(6j} zIEY=r#~9tq$`WEy;7B-1=9&o24waH=VA=pc-keXJGj2XsUh|RjVmLLnltm}0(;vM@ zmp|_;cWjHwlRDT}?#z&&lqDc~1mXOtr+Jgxk)*;fJP5AmYEY^Ip%5m$Cjdj|riFO+s8}%GLgpweV7!Ou>%IQDJ+srJ~L3K^B4deF>z_ckS zBp-0N$fC50wE1WVadl@{bPQuD(Ut8ind8FJPunT>{HG9_j7J|iwED1mSB2pMBn{F| zA*ImV3BVS++5JPY15@f6ufyae&uXJ^@HU_Qn@x8wF=4ovh!6ll5SG+*?qt;GAV_g^ z1Bnf?Z>P_WIw09PU80__(X9*ccbLm$EX9HY2Q2(ROH-@o7JMzax$A3fUUMuZJTwFt zW!1?lYxs_)ebHjYv6{UNAO59J07|Z>=R%v(K+fl$Q(lw>6Z$mQK>02+T=@LCOvnp5 zVyst>9#d>UfD~Y|Q1`dA{Nn~w4@ZQgNj0G}$dT;WahqY06J0Q*V@$D+Wc4M?TOX^% zq=dvbT$e{0%6#SCG&S`Eh}qvz<=zY}slqEl?Y=cu{`UOLnfCoPqSe1s3&kQ6O?&35 zvu}ri?*q_v|Kl~>Uq}>$6mS>liWIa~@U}JuV163(0-#G82tqDwbb$ddw2qM!J|X?V zq7#zZ(JGBzoL_muS_Y^njA;>QA;Z;hyC67;r5muW0N0*#JAC_B-dn5m44kL(1=~mJ z0navYZ{WmWA7RQRi>;+;j7S$u<5Hm&n~~^{7R~c@2sHpX27Ip2BY*iaii_J-;xP*& zX>VCEdQhJG6?jNh0ywTk)aR6gcsnYohIKux#8$YqvvX|mp@vB-dR8FB7k1~YTGj~K zeIu@Oq= zUf08b0m$JmFew;r%uKi5kzBe8P&+&!Voe*~fS8pG&E|uXYq2pfx3)cit9_t|F|m7i z(X9oRfR--~5sI1P6*47eHTgvXK!v$t4U~~EsKUChq4f;t9KxnNC>FYq)Afv^{K9n2 z+XYB8)}=t8|Fq}Bn^wh?1}y&(SOF;SfkZEtfo+187)BsEiVml9M8I_CF_NM`U5w6_ zt1z0I?~F3Mutwn9HSgCCtLj<3bx6VlZ)2~8ow|oV2q&gUfHZ*y2Re_)9REtjw^$TI zt_~N^TGL*_5HD%Q4O4UTo*7LWAtOQ$kw2Q$_)b5a{uiFeWBTI(ll*MO^7kw4H8NFP z)c(XMB0pN3JP$z|T1=hZ(|7pjOHj}jAu)PCZa+mP=xzS~-fxCxPhIB8-Y5uIXe2;P z3LKYfRgf?Q*{4r4rNogO`n!;*^Z0tq?>-MBmi3h0;toPN|NT6`F-O3N-V6rx7T`I2 z+W&5-%_fXl1GZ|IFCgMC(8@te%n{{%UTgyoEn9?b6HKWAtM?Nf4Hn|Q?WxJ^9juMK zUgW(D0$No7evQJfVr#227ExY}zS2{H*-rigC`bnCPdg>u zsyb0?`u;<9pMb))Lyn_$U_zm(cnmj>AHtE&tT@M92>L@Bnfok5@O8&uJGD(y$}Tta zzRny_P|U-T2167--y5_SL1Hh)nG{HhgX(tSfn<6%r6eAg)oJET3{Z*1O)p4f3O&=K zlsXQbrHn+D2Gz1LQjYr6j*_hXVOdtP0*)fmCIWeOFWzpYN?1eR1@BJ;dH=jMXUm)1 zAK?R*Cvq)H_u@=7M9N_*$1=Y5)W?YrEhxf%NX%Wd$)Y_6Xa3Le@OJZHP{c zW(s-ALYNYgEf6T;a0HsB2O+a26waNDSIXH{D)+60ms+5!MoI*uIJqv^21+ z!WqSoh^guFe>ZiIH2W+Au%zIN#Bf5?N-woNl1b4rG5I6jAQf9$?uv7B_A|zc{wP|v zzgo(5qy+0{1Q|Lo%besF14rEs7^ zKw@yFI#!F7?ydPWTHGrrIg^ghZ(hE{(*{!}9;S)zOjac8rr^+Br#}cie6spaU%+0S zIqCzxdSG$>mm2SAXh_lFGI+@0jPf70MzFd@skNTFZ5sGJkvYD1@the^^wvE73F}u! zQPvx!VFM?Su!bA%P;$d;iuP?j04vucu{3<{-X%$+snQb6gpnGsLoK+2VFLz*1DwQQ z5HoM-^XK1d@j{^T@9phD`vDA5RH}A<-K4oY*y(2cu+0It#l;n{Tf+7a^EpgC^o27K(mL?Y0GxQE zfnEFQ@9v(a)X%VV$9UN7Eg9q<8wPD@69!Uq;G4pGb&8Nq(#q(!2Ucl<#0mrq$>t&D z4u2)#N`{bxE`VYk3tP2!nhVy(dhsoTlN`VuOZ3_?BV~c zg|TTvA2IG+xk%vEo$+8pBaV^)9ZY7uW1`U^KNU$uz(XWTVidcfH`j6L@}Pw72(-@> z*6DPhR}-((?i2Pm^xkRt2pLv!!H@nf5d*z25FKXhxaMh_)VmCrdy7!k)QgVX!{@Dd zMW@B5Tj-+UiQ$r?=818rv%7M3X1Y`OPGjDM27P*3Q~@gnVgty+PV4(}Ockl0Ry|Zo z3`+ZKKYV+!>k&4DX5=3Au)UksfiJDGG5Xl?A^D>?vL1E}a(!%r?_X~*$@eVyI?DBE zWG+K`URKCb?t;Xjk+$(|#A_K}m_GGFv=dwUnQo?-IG4>y*^yo((+Tno0jmZErYyz; zg3Qxe{|A64Xlw$yy_W#Y3gE1_{SGJm0nk6}fv8H6_@zmCoIX1Rx@#hR$*ewGyQ+Bl z?r`Mk;rs);k2Q5g=tJWWzCbT8FMof&XgMfY_;&hw;VJ6W{&0P^pM?|3fB^X$i19`N zZW|EoVI&Uz6fXhHUnk`Yi4d-JM`Q5aNui3l$>Py-3nJxG_ZAyW1>XMseVFY&cC)Xs zDfHM(K>E}#66s*I68fB6<&~+x20L+E(@u{a8qp=;XblQC^p{w44B|N&osL!6QbFaJ z#F%~>;qV+?cjDr-jP*{reEV$!KY3Y*3QQVIwSCer{dO5BDbU9e&4q2&6z>uc6--P_ zFp^*c2+38(Fk+otLeBTd79@uu^5l|gH@4Kun>C_8w^h?`)?CQh24EhR{hOIAIr|D6 zq6?t-U@{+gut~_Vn4?svDXnJEJN6@S@*zp8xU(AS*M~6PPME>=3Jd}}QXe${qbej} zBNC)yzHtWMjx?gNH!$EZ`A*P6d}B?qdd}^%09GrU-;MQZk|pkX zB5tbSHRG8Ad!*Mx)7qw6-L1@X{1=u3oTv9b{@iI3|GaU|PR1Eup93-_kb8jx2~16g z_cCQg_aHU%P9G1^uLhzhSSQz$gmq`cUB*FXx^oBiHWB)u|0Z^UZ8&fK{9MMzh1%t{ zwSv4nj3+6wp0I)WcQ`IhRIt&q@d6R*46LD&tn1bZKAeK(#(Ykq*$@zhG7nBSoRZXq z=1*S~74&&DrX0~65&9@xOgg~d=v7QJ`NFt44{1wtb9)cE6v9r+3m#6HU+-Lld1p<0 zs7MIjtd$QJt{y|CTlM)4J0;?j=s4_s_P@Dgb4P(OqD|UG6|#&;aJdC0rUpkCerZm( zuW^3b=X-F=PPGH}QYtg}k3SPJO?EH;5N2b(7|h zrZX)jP0+ZHfyZs;XSfA-KnY{0MW6anV}x*^l@*gJvXdgK$}vvol&-zifm$pTYS#&H zLcqXa*!HBeV{mv~rbg@b=x5M~Vh8=mSou-a`HuapP>sL2!LoD8d$ZrDx{_xWiy$DU^`|YsHXagjbu+KOPNy z#v0T}5TcOS!C`z9Dts^5KEUjt#{i}T&?e@&hcu)C0cr#i7Ta}iZeQz$8VHthgtI=; zQu-D31NX%-%r6HmoNIYy7E$Gr0ageDV1YmWH!lz-jK=qy_Ms8+{Y{`m62Vxu1`($_ ztdkLUH9h$lNuL9v`3YRDL0fN+&=H1-X7AMNdHrj)$^aZ{?kRDyy^&dqRWKR7$U*^Q zX3hX-2t;MDTf!G3R}VAV`JSxER{ArO(f)wf>LXZ61H&afvvsDB?kp;C{q~hN8|JDu zYpTr!Ga zH@Tm_fZ_n=@)wTZQtYY~agJ9MlSP*eOE3&{ms5XvbNmYaYA4DraZ59eVihp9wC;s+0yki)o zay79z9EZCGFy=c36<0L_ib<#t!{A@tcy& z+6h?4b8hkl5VL|i4alz;?wXUS{z475C{-}bfQ%OcPRw5bv3qTuoJ|@sB5;!x#~QmJ zEaWE;EK{58Skw41PlsNFVI(??xV2zuj9RXP4HnudP#LbgN5@RNsC3}bHm5$gF*jDl zk081p_!J2(0_UKFPL6^}7**3h#kZ#)qLi1n=0jV2!Y8F3P}Hp_O1kD27M~UuGc@g4 zkgy+ucv<1r+1S|F*{QP|z8*~&(rIJs(>9L5$Sa{mkJEx!NLO*sn%stKK?xw#RA-{d zWMpK{p{`vI1R%1a8i0c;Gj0v8@}OsguZ>b+8Z7G_h&Ge=d(wl5CTKNZ&>o8*{bgerSpdV z%?&Se92q~jQiv_dtDrEQYZtruwj%F%(%X9Z`L{{jb>52gloSd3rw`}jIX4cse>Vr%1cU%dOt!P?CT}0W9*+xSB{~HKk1ov5npT#Q)Il4Q>^)bD<}7HNjvQW2Bgl}uf1?-A28pso;_QbpnZ)R@Q0|JIBY>iMI3o$djo$7Dah%3s4XP>7~5ob}N^D0*Y z4D8L>$bK4;&#aO1=}Wn4=-j*c{$B*GA3`DYjp+>trz?qSa5(`_ga%B{09g_g@*iS< zGz`CiZ<6lVQ51M?`@uzPNB@lG!Bps@^QKeGjlC(K?xU?*!3y~zWq-f;rFq`QfS{0T z_ASuq0t6h)5{wxkUa;@@Tpps)rTxUL{r&(h1Y*m1;MbP{7Y$iq3;|S$ACVoa-J3x#cm;Fzq@>N|&SvL$g3ExE)fe?e$Y)!>MIZ2A*W zASsgFu{L_#THph$d;T1T;=+R_zM^C|UB8M=cNhHqRkz7Gi>~Me=yd^kQI)2#m}f^# zv#k=Gdaquo7Yd%T)BNo@a1k^`u!@9v%R)5+PTY~rllSj$f~714YE=k5gFWtM4NO&? zO6ltoM=sv1>1Q;$Fm^$vnlRb6z@_NJo+5Y7QoBI!3#sm!`&g(UT!hIP^4@sWBtLuP zEAu);G5Qb7d{jk`wo+w02WTfirezXsL9q$hvgb1_6wkvf!47z$;N?P!cJ^?%2X5tK zX)w$g=F&FOw&f$ydXG0ztbFR;`jV;%mz~YEgsn4S_0>{dq zl5$sY!LO}hF-NcbhW1cJc{yY_-D%SjpfXJVJWD-0kdOQ=^Dsn zs3Va7VRzuV{oj~Jr@pslln_|FPJQ6{l!P0XUDq96%4k!30!Kn6Uv{daJ66 ztD<82=dVETq|xLjE|l=ZU(H2^mGufU5C(XO)6ua_8qHZKCrmCP++AfRV7N%tQQo&og2VjzQFrz*FvqnnM89gk#E4bYXE(rG+F}rwV1M zYG}CY^$U6z`hND$m>C)6{7-l8|Jl0#68MIMMSD4NHn~%Qy)g&Z$QFZQ+zrtEDK6lR zgZgkkpAeCy`s!0;Ojk94hG2Z#GritdP`;u;hfvDVbRAyxz=1JKj#vfS1{r!4y^Fj5 zs0D3p-m>F#=+3SHdPR~bCc_`-dNNuG6d}y22RFEHzRQFnDaQb-czBu^eWGJkJnsSq z;j8=0KYsl#m9rf-q(@3!b-;m1-ok9FVoxQ$bk8#DlXtagzk3-lL>*rJeEM$etNiH9 z6Rl!N6Xp@!ooZKen2tFI9P9q{zVOO+wm-1i;Aw!d23GRV$SgHc7ovUOYGmznG{ z`Rmu6)M95Fi|@nyydb!%z@w({LqHjdt25?C6h=(QuM0K3>-xjtJE<&8T`sM~ zI)do{a}i2R1-#gya01l}Coz(o7*D2$ZjB_H3q=UyEnxn`e-joXAv|7RU+=ZD+Tq#M zX=cfBn6#cfeB*KhWv$dE4him>o%DA9*WOvTRkeL@pOg?OY3Y)d z?(ULq=?3YLE(wWEcS|WD(j_2*q=2-Dh)4;jG)M^e8=UXEc&=yv;dKt@2%ELmo^y^d z?)!6xJf=Bb60O_&=56*yGWYy89c(%QGtfSr!+)oJ{1gg<+=L-i7>ReeqxjMvc?cs? zf@|g=gBUD3&066hghvnxp4V(erprgMebEOW9vD^UG(l+Z?%gt(+7vlr?H&|$P9kh* zS)Cb_`uK~+YuJ4sgdw+k=utk*&^2Br){gG88GX8GvU4~)I=-rH;L=7iLy}^jy4%Us z%ETZ)_xvnA|4i3nhABt=O;3Yl+3e;KCnsk^;b+t{(|X$)$=kRszUIgqe;}1=TP_eS zG^Z@K72^-x0Pjx_e7uF3DzqT zcZ>cji~3fN4a6m|fjt16n=B@ot?;sWou7}-x`%L1wHm#;(Zj5VqJmQ`!~%t%Xg3g0 z7E-4eQ6ms(1E6DyjAl+(fv}V8QA~B!7wBCZsjr_tv;$&Ds! zZB^M;ZkB{m;a`M4Y(0XCR;zRMzjho7=V-r8SkM*qMI830D4-`dZN1WP#zpHH`_b3n zWdK2!)-_X(U_T)kqhHt77f4l>7GzGK^J5T z@QtotmfSfSFH>>)B<}dCJhHLC-Hfm;0JdVz;4Kq@fRgHJ-ggD8GN2$w16ObBSMQzy2(V5QYpfKF2nt?;*cKTkZr6|wV-a&VJ+VP zEU~}1;y)M)YQK6prOJDkj`}|2_OJo<{yF7Li!4qrxh7%)i!oAZ&B?(ueOfQ%EV3OX zihQZ~*dk1W=#Q)Q>-p>M8uLHXJ$+ArVmWM25Z{!cLMW2ts9x6i!$%b3V(fMi*u22B zjNm92)(2ta9`m@dg#|{d!zzTV+<$8$H+?#hw&B|tKtf9Dlmq;$@@8nE!-vl6#ZAo# z$!7c%(Ks?psl-iC6K1hReMj96DG38ZhCJu;RYi6P7Dn@y9<7Sc*_YY9$36cZk_^p7 z>S6YN$()nmRgy(2W&DPV%p3Bwk!a@E37qWU$Xnq9*=P_t7tAch4Dd7hGi11w)IsZA zK$EQTc}I8P91;TP4wIPM_l-QfN0{~Y{yiUn^mujV?WF$hQs-yk82&VDi)bAo zAt?7c2dg#TWo|HFMIE%ieNsVgcsO_VL$h&@<53p{zv?MR6fFao5MUn!zTOYy1M$Z! z_?VEv6X6j-f?Rh<4`DBAxxPIO4FtH)qVXYn@kH-iF+M$E+5wrPtYI{$To$ z$hw`o$X}Qe9AO5aT?z->8f2rlF-1woF%eLJHSA2X z;u!lJ=71ApEICuxfR@PLgyFs?ci*z>;@D^%l+*fbMVHVg?m~!J?}K-98KT7ncjM$y zV!I7$;9O@?JLvKSv{_p%vc=AFPiI^Ny*ntiK7t*_^;WrpLHD>8^vU>Jie2V7jA zZ);PT@DeM4YY8X8wkbja^)`~KN1p7HAu4!t(5Hr2bLfTeb}BQX9M*2D{(;K^P(lh$ zT-h1^eO8uhh%$!y)P!?E3Qyw0i{#6a91Rr5IgGEKNjgtyQPMnxM0mR;pLBLlIeJK} zW4Itg-7nbd$dAGa6kU7+I1Rw`0?=eIgaZ>AO!vu7i2Py9w; z)yFM_B9U?ojnqMpsx>TN8sUs>GAOX zreu^X9SL@7S;I9aYa!(l|L!|(ojce8gQ|&$^t!(FRcwmD6XM`a_V;Jc^xj`e+PLgZ zzx;+W0|*V#2o^C_S>{Q+seV}eTa=To;L1UOX2O8&Y?0Qp%}JclsV_T3EHH3j;X0;liF9( zdQDjSE6)KS04`LB*9MwP+|blEJiXo>U!m&&zBBN>RNOjCo^3QvPx~|)eGqI54P&N_ zpm+so9u7j|{H)CbCM|Wc)mM8@wnP8s{CX^ugXRc(ThjuXWViw>OYogWMzGR~+CB2Q zxbZH+v%uR=`+n^JCYcZs4RP--f&jb0S`32wn*S_y?1FikdRwQ5h!Q#3ET%zE9)EVp z>DRy==)eNIclWl*zx?IPAK$-+e^WFsAFu`_3KUV)$xSS%5#dCb0`w>(AwLqi#{^PB zSDa0sjD)GsoOV;&9loD4+>BCto_M7)rK_*MMbWI;E2e#nEMn_zP&2oA1e+XG%0-2R z5+PvCX6rTkZl=bCvhx*SwJ6plTH&_uR0gl<)`6yc9!!1y4&XCT3od-9cA}`P#79BF z#>>r=Lr+A!GUak;GHy4+H}FhgM6CP4;unRBC`NjSi7b4(*KF%$qyGK88W1r?Sut)7 zS0z5nG9~^hHj4UM{8&5Z4G~XVfYZqH3K+~!hTnPCU|#nRvPD4YfElc--?regwJJuL z6xhv$p;dAX!Mza2vmCV74Z*bk8FSzw&(WQc@Ull`4u0&bAS9z7sUiRV#D>J_*m%%( zb(+5CC;v6$je|bFV0Nxf;QjHweN!Bp_-|o7d0W<$nOlhu`&_h$FC~N9qf4iY~lu z$3qxYA2*yLU2@B48_rba6gDUjU|+yxZ+opU??W1sKIG407U))&*p_H9TCpz?z%x#p zY;&2QI6tCTk+pgHm#%PXdN_wyTp0uhn@6yEWvcd$E`9zS-oW%2CGYi8Qa|5TFFf#= zqH{>X^v^BhOJOJ_M|cg{9$4e}uTzeFZoN{;%F>@7Tde?0Gi)V4kUYuNMIyMQ!xf!b zef}`3(D*?G2XqAekmnJ>^TGxJL?xt{3M8drFK4X&;XRWxk=&wL?fJ?uj5R6Gm0ec% zZS6oAGg?tY`5u~>l9H10OS)r4t;_kat9ht`Hj@3tA(dU)-pUR%cV%T|kV)O#9A$gY ztP*nq+w8kMrVKV>p5Z0)CuY}D*Vq~qlo|d+BAu?Eceyy%_I~1ACm9n|zb57I5yI$# z1qR~L_e)TITE1!IgW66Qo+%HK8PDpaI-ZNRf-g@vl3x)spNB*ggbXQcVxq%b7>l{EJ`pReO&5BAd;E&5Gq zhoJt8HwA5Y31px{cW2w@Vt1*N+oh@*F=X?zA)0`t!=*?8>wF{v?I9_2EMQZa zEn|{1oBCTh+_S!heJc`j7l^P&tcl_Tqt(Le<6a*ld7=^1?otT#nkdkKajj1n1dxow zvs{tA&mo5HSFOP>*ht{u3n^|>?EXBJmuo}GGUE73bm}kQJaUH>N$ExD_RKluo5mcp zACBQNhS-*QOjgH0!fo`-HkdE&DCz--&RzO(OLd$Iub~@CTu=ZrF~zrI;?Cmnh+iM~MQ`cj z4sxNcOT&#?-}iMPRm%a`PNvS;TziCBbSvB)b5`yk*yWD}k}L4tzScna;wF`@Hxd`t zAXI0tn^w9ypewQaCq>F8LIbRA#%A z8pO+1G3PvGTC&9_6hQ#23E;EL7!3>ZKV*2nVQJquXv+(0H}rVi+VbPY@z$Y{J{dW) z&HvB~LhAI`K!=k%Gr6d?t}KzN@KLRV7AZ+xGAXtO;xX~nA(dFQq7NDLa&!q~nw|5n zHFvPDPj){2Y_nBRo(LT2fP6-}eWmrdT7!hBfXW)SySun21l8P`5V6>Yfs%N4=QiEe zAtcH{nfY(0=c-M%MB3(#YblgJAOZj-ldrG-&k;vaL3!yRe|aPB0>R*3f2&q&z!PVW zwz(}mokzu&PY2p)pDE5^byRwo60TmmW5Y&&6wjZ{@e13NJ%N(Jp`dRgDQFI;Dw}M3 zO0r!(bD)6t5BCa1lO}Xvt-zMG2+Xf?(;|At2~^5))>Ft)6QY3Bjy_iTxTUoNT8_0D zr8&N9v|5yR==!A8;2eXHb_(1FnzDy*<@3kc;(0+mDvYW>Pa7ru4-nLl`gTT&z1nM; zGHG^;)#C5gzjD7Ln}s&-SQi^=OpdQGng4e?uM_`iijqO11T|it4CIdb`5Dq5fa2^J z=|kqhQH2^47H?>JeYBGkB#ePIrUeKSQ0R^M_bfw(4b19od6ECcyugdDhK4FO`kNt; z-9W<>`!Pu&vH0xE7jpCcO`}EYLaw9pF=Q!C`#oPVm4sdMhiT}m+) zR;zl%TRe}_;UIyiKqPbRUD)cLyQbq%AOoKuf%2a96WC)+lB=uhUj%3oVS}x^E^?Fk zyp1FQUH%MS$H%i9UeM$KeO$?thpVzu1)hau69evrLcyasYFp2m%Bi$zW{+1!-aQIm zptSyaOEv#L^m@cjgAo`&WR}m-e#p?JL#2)qfy6lpn>vIIL-H&~;H`=0x18pqQ_3-r zsfMf?B-^>a4}#I($NJ5?$|TR0f+$7iyh;64!nl4Im_z&Yj$i#Cm&Dcl+qlOoP5s4Q zg}j9scm*d&qFA126hiAk&W*BR54wn81=V;-&aGi=%*80n8H(s(D$EEL@M856okl== z_&Em8Aq-%7+K#4yvp3+Di*L zaW)q!FlxwuC?B$OOj&Zr(h3h?CrBa%gRF=8Hymai`C&N=##AM<_4a7`4+L=qI4{T~ zNm)^l%y!0dg#gVIX`N~^P|i|PQsR?9yec%>SS5cS_(N$6%O`o`06z%?uf2H_e@LaU z4$eG4ZGJffKq`C}Wo6DcT5}ckdOutT+pqH<^wb@g8cLL!vJVowTpIp_YMV8GoRFTN z3;z)nH8rpBOCyeN9o|ELZMFeF2&kJkcn+vaxwBeISu)(gLtUW*6#?yY$8c$0J>O{c zRgM7Hs3ARx&xTPpIQkIn8r~1R7o94Wc$6Xq_q^XvZekQb1`3m8sFwZ*I5s2A5qgU? zKACj1_W`jX`;c^#4*x|!&Mm4y$9I{}-VD=c+Px?}pbn5BG}XnaML*Qk^8CS_U4ZJt zL1xi!0O0y4JfB5OI_c%f5NM-rf~a91B%ClbmA8WK;QBh+(CPPH)Ov`1UtpKMe_Pr- zc}gy12e)~P(_osPinwA>wK#pU@DL>H-?8Rg8F}_QAWO#Aw`Fn1t3_PX_If0U{~;&@ zID#_vQZFdByz2?%L%Nz zV7*T{0&qt;4q9M<5TihrcpP7VcZQA6E3>_7md8-eNVT;XgejM_{uVSE^#t`ENJQXiXis2Y7s7 z4&MI$y%A{_>2;7ewFj4_7oB|1^2=Z5m@>!m8RI_0!XbGt=)S^0B}V|manuPU$RlA9 zZ@$M8ydd|aR8R`tXwosS9VGMAJP*N@YK?r69mqkVCQiM%3I;Q3@;bETr@vqr1Z^Oo zk{Z;2gQvIJT`>QQV}GGU@^+FXiZdpP*jOWoJ^|Gc7DmJ97ZTFF;F87-G%~boQ!c|Q zz0$k(01C$dg4*SOt_s+;Kde#S6Q`%&sxeoQEOl=neXHH-h~u|`n)wn<>b>gEC!PNV z(IDOOR7(qAbmaeYddlj*=IPk=E|VJ#GQ;YB{Kw76@VvvlUKe`8ZhPxS$`5AXg=kGN zvW|O7GtxAeszeVlvLGadUxN|+UC_ya^cq}|XQ&m*#%yJm>Lk3P>kBxF-J^Gt43B_69-S69>Pj(o=g zuR!1TCAwiSIw&)0ZCZ}eMC*T%ff$g#dp$j{kYypU(AK1XiofAbUJ_zINTkiMCsHU8 zjpQX*h&Vu(bDQN)j0fX4&c(1+8`jWQH$VE+l)Zd2tEm&)bpxx^k&{5*bc?Hx6*(J^ zXattqoa#{R`fFDH%#9k{A@qso;&h#1LRAUSTPl}Ct0WOu*T7ZQBqU;ZmGY1v@1tqU zuO=z}5ZrqbF<#GcKgPx*?f`+i#w~*HsQ5#2B`FV!S%*ly zeA4y)64o894Q?{`OvG_bgl^0!@>mHI5u+kUZw~SiUBufNHmd5I6$RPb$0TWcEk;n&{&iANROi_-cB|obNng0ytHgx@^-ajT{4)nl_?o>jc;|ow^Mh~;Mh6Ag^}_X zLm6xb*B5pFD2@Re#qC}=V8WKUh+i)MDR(Wk9(0q5q@=hM6Ll;EfyqsAN+}AjRtVb_ctIxK!9G#u93$7tM zbQ?Baa7gEThooEsLqqb&*}YRZaX2+O3?u#4%{l$^uczDlu^WTL$9*AT{LQ<__-M+h z^a`q9%tqpW%ipWhWi>pf-%zbSe0G^1T+C*{Sf%Rf+I`H}EMx zx3eH@gP_}l+5y^!Y2q1A$dQwSn_RFYvnQsyd6FbE7CY@vW0lHDd%dEJSSLEbbqb2d zJEmWwFp_BF{A;t=X?i&eHzSjT+bCsv9-G!vzMGO0|MQre#`)dZn@7F_*CrYdU;Ogkg~mgvq8jDSWo~s0h8K4J^%jpw3zH<_gvZu<`b7W72IOwOIvJI z)G^z|$==)=S=iWpo5H~QkG<{AVygBk@<(Qjlpv&3VI2hkRS?Dj-h4Xm8x;Fj*EeC- zkdl*50_;}C1oq5$J7Z9rf++bW+UW52LKAEhEJUE7JUs8>z}I!YhS*~mUdfi!cXR;W z7(Q6K!EJ%v*T6r7K-@4wB`a<+<(}DnueR3Q;E49(Tr$r1JyjP?4HHR(m;;17WRI@D zG>S`)cTQq{%mZ?;MnU;M8Fub&w}XXXOcfGRc+SJfp{Sd~@t|>de4E9AlfEyjDNVUF zeqEW75P}FZnsh$Uwv<`_zT)zw`|Fi86vDsp-DF+^^~%*N`uv`+^m@Z)&XKN$$SM2A z+ntUd2fAl*$^>A1(DWmHl=8Nm^<;g$zwuSDWZ2r^oprWU?eg(quW9F2S6w})0=_3u z8=Ol+lZF+YWcq=Xh}HA^v4U$PG!j9lCK$%Sm=j0Vt0RhF7JOwSS*+At$~1~yhF zciGQbq+~XgE%Ka&GBPV3?Tb6F>*|^!+tDefA+IvNk^sG#r4`!kAc6#6U)W7-Yobr6 zlITD>^V@5J9LJ9ORTlProFY13E`KYywOd;ttLJt6B0N|0byC=NHoH-PV}s0wWkR9x zmeq5&woZseCBp$)Y09J*#>;|NQ;yK?1fdp8=soUcwG)%#pvr$9&I4Q-pxoevQ!;GJ zs}sI<&{n6>92DA}6jp<1QcL?B$A)WfWK)TnD zEXBTv`(PTRz=NX(d{`jO)XKUs@V&CCx#q~3)b*Ma=whP`j-bIkBO>t&K^>f(Isba3 zJS_LP3r#U==IP*owQ&|v22hCJpnur`ULTzLL*aM`-J5N5Y0|yR%K}t|z|>#a+YeU< z3Axj7OP@oQ3E%T{`6EkiBV*(9Ka1|1qZbe$)ax3aGrw~Ov7351qB~;AY|O>8Y5MII z3j>vs`$ccB48$F-@>_8JdXUz0UlB6ZuyKpTTk95gN{^J53OD4VBYTlD$=0^)huxHW zl)19yHWN^lcDpu}C%tU9cdT6kt{k^8%(L)hYEtch{v6?22y#m+RmX`B{ij_u$>u=)hCVRWQ1U?z#H22)+BoR^a*! z(S#w2(9p?Eg*k%bVsCpE^Tg;h!k~XzddoN5L05E;(OK^)W8j8tjCT< zxz)M2Lrq1+^YI88IQ%%%e!G7vH*m;spFu5cX9v_dKqbNpOq|6q>Mta}GY;^)Sm+LU0s>+PeHvQe^0*ZDK5Qk_?O@+%eoHv%0&102-4EHs#Q7y&y~EW zT3x|oGZ?1wv3FBF^v7y{RLS`>ueOQp-hGj@+O*Mooh?Q62cnyw*)8~-dlN_R`-Y{w zy6>^c9Oq*E>Ehx7EDG=^sFt7?NQSNSKF)MhFI_9B_p>Dm>+8TpC)SO#;h(0$lps^G z9b%!mCu;r4_Ewz-)mW?xmO6rDf$37Tv>pbNHv%(@;DZ4eNkP$TlqwUxv%b#wTm4fS z1$jXpOj0fZs9rng+@Awg^nA~?K$GHRE=+cS>8B0cn+-3}4Hb}NrP~Q{c_(bk&~5(y zjU&Jk3Ry?6XtHI(!Pe=~{lW)yFNb{FxNe7Ph+?Kwh6*@@G40-4|4ccwg{q0qvu)Z| zpijz640=uAWqwj%JgrQl+XPz*Yd%zy-)HUgaW|hn)nt|98=TY{5jQl&azX&(ol!?Q zRQIRAPgegwe#gf_YxxxdX<|pgDP*dryp^WaUzcESgYpqXqN5wUd}vy0Rzj?sgUX=t zW8O=pXe>}!%hDB4nR~QMj;Gr97;KVENdVvn8?Q_Bj&m{Ze7i`mK6#**qOhrdCU{4e zuXmR5*X`;F6K6nsg!t?s%xLUZ5WzL94b-l;Ca(}YFQ5XUrv4My4MsA^h3tWob?L+T z_FK;b#hpozV^JpeOAWwV1rnZXDsQI_wj2ou5sNvCKg-6i4k$a@HpbWuzl$i3f*pmc5B zvA(<>;ktNuU|V**yLX-RDG}Iu1}tYfP8dU9SA$oAKw#)Eetkn50^JU@BD7Cz8{zo^ zjXJ>JOf-clU))vxyb3T}}glgB)SKLCs3ThcirdLSMo`vMz3*Lo|p=N?!kNn%D|v9JDR@ zWcmr;&wYm&ZID`^!&9Y>*FunRWSxUGrGgDIp(3jEW7~J#hg=;Olp$tKc4Chc z3IN7+3Ic@J>j21CY9&D_OYUFd-Ah&;WFKDLO=XvKk& z(a%oPm(CU%f#&+eR;H>&$DDwTBOp{Wc>EoKUM^R7A(5)Np1|m>Nrz&=NIU|kANbfi z&f=JvIn|wn_!p4}C4{cs%i~S-xPw#J+78Sr_yta(d{UJrY2QwSC97iQ9;Z!KjH7`< zO^r?!Q2b&1oRvAO4_ZSo+B!dQQouz+v6W)kBFBAJc?g~r+*_z5h4qfRf3l}^Uid{` ziL#@*crd5SM3IE7!Er&{L7_q;Zm@)$T!Rg4@bU|*>04~Fd-O4k#-fBSfFzrf7p z+ydBo9m`Oq*%bTUl9~aJ-!bTegDFNSC2Ads(t24bJEM0Hj#u^Zh-F)2k}sXX0mp*g zWounBhDE~0ZeoXKNf+kkIvhzVFVJJ1AQ`zM8ytM#oH-- z_)L#S^|>CnMXTreKNuQ1nz_2as2}StGO!B{hy(r%eAqU+g3r??oxdZdWY?rG8dBnU z22-?PE{Wz0w}OR3>w$ii9uQNgB?6-YF^Ux$)eRJwjX#G6b&j`}vuf&mwl@CsE?4ch z_r(d1)tD)763Gyx!TBwRK*$4M?il2xDB>flGxyTn`FL1iD-pu*M!_%)d9X#5Dfo0(B1?Ip= zU*Pq}U4twuk{M3#-H-VfEYZ$Y=Bb53Db^5opXan0PM;WfSTL_Mh! zOWLOFTUGX_3|y)&m30aB6WljKJ74pag5U`z?1_nq=5=jNO>(}xPlO6JmfJm13sqP( ziK|jp?7E8@mMa}F`ll0Hv}`0=@K)rtLxnjUc8ar9(jJ2E?xQ>fx7MR34)#I~sN`nS z=zF7h0DFd0GxYQX%-^88t*8YaIdIQF&#I^|d#o1c*}qmM`!u1CjE@WlGCdw=XVnCa zcrR1k^XNh?XIs3xmExIQD0>iHT?Vmfe1wTlBnX#>wY982EKbiUKPDPsx_AaPPG8?s zJL8*;{@>-qzw()FP@NBNHn-O!8@5x~aAb?&kj$qF5b?9)>t)z8J>kH|r2P}l9cyPi z`~wu@+D$+sXT4LQudMUCkv5jI^GD+F)x3%tp>xUgt%kyD*Wb|v@BfQLE=fp^K|8{b zFGwR@yG=VplBlS#8uN;r*8~2m5yv%T`oPWr6K4)d*vsmj2k+!iu#6CtEkL*4F@He1 zU2SK>^rRo#{fe^H^tM5f%lzl{>_yD|c`)*bi3RO_lUQtpsX|Ux3^VD&q|y(ZQ-J`e zRn6a1XiR~{5sb4?##S3nE1f+iQg0V}Z~Ar`)xNP!_NlJzik3bk5rBo_lIbyj>x{Mx zZd&{wd3sL}PRHDP{p!`%u7LC>5B)?k7w_?FaJ{>V?no|MB=CMDbh?tYDdF(`vyfhB zaC?s*>$YGLj9k!e+S7}0ikB1@XPmrihe^r*nuUaJjax-;{5zFX)@pCU*-If9A#;Pl!SKD<`-mEPM8YAz!Fl$ zpmXbW_bKO(pc2199Yt|!hcRLH7)hm{NlOlm1iY=SuHYoJQHQUGCQ{yIrSn)j=}oE=mM=D-9I}gXFt*X7G7Pi{2*f-Mmxfseu9*6RAvTrudoK2WzWDxAiFZs>UDPoM;IJ-H14ENAvkJECW> z`g_Q1fCXJP^^U28vKZ|N__aY9OpC613GLDRaeH2J`phYBUmcl_uJ46~Bh(MZsK%z_ zV=u`?Ph$l@odOx(FVOi0vWO%fqVpPh3?e@u){S=fkk0q9S@)F7;;=)!q~)*hA?Jr9 z`V^u#d5@pGxj5q%#~a?IlUh4R=cQ9DWgEdC_wlmyShC2I9O+Dwg1>xzV6Q_a{PSxd zPVr!Jm{|LSEsxcqVKobRvh2!7h^9M-Vje#Ju<(E^4`|o^l$_+i=cWxCtCVS;V-1oN z6DvDPs!1j0&sxlJmzJzF<$_|8TfiRD4WK3fIoa7+j-G}%b@mH_R+7_ks^A>YFN9$a zMSsW7C!4Dlk)9Qbuui{#7%~_JYp*holj1)6brJ}BjnoCOTZ_?B^-YsU-$XXU)p18{FI@Eeg z?p#E~mxh|E4&wxzB?=-98Y-&p;PXb4+7F4jM_E>aEM<-AiimX83Ivb5oKED!+|M9G zuf2vd!(g{_OMH3p%_%kH-__~q-ZI3ziHVBJ7R|T1x)k)s5w5?v%ZfUG9N7?b>PB|* zSGY*0kCpV=lKXjfZl9NWCYdSL&j6kzTz21A+KmRk{O$zTQx3>Gy$QZU6_{d~(wRbO zrxI&^g=>TAq!93^eS$sN&{`}(W9&daIi~~-&Vf*=fdT@A>P29JbGDRk3OKv6AbF0W{M{<9ZEqHbB&C%5Kjx-aS9sACce1f}KY9-6wXy!rt zF|pF0lS;FiB}bCZP1(#21x76-u&R1~2(x_&d29 zQ64LmDu^2`3lTb|&@Q;z3)8g2dkaO%Zy(WKOYjTpxQsZW_o<9FLbk@dMOa91u#2$) z3>yx?C^uHE{Bj21Ln`#CpZ`nJft^ZIy+Q}gI4xaKll&PvjeHk!ahY1Ld3)_(XU}P; zlo?mpMJ3R9-Yb<(RqCxzli4mp&p&Cvny^^KWJK7zq~5>?=gln`#mkEY{pKBDXVaFL z_^g2u`B|;cYf-=P`!$l^E4O5JU9Aki$ggdQWk~OhRZqZs0Skkfi3!-oK~2uTNbh86 zOmerx$Xa$c#_IN%7dTxUK2CxY8)84hu8)ergSnE;qZiRo(mXz}=J}$%4Eq7Y7p*u5 zYejbG;`uYWN!S!-VHF=Vr}o;qqnT9%`e&d$*Qo-96`yUw0QM;PT{>&y#%pdLpSUU& z+Qor}}0eMQa=59d1L9YaczyJfSSls;|6#zo*rOrn*IY#NLCWfGmZk5S0?r=>l(gN}? z_}3c_7ue2?EG%9&7IePt^j}2O=m$S&pZ{y!U{s}Nt(4*j*#n5cGD8`*d+RSVw&NKT z6IxiDX(=N1L|U^&JWjOt<-;1M=Fe-i@2j074@XBwYrOP^@N|EF z@L4y3_x0a(h^m!J@k;$!;R@E77^(x}V2<>Q#oi0!^ijqUDu|qvEeWr(Zn1(8?~%^4 z{ewhyc;w6L%A%25U9A%pEK-t+wfU}#!#uj5v^YpW*xAw2 zasuEC2=2%;;U=@q*gQNu1oSl6fQ*>BfS&;Cd?+4I5aY*Z?;+!0_s^dvjD*II;JBC2 zOnQU?B^dN7KWunG*X>pjou#A$f3r(|f7d+EqaU0i_|$7mcE-Cqz4Ftc;es@-sH?71 z>13E_TNI2#_njVy>%JoMBZ`+>iWh1`cJ9cap(|rw+kO1|=bY=gMLY=vcfuL^-@Coj zf16>~n~aUYEWV#THraG?asr+rlY86FE;FDY1CtmO4dC4S(&D{%tAHb&v1|ga)CW)*vVCzp+ z{`~r>&X=Z!kNpE_V(;VQ_*siraqrD}v3@A_v=B5k+pTCe<$6|s0hTJL|KZQ{`9|`t%PK8f(Te%fbk@Z zIhyKf`Pi;xd6TeVwO5SWd^(-6xDVCj34#a5=m?*?oVRp^_Isw=l*mHs0pw2v{THz3@j7jqopvt$-@vIG^H={qJUJ9k8E`|eV5E0Mr`OsJ(HzVRV4p$2L9y0ZjBo5Dsqx*wTkK9-d>nV?r{qV zK{Uumy=Jie)Ecl#cSE5GXvGE#$NTk-aTA1ziZH+yS`L;=l>zkWX}kb3WphKCd863; z*Mna@F4JDmgiTv#YQ=?wvL`lAPfr_ugI^spNc+binG+jz|N9dWKEJqxx()A#jWcEJ zjq!(8)@Gd_f~UU}Oc4A@>rb2zi1mao*dGk0{Q>Lq;G$DVyn4~ga+9?VM(Maou{!uVoCwF3 z!I#Bhs-rd7TC#KB>(%bz)2a4p#1X&5MAxCE`GKK0bGfj;L$$P#phADld97aalxh~Vo1@kenA zz8RWmRQ&@0yxG}ptgqXKg)NiG>CeL%uS$=;)Yj_YMt*h%5v*W9<@Qr*ma@}b(3n7N z3*-MZmq!$u#OqALsiaO%hSO*?1wLCLAt!NKJ^n$^R{=>Mn4{fVtFNYf0Y|Z4f(;G^O!zz?TZyxSBTMWiJ_{Y? ztzo?eqJ02Rm|?h1ie=g$QQtTOb$f*l3`J(|q!cU4fy4-SiJV+qp~q87aE0xE$kRtC z^B)j>%d#`p+nfMh(;MGkaN+zQ1{`+7(8KiN=l|?P?g+Vbl>bzm`N_>H;(ygu;$SC7 zWao%tH|Y$Wq9lIs?+Fa{uX(N^`dTUVaa6q(+P<~hB5$nSyv@h7HHp?;{XO-RJ5gYW z1?+;;3Ns#za&BUE;$YtvX@t)SRC4NcaQbrPrvN~3KsbC!nAx8O+Q5I-6v2WSzN1VB z$WEBkc6Q!G_o-GK9t_dI(0sJIU=fc{M0$bre5TxPVP2IY(AwG0D?UQyko`+Uvnwyv z$0w@$#;3F<%>~R6+V{0NvrD@uCS=z?`-+m!xfuhY004gKW?vT<9}DK|HGl>gyzZ4I z*i`7AdR$jaKAjh8!C9UV*f6q^-K zJORhP-z=^B5646EkXUggMcjm)v20?)2H=kO@LuJgciIBynDPBPiKZd(*Tw%mRTIQw ztUjeLGJ5TFo@=pXLgXiXDnv#?qAjpt!Se`H8CXT&9-6)>?}ofxaq2ofHu%ceeK@MB zE5F}+o>SDSlw0s23)+E)uwDaj1ajyAKDNJ~A_@<)YJ_CNy)rHrL#tZyO`48V4Z@vy zDXqi61C?`P1_3cKHG|Q{SC-uEot>ktsr1dR`D@_|yn~YxqJn+;qZKT55qd!ZuRV(B znm$s{iyQ&~zqM5m!k`icz$TolrpzB@F(~l$*9p*{0so=L20H1PZLsbDZU8_TQ__G> zm5^W(cWE&(U4*{iG6<-^oDc>C9f&6i4!#7fA{rS;zBovr?+@y4;}B;7<|vK7|8T4>!kFG*V1*TbH9K8-n{Mh-62Eb;6tnDrrAqtcvs+u0kHXVikEH*V z0SxW~POhA_=mOiKcE%sZ;kx3cQ*j3S*l-Gog78Ssft*9!^rQ~B)d6>3bA_)ulNO49 zXom&}l{oZ(_xFL+ToMRGM=jlU@6C@u8c^X;NATP#eDL8p>i_wZ?VP#P#5SNDA2H2lzHP3sAt6zd zzI)}{Mw6(38!K#Q&0cY={%yICqv<{ljxO9^_os^wJfv99srnSB$9NkeQWC91VBufy zfgf+=%ve0YPZiIXdJpLAwFZxYC$_Z(K8MWF4Os7h=|JBL?MIgUaR^#H4eWl@=4OQs zrWzPye8CAjdrt!cayXP48NvLFuotV^D%W0K1!ELQ;4Yz|)Jp0<=MkgXK7Nie-n&j?Dw%NATrvIf>&`-wt6Mo}-woT8L&=BQujkL51D_qzY_ zt8?_A?>+9H-mD)iA_a6NcB<(1*I%-ta3`4)x8G;ess6yCXj%{b0(b!kpu7%Z1kOI~ zokAKWaNmv^EV}%)IY>MUb1sK*`18o2dkjc!xOrn^>LprdFeC8`=92vgizUQqH(H)q zz)Ef4z-V`ICHY3wM~nWArkCq0Z~j2rG3CJz?WUZ|8>tDqVX5e^W+ci&v7hq}+w@bzy1`EY)ws2u3B+vdVvWav;aIf-(*IgJIz%XO!EmHjp#x2^ z)4z;g06H8H!q^P~!c~Icr3O@DDYVJ6)tPxT5vq`W14n>>$Ln7}$RkI{x{%FDlu33ab}VzOo%1rph)ChV<$-{afQMcBAi?5${XM<0gCtx zMoIURh--@BfCePM+S_?73zoALLES|gnAZnWKN5X*>&`E<@!W{uOyOlFZj~^k96+6u ziZ0x?l74|y{CG^l{GKPx+&Y|DAYesUR1{Ru5V{FZ0X+EdO=0%|Ki%T|uaoLIHUpe- z*%xwUO~99d((L6-NfRNR!D1_1F0O1?hRa$LD4JpWf*WnGWkc7};zLz3{Chz+NEYjw zSmZ%a`Lg5jz-}8AXR_AKV%ke=_+#z?b%-J*|LIAb)ALNQ2y)|KQN_%+Rl!esN!2I4*t)$99l|o{2x~oT3YSG-cam|W>Eg`%Xs|Qh zdGhGP2Y8UrgO0snZF6x*5~_pIjel?#9sMb+hk$TVQ>q0tMXTaPu|;lH;IGOJos84L zt$_#jYW%ldpMk1ci{%(rX?0cf)%wOnHLH`tLy7yS zHfyZfW8#i%)H4T;Q5Y5!1<00l?ti>_P-w7MvEz(Whg0=sZPfomnnN3U$t}A&(3Fj$ zBasKqZ;;G>r(SD#5*w{2u$%hiZnN#9q_Lz&zkG!$>F>em#kQ#R(Y%ap>$imWb~gvH zAlqqyJ@fi>mu#{|$jxOT!XFcXE?_+;er<;@_i{ zd*r$Zopc6QO$D-FIrKDVZ^yE3t{)B2t_~_|nunC!TUL?;V(e)61c1_KRh|RZewPw0 zOOBhgjiv=4=t9*nSO`D>3AQ(9I+O`^F8ma)?BlyEnikZV(?RJCoaw-BAj^1N63bTY zjipq<4aY?A{)O)rV zCD>XK+&P1e7_`O*tl2V4!yLKEV9pD?r_qgiQ+xTM8KYT7SQjZgRnEgd;Vt#8$C zQRzl0NGlN=fq5@`6wqY9f4`d9j$MHK*Z(>qDI?A;02{qeiOWZt_JStO7`zQyEF7Gi zJPG;DSAVey(Qod%m8UOiB2K3C%amN{A|ss_ivS>op#*eD+}aY3$6=5fZNl$l$VP0V z&QAetfL7NgG~kog8i3{o;&oWRW_(=Cu6QVsf68^c^X67zM2X#fp!uOr=h8{UIn25i zp%$NPu@ra&lB`^N5VFGW4i>}%|1O|9%xuFh^Pl`95%xN^OgJv!hcM4*I;&?1pKEy= zUuw2qno+adyieqn)`vxZXxpsPL?5($Y<#7xL&|LPVSj3CW-yBm>k8UoAnK^n1MxhN zUH86q15h>`iS8d%&WU^;2y3oSJR6bCg!P z_vH&e+1;@lNhQy&J<(gNiK^F+-|jpMzxhr)YYj5gN5?CVDpk(RuLu>iUnFW@NqLJ{?FB?^4%qy=ij)nx z`GH=(bOWDXzc;-8ixGWc8eghT1G}?At|a`#c-|0L+lcHgZa(fGj!WR#%-EKLpUE=w z41R?63p}_;|Nk%izj~Ey5F3rIf0x{!m9l&|!SWAn;}|8gSro*RcFiqiai?k!EYnPq zv@y>5t7%@WmY7k>vWJ-G72YKc3VChF>r6nbp#6;}uf&kZPSm6GVcm{5YkcV?zIyzo z3&v?WoJ`^A>WZ7FFb;hI?4#O&v zARP#n>V)f+oTPF!1u}%ior~bN(zKI%rvVFac&?lOdvsg21iS)cu=c_W{=t%)c0z!4 zu0j$%SMCYyzp( Date: Fri, 8 Mar 2024 18:00:23 +0100 Subject: [PATCH 37/41] yeah --- EXERCICES_S2/modif.png | Bin 6067 -> 66952 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EXERCICES_S2/modif.png b/EXERCICES_S2/modif.png index e30b76788a454b17860dd894705ee3adc423e142..a876244f4b06207b0f4f0fbf010319308d9d9149 100644 GIT binary patch literal 66952 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 SL7VGk@WXN1?s$Xc%l{h+R^;FS literal 6067 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 Date: Fri, 8 Mar 2024 18:00:41 +0100 Subject: [PATCH 38/41] yeah? --- EXERCICES_S2/TP4_Photoshop.ipynb | 281 ++++++++++++++++++++++++++----- 1 file changed, 238 insertions(+), 43 deletions(-) diff --git a/EXERCICES_S2/TP4_Photoshop.ipynb b/EXERCICES_S2/TP4_Photoshop.ipynb index 8d55ba524..0a559113a 100644 --- a/EXERCICES_S2/TP4_Photoshop.ipynb +++ b/EXERCICES_S2/TP4_Photoshop.ipynb @@ -152,38 +152,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Exception in Tkinter callback\n", - "Traceback (most recent call last):\n", - " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 1948, in __call__\n", - " return self.func(*args)\n", - " ^^^^^^^^^^^^^^^^\n", - " File \"C:\\Users\\Sabri\\AppData\\Local\\Temp\\ipykernel_6156\\1297232671.py\", line 10, in \n", - " Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", - " ^^^^^^^^^^^^^^^^\n", - " File \"C:\\Users\\Sabri\\AppData\\Local\\Temp\\ipykernel_6156\\2135464311.py\", line 17, in charger\n", - " photo = ImageTk.PhotoImage(img)\n", - " ^^^^^^^^^^^^^^^^^^^^^^^\n", - " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\site-packages\\PIL\\ImageTk.py\", line 127, in __init__\n", - " self.__photo = tkinter.PhotoImage(**kw)\n", - " ^^^^^^^^^^^^^^^^^^^^^^^^\n", - " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 4129, in __init__\n", - " Image.__init__(self, 'photo', name, cnf, master, **kw)\n", - " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 4062, in __init__\n", - " master = _get_default_root('create image')\n", - " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", - " File \"c:\\Users\\Sabri\\anaconda3\\Lib\\tkinter\\__init__.py\", line 319, in _get_default_root\n", - " raise RuntimeError(f\"Too early to {what}: no default root window\")\n", - "RuntimeError: Too early to create image: no default root window\n" - ] - } - ], + "outputs": [], "source": [ "create=True\n", "#Fonctions auxiliaires \n", @@ -214,16 +185,37 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ + "create=True\n", + "#Fonctions auxiliaires \n", "def filtre_vert():\n", " mat=load(nomImgCourante)\n", " for i in range(mat.shape[0]):\n", " for j in range(mat.shape[1]):\n", " mat[i,j]=(0,mat[i,j,1],0)\n", - " modify(mat)\n", + " modify(mat) \n", + "\n", + "fenetre = tk.Tk()\n", + "fenetre.title(\"Mon Petit Photoshop\")\n", + "fenetre.geometry(\"600x600\")\n", + "placement=tk.Frame(fenetre)\n", + "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", + "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", + "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", + "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", + "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", + "Button1.grid(row=0 , column=0)\n", + "Button2.grid(row=1, column=0)\n", + "Button3.grid(row=3, column=0)\n", + "Button4.grid(row=2, column=0)\n", + "placement.grid()\n", + "\n", + "\n", + "fenetre.mainloop()\n", + "\n", "\n" ] }, @@ -236,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -246,9 +238,41 @@ " mat=load(nomImgCourante)\n", " for i in range(mat.shape[0]):\n", " for j in range(mat.shape[1]):\n", - " pass\n", + " mat[i,j]=(0.2125*mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])\n", " # calcul de la teinte de gris du pixel (CIE709)\n", - " modify(mat)\n" + " modify(mat) \n", + "create=True\n", + "\n", + "#Fonctions auxiliaires \n", + "def filtre_vert():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0,mat[i,j,1],0)\n", + " modify(mat) \n", + "\n", + "fenetre = tk.Tk()\n", + "fenetre.title(\"Mon Petit Photoshop\")\n", + "fenetre.geometry(\"600x600\")\n", + "placement=tk.Frame(fenetre)\n", + "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", + "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", + "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", + "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", + "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", + "Button5=tk.Button(placement, text=\"Filtre Gris\", command=gris)\n", + "Button1.grid(row=0 , column=0)\n", + "Button2.grid(row=1, column=0)\n", + "Button3.grid(row=4, column=0)\n", + "Button4.grid(row=2, column=0)\n", + "Button5.grid(row=3, column=0)\n", + "placement.grid()\n", + "\n", + "\n", + "fenetre.mainloop()\n", + "\n", + "\n", + "\n" ] }, { @@ -260,17 +284,61 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ + "create=True\n", "def noirBlanc():\n", " mat=load(nomImgCourante)\n", " for i in range(mat.shape[0]):\n", " for j in range(mat.shape[1]):\n", - " pass\n", + " mat[i,j]=(0.2125* mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])>127\n", " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", - " modify(mat)" + " modify(mat)\n", + "\n", + "def gris():\n", + " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", + " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0.2125*mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])\n", + " # calcul de la teinte de gris du pixel (CIE709)\n", + " modify(mat) \n", + "\n", + "#Fonctions auxiliaires \n", + "def filtre_vert():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0,mat[i,j,1],0)\n", + " modify(mat) \n", + "\n", + "fenetre = tk.Tk()\n", + "fenetre.title(\"Mon Petit Photoshop\")\n", + "fenetre.geometry(\"600x600\")\n", + "placement=tk.Frame(fenetre)\n", + "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", + "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", + "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", + "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", + "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", + "Button5=tk.Button(placement, text=\"Filtre Gris\", command=gris)\n", + "Button6=tk.Button(placement, text=\"Noir/Blanc\", command=noirBlanc)\n", + "Button1.grid(row=0 , column=0)\n", + "Button2.grid(row=1, column=0)\n", + "Button3.grid(row=4, column=0)\n", + "Button4.grid(row=2, column=0)\n", + "Button5.grid(row=3, column=0)\n", + "Button6.grid(row=5, column=0)\n", + "placement.grid()\n", + "\n", + "\n", + "fenetre.mainloop()\n", + "\n", + "\n", + "\n" ] }, { @@ -282,17 +350,144 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 62, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Sabri\\AppData\\Local\\Temp\\ipykernel_6156\\1517344019.py:78: RuntimeWarning: overflow encountered in scalar add\n", + " mat[i,j]=(mat[i,j,0] + mat[i,j,1] +mat[i,j,2])//3\n" + ] + } + ], "source": [ + "import tkinter as tk\n", + "import numpy as np\n", + "import PIL as pil\n", + "from PIL import Image\n", + "from PIL import ImageTk \n", + "from tkinter import filedialog\n", + "from tkinter import simpledialog\n", + "\n", + "def save(matPix, filename):\n", + " Image.fromarray(matPix).save(filename)\n", + "\n", + "def load(filename):\n", + " return np.array(pil.Image.open(filename))\n", + "\n", + "create=True\n", + "nomImgCourante=\"\"\n", + "nomImgDebut = \"\"\n", + "\n", + "def charger(widg):\n", + " global create\n", + " global photo\n", + " global img\n", + " global canvas\n", + " global dessin\n", + " global nomImgCourante\n", + " global nomImgDebut\n", + " filename= filedialog.askopenfile(mode='rb', title='Choose a file')\n", + " img = pil.Image.open(filename)\n", + " nomImgCourante=filename.name\n", + " nomImgDebut = filename.name\n", + " photo = ImageTk.PhotoImage(img)\n", + " if create: \n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " dessin = canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", + " create=False\n", + " \n", + " else:\n", + " canvas.grid_forget()\n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " dessin=canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", + "\n", + "def modify(matrice):\n", + " global imgModif\n", + " global nomImgCourante\n", + " save(matrice,\"modif.png\")\n", + " imgModif=ImageTk.PhotoImage(file=\"modif.png\")\n", + " canvas.itemconfigure(dessin, image=imgModif)\n", + " canvas['width'] = imgModif.width()\n", + " canvas['height'] = imgModif.height()\n", + " nomImgCourante=\"modif.png\"\n", + "\n", + "def reaffiche():\n", + " global imgDebut\n", + " global nomImgCourante\n", + " if not create :\n", + " imgDebut=ImageTk.PhotoImage(file=nomImgDebut)\n", + " canvas.itemconfigure(dessin, image=imgDebut)\n", + " canvas['width'] = imgDebut.width()\n", + " canvas['height'] = imgDebut.height()\n", + " nomImgCourante = nomImgDebut\n", + " \n", + "\n", + "create=True\n", "def zoom():\n", " mat=load(nomImgCourante)\n", " #créer une matrice de largeur et hauteur deux fois plus grande \n", + " for i in range(mat.shape[0]*2):\n", + " for j in range(mat.shape[1]*2):\n", + " mat[i,j]= np.array(mat[i//2,j//2])\n", + " modify(mat)\n", + "\n", + "def noirBlanc():\n", + " mat=load(nomImgCourante)\n", " for i in range(mat.shape[0]):\n", " for j in range(mat.shape[1]):\n", - " pass\n", - " modify(mat)" + " mat[i,j]=(mat[i,j,0] + mat[i,j,1] +mat[i,j,2])//3\n", + " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", + " modify(mat)\n", + "\n", + "def gris():\n", + " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", + " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0.2125*mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])\n", + " # calcul de la teinte de gris du pixel (CIE709)\n", + " modify(mat) \n", + "\n", + "#Fonctions auxiliaires \n", + "def filtre_vert():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0,mat[i,j,1],0)\n", + " modify(mat) \n", + "\n", + "fenetre = tk.Tk()\n", + "fenetre.title(\"Mon Petit Photoshop\")\n", + "fenetre.geometry(\"600x600\")\n", + "placement=tk.Frame(fenetre)\n", + "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", + "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", + "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", + "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", + "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", + "Button5=tk.Button(placement, text=\"Filtre Gris\", command=gris)\n", + "Button6=tk.Button(placement, text=\"Noir/Blanc\", command=noirBlanc)\n", + "Button7=tk.Button(placement, text=\"zoom\", command=zoom)\n", + "Button1.grid(row=0 , column=0)\n", + "Button2.grid(row=1, column=0)\n", + "Button3.grid(row=4, column=0)\n", + "Button4.grid(row=2, column=0)\n", + "Button5.grid(row=3, column=0)\n", + "Button6.grid(row=5, column=0)\n", + "Button7.grid(row=6 , column=0)\n", + "placement.grid()\n", + "\n", + "\n", + "fenetre.mainloop()\n", + "\n", + "\n", + "\n" ] }, { From bb8645366cc6f2ae30308415d597245e50e4919f Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Sun, 17 Mar 2024 11:56:39 +0100 Subject: [PATCH 39/41] yea --- EXERCICES_S2/TP4_Photoshop.ipynb | 368 +++++++++++++++++++++++++++++++ 1 file changed, 368 insertions(+) create mode 100644 EXERCICES_S2/TP4_Photoshop.ipynb diff --git a/EXERCICES_S2/TP4_Photoshop.ipynb b/EXERCICES_S2/TP4_Photoshop.ipynb new file mode 100644 index 000000000..59562e1f0 --- /dev/null +++ b/EXERCICES_S2/TP4_Photoshop.ipynb @@ -0,0 +1,368 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Petit Photoshop" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Importer les librairies suivantes :" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tkinter as tk\n", + "import numpy as np\n", + "import PIL as pil\n", + "from PIL import Image\n", + "from PIL import ImageTk \n", + "from tkinter import filedialog\n", + "from tkinter import simpledialog" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter les fonctions `save`et `load`à votre code." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def save(matPix, filename):\n", + " Image.fromarray(matPix).save(filename)\n", + "\n", + "def load(filename):\n", + " return np.array(pil.Image.open(filename))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter la fonction `charger` qui permet d'afficher une image dans un canevas dans la colonne 1 d'une grid." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "create=True\n", + "nomImgCourante=\"\"\n", + "nomImgDebut = \"\"\n", + "\n", + "def charger(widg):\n", + " global create\n", + " global photo\n", + " global img\n", + " global canvas\n", + " global dessin\n", + " global nomImgCourante\n", + " global nomImgDebut\n", + " filename= filedialog.askopenfile(mode='rb', title='Choose a file')\n", + " img = pil.Image.open(filename)\n", + " nomImgCourante=filename.name\n", + " nomImgDebut = filename.name\n", + " photo = ImageTk.PhotoImage(img)\n", + " if create: \n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " dessin = canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", + " create=False\n", + " \n", + " else:\n", + " canvas.grid_forget()\n", + " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", + " dessin=canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", + " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ajouter la fonction `modify(matrice)` qui permet de modifier une matrice de pixels au sein même d'un canevas créé par la methode `charger()`, et la fonction callback `reaffiche` qui permet de réafficher l'image de départ après lui avoir appliqué des effets." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def modify(matrice):\n", + " global imgModif\n", + " global nomImgCourante\n", + " save(matrice,\"modif.png\")\n", + " imgModif=ImageTk.PhotoImage(file=\"modif.png\")\n", + " canvas.itemconfigure(dessin, image=imgModif)\n", + " canvas['width'] = imgModif.width()\n", + " canvas['height'] = imgModif.height()\n", + " nomImgCourante=\"modif.png\"\n", + "\n", + "def reaffiche():\n", + " global imgDebut\n", + " global nomImgCourante\n", + " if not create :\n", + " imgDebut=ImageTk.PhotoImage(file=nomImgDebut)\n", + " canvas.itemconfigure(dessin, image=imgDebut)\n", + " canvas['width'] = imgDebut.width()\n", + " canvas['height'] = imgDebut.height()\n", + " nomImgCourante = nomImgDebut\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Créez une fenêtre tkinter appelée \"Mon Petit Photoshop\", dans laquelle vous mettrez un bouton pour chacune des fonctions de traitement d'image que vous allez écrire. Vous mettrez égalment un bouton pour *charger* une image, un bouton pour *quitter la fenêtre* et un bouton pour *revenir à l'image de départ* en utilisant la fonction callback `reaffiche`. Vous ajouterez également un label contenant votre nom, prénom et numéro d'étudiant. Vous pourrez ajouter un bouton pour sauvegarder l'image, éventuellement sous un nouveau nom. ATTENTION : L'image est placée grâce à la méthode `grid` et elle couvre les colonnes 1 et 2 et les lignes 0,1,2 et 3." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Mise en Page \n", + "1. Vous placerez les boutons pour les fonctions de traitement d'image dans la colonne 0 d'une grid respectivement\n", + " aux lignes 0,1,2\n", + "1. Le bouton `Retour` (pour revenir à l'image de départ) sera placé dans la colonne 0 à l'avant dernière ligne\n", + "1. Le bouton `Charger` sera placé dans la colonne 0 dans la dernière ligne\n", + "1. Le bouton `Quitter` sera placé dans la dernière colonne et la dernière ligne\n", + "1. Le label sera placé juste sous l'image, entre les boutons `Charger` et `Quitter`\n", + " \n", + "Si tout fonctionne, regardez la doc tkinter pour rendre ça un peu plus \"joli\"." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "create=True\n", + "#Fonctions auxiliaires \n", + " \n", + "fenetre = tk.Tk()\n", + "\n", + "#Création des Widgets\n", + "\n", + "\n", + "#Positionnement des Widgets\n", + "\n", + "\n", + "#Lancement de la boucle \n", + "fenetre.mainloop()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modifiez les fonctions du TD précédent pour qu'elles deviennent des fonctions callback qui s'appliquent directement sur l'image dans le canevas. On donne la première comme exemple." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "def filtre_vert():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " mat[i,j]=(0,mat[i,j,1],0)\n", + " modify(mat)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui permet de transformer une image en couleur en une image en niveau de gris." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def gris():\n", + " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", + " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " # calcul de la teinte de gris du pixel (CIE709)\n", + " modify(mat)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Faire une fonction qui permet de transformer une image en couleur en une image en noir et blanc." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def noirBlanc():\n", + " mat=load(nomImgCourante)\n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner une fonction qui multiplie par 4 la définition d'une image (chaque pixel donne un carré de 4 pixels)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def zoom():\n", + " mat=load(nomImgCourante)\n", + " #créer une matrice de largeur et hauteur deux fois plus grande \n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner une fonction qui divise par 4 la définition d'une image. Chaque carré de 4 pixels est remplacé par 1 pixel dont la valeur est la moyenne de ces 4 pixels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def shrink():\n", + " mat=load(nomImgCourante)\n", + " #créer une matrice de largeur et hauteur deux fois plus petite \n", + " for i in range(mat.shape[0]):\n", + " for j in range(mat.shape[1]):\n", + " pass\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Combiner les fonctions `zoom` et `shrink` pour obtenir un effet poster (effet de perte de résolution)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def poster():\n", + " mat=load(nomImgCourante)\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Donner une fonction qui effectue une rotation d'une image vers la droite." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def rotate():\n", + " mat=load(nomImgCourante)\n", + " modify(mat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Voici quelques fonctions que vous pouvez implémenter si vous en avez le temps:\n", + "1. modification de la luminosité d'une image (avec un slider pour la sélection)\n", + "1. flou de l'image, chaque pixel est remplacé par la moyenne de ses voisins et de lui-même\n", + "1. bruitage de l'image, chaque pixel est modifié par une valeur aléatoire\n", + "1. implémenter une méthode de dithering pour obtenir une image en noir et blanc plus subtile (au lieu de prendre un seuil\n", + "à 127, on tire aléaoirement la valeur du pixel avec une probabilité qui dépend de sa luminosité)\n", + "1. mode stylo, qui permet avec la souris d'écrire des pixels noirs sur l'image " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.7 ('l1-python')", + "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" + }, + "vscode": { + "interpreter": { + "hash": "7d87edbe593bf1e4e96623606fa487dbb5c6e9299b74648cb83b1cd8ad219f97" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 1e1a06cfac939cbbd5712c1e7276e581dcaf8d41 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 5 Apr 2024 16:59:12 +0200 Subject: [PATCH 40/41] add --- EXERCICES_S2/TP7_crypto.ipynb | 350 ++++++++++++++++++++++++++++++++++ 1 file changed, 350 insertions(+) create mode 100644 EXERCICES_S2/TP7_crypto.ipynb diff --git a/EXERCICES_S2/TP7_crypto.ipynb b/EXERCICES_S2/TP7_crypto.ipynb new file mode 100644 index 000000000..11299fe95 --- /dev/null +++ b/EXERCICES_S2/TP7_crypto.ipynb @@ -0,0 +1,350 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Cryptographie\n", + "\n", + "Nous allons programmer une interface pour chiffrer et déchiffrer un message à partir d'une clé secrète.\n", + "Vous commencerez par créer l'interface graphique suivante : deux zones de saisies de texte `Entry`, pour récupérer\n", + "le message à chiffrer et la clé, deux boutons pour chiffrer et déchiffrer et une zone de saisie pour afficher le résultat (et pouvoir copier le résultat). " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tkinter as tk\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Créer une fonction `decalage(lettre_message,lettre_cle)` qui prend en argument deux caractères ASCII (en python chaine de caractères d'une lettre) et qui renvoie le décalage de la première lettre par la seconde. On rapelle que la fonction `ord(caractere)` donne le code (entier) de `caractere` et que la fonction `chr(code)` qui transforme le code en le caractère correspondant. Les codes ASCII sont sur 8 bits." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b\n", + "a\n", + "97\n", + "122\n" + ] + }, + { + "data": { + "text/plain": [ + "'a'" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "placement=0\n", + "def decalage(lettre_message,lettre_cle):\n", + " indice=ord(lettre_message)-ord(\"a\")\n", + " decal=ord(lettre_cle)-ord(\"a\") \n", + " new_pos=(indice+decal)%26\n", + " return chr(new_pos+ord(\"a\"))\n", + "\n", + "\n", + "\n", + "print(decalage(\"a\",\"b\"))\n", + "print(decalage(\"z\",\"b\"))\n", + "print(ord(\"a\"))\n", + "print(ord(\"z\"))\n", + "chr(97)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. Créer une fonction `chiffrer()` qui lit le message et la clé contenus dans les deux widgets `Entry` et \n", + "applique lettre par lettre la fonction décalage. Si la clé est trop courte, elle est répétée cycliquement.\n", + "Le résultat est affiché dans le widget `Entry` prévu à cet usage. \n", + "Pour afficher dans un widget `Entry` qui s'appelle `entree`, il faut faire `entree.insert(0,texte)`\n", + "et pour effacer le contenu du widget faire `entree.delete(0,tk.END)`. On fera une fonction qui effectuera le calcul et une fonction callback pour l'appliquer à nos textes en entrée." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "kajbjeocpdf\n" + ] + } + ], + "source": [ + "def dec_texte(texte,cle):\n", + " res=\"\"\n", + " for i in range (len(texte)):\n", + " if i%len(cle)==0:\n", + " cle+=cle\n", + " res+=decalage(texte[i],cle[i])\n", + " return res\n", + "\n", + "print(dec_texte(\"jaibiencode\",\"ba\"))\n", + "\n", + "def chiffre():#gère la lecture dans les champs d'entrée et l'affichage du résultat \n", + " if len(entree.cle.get())==0 or len(entree_texte.get()) ==0:\n", + " print('remplir les deux champ')\n", + " else:\n", + " resultat.delete(0,tk.END)\n", + " resultat.insert(0,dec_texte(entree_texte.get(),entree_cle.get()))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. Détecter si le message ou la clé est vide, pour afficher un message d'erreur." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def erreurs(cle):\n", + " if cle == \"\":\n", + " print(\"ERROR: clé vide!\")\n", + " elif cle==None:\n", + " print(\"ERROR: clé vide!\")\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. Créer une fonction `dechiffrer()` qui lit le message et la clé contenue dans les deux widgets `Entry` et déchiffre le message grâce à la clé. Le résultat est affiché dans le `Label` prévu à cet usage.\n", + "En quoi l'opération est différente du chiffrement ?" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "jaibiencode\n" + ] + } + ], + "source": [ + "def decalage_inv(lettre_message,lettre_cle):\n", + " indice=ord(lettre_message)-ord(\"a\")\n", + " decal=ord(lettre_cle)-ord(\"a\") \n", + " new_pos=(indice-decal)%26\n", + " return chr(new_pos+ord(\"a\"))\n", + "\n", + "\n", + "def dec_texte_inv(texte,cle):\n", + " res=\"\"\n", + " for i in range (len(texte)):\n", + " if i%len(cle)==0:\n", + " cle+=cle\n", + " res+=decalage_inv(texte[i],cle[i])\n", + " return res\n", + " \n", + " \n", + " \n", + "\n", + "def dechiffre():\n", + "\n", + "# gère la lecture dans les champs d'entrée et l'affichage du résultat \n", + " if len(entree.cle.get())==0 or len(entree_texte.get()) ==0:\n", + " print('remplir les deux champ')\n", + " else:\n", + " resultat.delete(0,tk.END)\n", + " resultat.insert(0,dec_texte_inv(entree_texte.get(),entree_cle.get()))\n", + "print(dec_texte_inv(\"kajbjeocpdf\",\"ba\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. Tester votre programme en envoyant un message crypté à un de vos camarades et en lui donnant la clé à l'oral (par exemple votre prénom). Il doit être capable de retrouver le texte original." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. Crypter un texte et cacher le dans une image avec le programme du TD précédent et envoyer le résultat à un camarade. Est-il capable de récupérer le message ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "7. Au lieu de chiffrer caractère par caractère, on veut coder bit à bit en appliquant un XOR. \n", + "Donner une nouvelle méthode `chiffre_xor(lettre_message,lettre_cle)` pour remplacer `decalage(lettre_message,lettre_cle)` et tester votre nouvelle méthode cryptage." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u0003\n", + "\u000eC\u0015\u001e\u0010P\u0018\n", + "P\u0019\u0001\u0003\u0019\n", + "c'est un test\n" + ] + } + ], + "source": [ + "def chiffre_xor(lettre_message,lettre_cle):\n", + " return chr(ord(lettre_message)^ord(lettre_cle))\n", + "\n", + "print(chiffre_xor(\"a\",\"b\"))\n", + "\n", + "def dec_texte_xor(texte,cle):\n", + " res=\"\"\n", + " for i in range (len(texte)):\n", + " if i%len(cle)==0:\n", + " cle+=cle\n", + " res+=chiffre_xor(texte[i],cle[i])\n", + " return res\n", + "\n", + "print(dec_texte_xor(\"c'est un test\",\"mdp\"))\n", + "print(dec_texte_xor(dec_texte_xor(\"c'est un test\",\"mdp\"),\"mdp\"))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n", + "7\n" + ] + } + ], + "source": [ + "print(7^2)\n", + "print(5^2)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "ename": "TclError", + "evalue": "invalid command name \".!label\"", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTclError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[54], line 28\u001b[0m\n\u001b[0;32m 23\u001b[0m entree_cle\u001b[38;5;241m=\u001b[39mtk\u001b[38;5;241m.\u001b[39mEntry(fenetre, width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m30\u001b[39m)\n\u001b[0;32m 24\u001b[0m entree_cle\u001b[38;5;241m.\u001b[39mgrid(column\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m,row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m---> 28\u001b[0m ButtonCrypt\u001b[38;5;241m=\u001b[39mtk\u001b[38;5;241m.\u001b[39mButton(fenetre, text\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcrypter\u001b[39m\u001b[38;5;124m\"\u001b[39m,command\u001b[38;5;241m=\u001b[39m\u001b[43mchiffre\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 29\u001b[0m ButtonCrypt\u001b[38;5;241m.\u001b[39mgrid(column\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 31\u001b[0m ButtonDecrypt\u001b[38;5;241m=\u001b[39mtk\u001b[38;5;241m.\u001b[39mButton(fenetre, text\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdecrypter\u001b[39m\u001b[38;5;124m\"\u001b[39m, command\u001b[38;5;241m=\u001b[39mdechiffre())\n", + "Cell \u001b[1;32mIn[54], line 12\u001b[0m, in \u001b[0;36mchiffre\u001b[1;34m()\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mchiffre\u001b[39m():\u001b[38;5;66;03m#gère la lecture dans les champs d'entrée et l'affichage du résultat \u001b[39;00m\n\u001b[0;32m 11\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(entree_cle\u001b[38;5;241m.\u001b[39mget())\u001b[38;5;241m==\u001b[39m\u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(entree_texte\u001b[38;5;241m.\u001b[39mget()) \u001b[38;5;241m==\u001b[39m\u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m---> 12\u001b[0m \u001b[43mresultat\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mremplir les deux champ\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 13\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 14\u001b[0m resultat\u001b[38;5;241m.\u001b[39mdelete(\u001b[38;5;241m0\u001b[39m,tk\u001b[38;5;241m.\u001b[39mEND)\n", + "File \u001b[1;32mc:\\Users\\Jeune\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tkinter\\__init__.py:1702\u001b[0m, in \u001b[0;36mMisc.configure\u001b[1;34m(self, cnf, **kw)\u001b[0m\n\u001b[0;32m 1695\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconfigure\u001b[39m(\u001b[38;5;28mself\u001b[39m, cnf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[0;32m 1696\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Configure resources of a widget.\u001b[39;00m\n\u001b[0;32m 1697\u001b[0m \n\u001b[0;32m 1698\u001b[0m \u001b[38;5;124;03m The values for resources are specified as keyword\u001b[39;00m\n\u001b[0;32m 1699\u001b[0m \u001b[38;5;124;03m arguments. To get an overview about\u001b[39;00m\n\u001b[0;32m 1700\u001b[0m \u001b[38;5;124;03m the allowed keyword arguments call the method keys.\u001b[39;00m\n\u001b[0;32m 1701\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m-> 1702\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_configure\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mconfigure\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcnf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\Jeune\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tkinter\\__init__.py:1692\u001b[0m, in \u001b[0;36mMisc._configure\u001b[1;34m(self, cmd, cnf, kw)\u001b[0m\n\u001b[0;32m 1690\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(cnf, \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m 1691\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getconfigure1(_flatten((\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_w, cmd, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m+\u001b[39mcnf)))\n\u001b[1;32m-> 1692\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtk\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_flatten\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcmd\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_options\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcnf\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[1;31mTclError\u001b[0m: invalid command name \".!label\"" + ] + } + ], + "source": [ + "def dechiffre():\n", + "\n", + "# gère la lecture dans les champs d'entrée et l'affichage du résultat \n", + " if len(entree_cle.get())==0 or len(entree_texte.get()) ==0:\n", + " resultat.config(text='remplir les deux champ')\n", + " else:\n", + " resultat.delete(0,tk.END)\n", + " resultat.insert(0,dec_texte_inv(entree_texte.get(),entree_cle.get()))\n", + "\n", + "def chiffre():#gère la lecture dans les champs d'entrée et l'affichage du résultat \n", + " if len(entree_cle.get())==0 or len(entree_texte.get()) ==0:\n", + " resultat.config(text='remplir les deux champ')\n", + " else:\n", + " resultat.delete(0,tk.END)\n", + " resultat.insert(0,dec_texte(entree_texte.get(),entree_cle.get()))\n", + "\n", + "fenetre=tk.Tk()\n", + "fenetre.title(\"Crypto\")\n", + "fenetre.geometry(\"500x300\")\n", + "entree_texte=tk.Entry(fenetre, width=30)\n", + "entree_texte.grid(column=1,row=0)\n", + "\n", + "entree_cle=tk.Entry(fenetre, width=30)\n", + "entree_cle.grid(column=2,row=0)\n", + "\n", + "\n", + "\n", + "ButtonCrypt=tk.Button(fenetre, text=\"crypter\",command=chiffre())\n", + "ButtonCrypt.grid(column=1,row=1)\n", + "\n", + "ButtonDecrypt=tk.Button(fenetre, text= \"decrypter\", command=dechiffre())\n", + "resultat=tk.Label(fenetre,text=\"resultat\")\n", + "resultat.grid(column=2,row=3)\n", + "ButtonDecrypt.grid(column=2,row=1)\n", + "fenetre.mainloop()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 67d280a09954e0fdd3ee58cbcd06760d08b2d0b1 Mon Sep 17 00:00:00 2001 From: Sabri Kabani Date: Fri, 5 Apr 2024 17:18:01 +0200 Subject: [PATCH 41/41] yesss --- EXERCICES_S2/TP4_Photoshop.ipynb | 675 ------------------------------- EXERCICES_S2/TP7_crypto.ipynb | 74 ++-- 2 files changed, 40 insertions(+), 709 deletions(-) delete mode 100644 EXERCICES_S2/TP4_Photoshop.ipynb diff --git a/EXERCICES_S2/TP4_Photoshop.ipynb b/EXERCICES_S2/TP4_Photoshop.ipynb deleted file mode 100644 index 4b60eb3cc..000000000 --- a/EXERCICES_S2/TP4_Photoshop.ipynb +++ /dev/null @@ -1,675 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Petit Photoshop" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Importer les librairies suivantes :" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import tkinter as tk\n", - "import numpy as np\n", - "import PIL as pil\n", - "from PIL import Image\n", - "from PIL import ImageTk \n", - "from tkinter import filedialog\n", - "from tkinter import simpledialog" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ajouter les fonctions `save`et `load`à votre code." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "def save(matPix, filename):\n", - " Image.fromarray(matPix).save(filename)\n", - "\n", - "def load(filename):\n", - " return np.array(pil.Image.open(filename))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ajouter la fonction `charger` qui permet d'afficher une image dans un canevas dans la colonne 1 d'une grid." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "create=True\n", - "nomImgCourante=\"\"\n", - "nomImgDebut = \"\"\n", - "\n", - "def charger(widg):\n", - " global create\n", - " global photo\n", - " global img\n", - " global canvas\n", - " global dessin\n", - " global nomImgCourante\n", - " global nomImgDebut\n", - " filename= filedialog.askopenfile(mode='rb', title='Choose a file')\n", - " img = pil.Image.open(filename)\n", - " nomImgCourante=filename.name\n", - " nomImgDebut = filename.name\n", - " photo = ImageTk.PhotoImage(img)\n", - " if create: \n", - " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", - " dessin = canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", - " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", - " create=False\n", - " \n", - " else:\n", - " canvas.grid_forget()\n", - " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", - " dessin=canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", - " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ajouter la fonction `modify(matrice)` qui permet de modifier une matrice de pixels au sein même d'un canevas créé par la methode `charger()`, et la fonction callback `reaffiche` qui permet de réafficher l'image de départ après lui avoir appliqué des effets." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "def modify(matrice):\n", - " global imgModif\n", - " global nomImgCourante\n", - " save(matrice,\"modif.png\")\n", - " imgModif=ImageTk.PhotoImage(file=\"modif.png\")\n", - " canvas.itemconfigure(dessin, image=imgModif)\n", - " canvas['width'] = imgModif.width()\n", - " canvas['height'] = imgModif.height()\n", - " nomImgCourante=\"modif.png\"\n", - "\n", - "def reaffiche():\n", - " global imgDebut\n", - " global nomImgCourante\n", - " if not create :\n", - " imgDebut=ImageTk.PhotoImage(file=nomImgDebut)\n", - " canvas.itemconfigure(dessin, image=imgDebut)\n", - " canvas['width'] = imgDebut.width()\n", - " canvas['height'] = imgDebut.height()\n", - " nomImgCourante = nomImgDebut\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Créez une fenêtre tkinter appelée \"Mon Petit Photoshop\", dans laquelle vous mettrez un bouton pour chacune des fonctions de traitement d'image que vous allez écrire. Vous mettrez égalment un bouton pour *charger* une image, un bouton pour *quitter la fenêtre* et un bouton pour *revenir à l'image de départ* en utilisant la fonction callback `reaffiche`. Vous ajouterez également un label contenant votre nom, prénom et numéro d'étudiant. Vous pourrez ajouter un bouton pour sauvegarder l'image, éventuellement sous un nouveau nom. ATTENTION : L'image est placée grâce à la méthode `grid` et elle couvre les colonnes 1 et 2 et les lignes 0,1,2 et 3." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Mise en Page \n", - "1. Vous placerez les boutons pour les fonctions de traitement d'image dans la colonne 0 d'une grid respectivement\n", - " aux lignes 0,1,2\n", - "1. Le bouton `Retour` (pour revenir à l'image de départ) sera placé dans la colonne 0 à l'avant dernière ligne\n", - "1. Le bouton `Charger` sera placé dans la colonne 0 dans la dernière ligne\n", - "1. Le bouton `Quitter` sera placé dans la dernière colonne et la dernière ligne\n", - "1. Le label sera placé juste sous l'image, entre les boutons `Charger` et `Quitter`\n", - " \n", - "Si tout fonctionne, regardez la doc tkinter pour rendre ça un peu plus \"joli\"." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": 16, -======= - "execution_count": 18, ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "metadata": {}, - "outputs": [], - "source": [ - "create=True\n", - "#Fonctions auxiliaires \n", - " \n", - "fenetre = tk.Tk()\n", -<<<<<<< HEAD - "\n", - "#Création des Widgets\n", - "\n", - "\n", - "#Positionnement des Widgets\n", - "\n", - "\n", - "#Lancement de la boucle \n", -======= - "fenetre.title(\"Mon Petit Photoshop\")\n", - "fenetre.geometry(\"600x600\")\n", - "placement=tk.Frame(fenetre)\n", - "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", - "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", - "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", - "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", - "Button1.grid(row=0 , column=0)\n", - "Button2.grid(row=1, column=0)\n", - "Button3.grid(row=2, column=0)\n", - "placement.grid()\n", - "\n", ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "fenetre.mainloop()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Modifiez les fonctions du TD précédent pour qu'elles deviennent des fonctions callback qui s'appliquent directement sur l'image dans le canevas. On donne la première comme exemple." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ -======= - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "create=True\n", - "#Fonctions auxiliaires \n", ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "def filtre_vert():\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(0,mat[i,j,1],0)\n", -<<<<<<< HEAD - " modify(mat)\n", -======= - " modify(mat) \n", - "\n", - "fenetre = tk.Tk()\n", - "fenetre.title(\"Mon Petit Photoshop\")\n", - "fenetre.geometry(\"600x600\")\n", - "placement=tk.Frame(fenetre)\n", - "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", - "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", - "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", - "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", - "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", - "Button1.grid(row=0 , column=0)\n", - "Button2.grid(row=1, column=0)\n", - "Button3.grid(row=3, column=0)\n", - "Button4.grid(row=2, column=0)\n", - "placement.grid()\n", - "\n", - "\n", - "fenetre.mainloop()\n", - "\n", ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Faire une fonction qui permet de transformer une image en couleur en une image en niveau de gris." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 27, ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "metadata": {}, - "outputs": [], - "source": [ - "def gris():\n", - " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", - " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", -<<<<<<< HEAD - " pass\n", - " # calcul de la teinte de gris du pixel (CIE709)\n", - " modify(mat)\n" -======= - " mat[i,j]=(0.2125*mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])\n", - " # calcul de la teinte de gris du pixel (CIE709)\n", - " modify(mat) \n", - "create=True\n", - "\n", - "#Fonctions auxiliaires \n", - "def filtre_vert():\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(0,mat[i,j,1],0)\n", - " modify(mat) \n", - "\n", - "fenetre = tk.Tk()\n", - "fenetre.title(\"Mon Petit Photoshop\")\n", - "fenetre.geometry(\"600x600\")\n", - "placement=tk.Frame(fenetre)\n", - "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", - "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", - "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", - "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", - "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", - "Button5=tk.Button(placement, text=\"Filtre Gris\", command=gris)\n", - "Button1.grid(row=0 , column=0)\n", - "Button2.grid(row=1, column=0)\n", - "Button3.grid(row=4, column=0)\n", - "Button4.grid(row=2, column=0)\n", - "Button5.grid(row=3, column=0)\n", - "placement.grid()\n", - "\n", - "\n", - "fenetre.mainloop()\n", - "\n", - "\n", - "\n" ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Faire une fonction qui permet de transformer une image en couleur en une image en noir et blanc." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ -======= - "execution_count": 45, - "metadata": {}, - "outputs": [], - "source": [ - "create=True\n", ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "def noirBlanc():\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", -<<<<<<< HEAD - " pass\n", - " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", - " modify(mat)" -======= - " mat[i,j]=(0.2125* mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])>127\n", - " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", - " modify(mat)\n", - "\n", - "def gris():\n", - " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", - " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(0.2125*mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])\n", - " # calcul de la teinte de gris du pixel (CIE709)\n", - " modify(mat) \n", - "\n", - "#Fonctions auxiliaires \n", - "def filtre_vert():\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(0,mat[i,j,1],0)\n", - " modify(mat) \n", - "\n", - "fenetre = tk.Tk()\n", - "fenetre.title(\"Mon Petit Photoshop\")\n", - "fenetre.geometry(\"600x600\")\n", - "placement=tk.Frame(fenetre)\n", - "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", - "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", - "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", - "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", - "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", - "Button5=tk.Button(placement, text=\"Filtre Gris\", command=gris)\n", - "Button6=tk.Button(placement, text=\"Noir/Blanc\", command=noirBlanc)\n", - "Button1.grid(row=0 , column=0)\n", - "Button2.grid(row=1, column=0)\n", - "Button3.grid(row=4, column=0)\n", - "Button4.grid(row=2, column=0)\n", - "Button5.grid(row=3, column=0)\n", - "Button6.grid(row=5, column=0)\n", - "placement.grid()\n", - "\n", - "\n", - "fenetre.mainloop()\n", - "\n", - "\n", - "\n" ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Donner une fonction qui multiplie par 4 la définition d'une image (chaque pixel donne un carré de 4 pixels)." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def zoom():\n", - " mat=load(nomImgCourante)\n", - " #créer une matrice de largeur et hauteur deux fois plus grande \n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " pass\n", - " modify(mat)" -======= - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Sabri\\AppData\\Local\\Temp\\ipykernel_6156\\1517344019.py:78: RuntimeWarning: overflow encountered in scalar add\n", - " mat[i,j]=(mat[i,j,0] + mat[i,j,1] +mat[i,j,2])//3\n" - ] - } - ], - "source": [ - "import tkinter as tk\n", - "import numpy as np\n", - "import PIL as pil\n", - "from PIL import Image\n", - "from PIL import ImageTk \n", - "from tkinter import filedialog\n", - "from tkinter import simpledialog\n", - "\n", - "def save(matPix, filename):\n", - " Image.fromarray(matPix).save(filename)\n", - "\n", - "def load(filename):\n", - " return np.array(pil.Image.open(filename))\n", - "\n", - "create=True\n", - "nomImgCourante=\"\"\n", - "nomImgDebut = \"\"\n", - "\n", - "def charger(widg):\n", - " global create\n", - " global photo\n", - " global img\n", - " global canvas\n", - " global dessin\n", - " global nomImgCourante\n", - " global nomImgDebut\n", - " filename= filedialog.askopenfile(mode='rb', title='Choose a file')\n", - " img = pil.Image.open(filename)\n", - " nomImgCourante=filename.name\n", - " nomImgDebut = filename.name\n", - " photo = ImageTk.PhotoImage(img)\n", - " if create: \n", - " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", - " dessin = canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", - " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", - " create=False\n", - " \n", - " else:\n", - " canvas.grid_forget()\n", - " canvas = tk.Canvas(widg, width = img.size[0], height = img.size[1])\n", - " dessin=canvas.create_image(0,0,anchor = tk.NW, image=photo)\n", - " canvas.grid(row=0,column=1,rowspan=4,columnspan=2)\n", - "\n", - "def modify(matrice):\n", - " global imgModif\n", - " global nomImgCourante\n", - " save(matrice,\"modif.png\")\n", - " imgModif=ImageTk.PhotoImage(file=\"modif.png\")\n", - " canvas.itemconfigure(dessin, image=imgModif)\n", - " canvas['width'] = imgModif.width()\n", - " canvas['height'] = imgModif.height()\n", - " nomImgCourante=\"modif.png\"\n", - "\n", - "def reaffiche():\n", - " global imgDebut\n", - " global nomImgCourante\n", - " if not create :\n", - " imgDebut=ImageTk.PhotoImage(file=nomImgDebut)\n", - " canvas.itemconfigure(dessin, image=imgDebut)\n", - " canvas['width'] = imgDebut.width()\n", - " canvas['height'] = imgDebut.height()\n", - " nomImgCourante = nomImgDebut\n", - " \n", - "\n", - "create=True\n", - "def zoom():\n", - " mat=load(nomImgCourante)\n", - " #créer une matrice de largeur et hauteur deux fois plus grande \n", - " for i in range(mat.shape[0]*2):\n", - " for j in range(mat.shape[1]*2):\n", - " mat[i,j]= np.array(mat[i//2,j//2])\n", - " modify(mat)\n", - "\n", - "def noirBlanc():\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(mat[i,j,0] + mat[i,j,1] +mat[i,j,2])//3\n", - " # un pixel est blanc quand sa luminosité est > à 127, noir sinon\n", - " modify(mat)\n", - "\n", - "def gris():\n", - " #On utilisera la conversion CIE709 qui permet de calculer la teinte de gris qui va être affichée dans le pixel\n", - " #La teinte affichée est : gris=0,2125*rouge + 0,0721*bleu + 0,7154*vert\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(0.2125*mat[i,j,0] + 0.7154 * mat[i,j,1] + 0.0721 * mat[i,j,2])\n", - " # calcul de la teinte de gris du pixel (CIE709)\n", - " modify(mat) \n", - "\n", - "#Fonctions auxiliaires \n", - "def filtre_vert():\n", - " mat=load(nomImgCourante)\n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " mat[i,j]=(0,mat[i,j,1],0)\n", - " modify(mat) \n", - "\n", - "fenetre = tk.Tk()\n", - "fenetre.title(\"Mon Petit Photoshop\")\n", - "fenetre.geometry(\"600x600\")\n", - "placement=tk.Frame(fenetre)\n", - "Label1=tk.Label(fenetre, text=\"Sabri Kabani 22300299\")\n", - "Button1=tk.Button(placement, text=\"Retour\", command=reaffiche)\n", - "Button2=tk.Button(placement, text=\"Charger\", command= lambda : charger(fenetre))\n", - "Button3=tk.Button(placement, text=\"Quitter\", command=fenetre.destroy)\n", - "Button4=tk.Button(placement, text=\"Filtre Vert\", command=filtre_vert)\n", - "Button5=tk.Button(placement, text=\"Filtre Gris\", command=gris)\n", - "Button6=tk.Button(placement, text=\"Noir/Blanc\", command=noirBlanc)\n", - "Button7=tk.Button(placement, text=\"zoom\", command=zoom)\n", - "Button1.grid(row=0 , column=0)\n", - "Button2.grid(row=1, column=0)\n", - "Button3.grid(row=4, column=0)\n", - "Button4.grid(row=2, column=0)\n", - "Button5.grid(row=3, column=0)\n", - "Button6.grid(row=5, column=0)\n", - "Button7.grid(row=6 , column=0)\n", - "placement.grid()\n", - "\n", - "\n", - "fenetre.mainloop()\n", - "\n", - "\n", - "\n" ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Donner une fonction qui divise par 4 la définition d'une image. Chaque carré de 4 pixels est remplacé par 1 pixel dont la valeur est la moyenne de ces 4 pixels." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 10, ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "metadata": {}, - "outputs": [], - "source": [ - "def shrink():\n", - " mat=load(nomImgCourante)\n", - " #créer une matrice de largeur et hauteur deux fois plus petite \n", - " for i in range(mat.shape[0]):\n", - " for j in range(mat.shape[1]):\n", - " pass\n", - " modify(mat)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Combiner les fonctions `zoom` et `shrink` pour obtenir un effet poster (effet de perte de résolution)." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 11, ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "metadata": {}, - "outputs": [], - "source": [ - "def poster():\n", - " mat=load(nomImgCourante)\n", - " modify(mat)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Donner une fonction qui effectue une rotation d'une image vers la droite." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 12, ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - "metadata": {}, - "outputs": [], - "source": [ - "def rotate():\n", - " mat=load(nomImgCourante)\n", - " modify(mat)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Voici quelques fonctions que vous pouvez implémenter si vous en avez le temps:\n", - "1. modification de la luminosité d'une image (avec un slider pour la sélection)\n", - "1. flou de l'image, chaque pixel est remplacé par la moyenne de ses voisins et de lui-même\n", - "1. bruitage de l'image, chaque pixel est modifié par une valeur aléatoire\n", - "1. implémenter une méthode de dithering pour obtenir une image en noir et blanc plus subtile (au lieu de prendre un seuil\n", - "à 127, on tire aléaoirement la valeur du pixel avec une probabilité qui dépend de sa luminosité)\n", - "1. mode stylo, qui permet avec la souris d'écrire des pixels noirs sur l'image " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.9.7 ('l1-python')", - "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", -<<<<<<< HEAD - "version": "3.9.7" -======= - "version": "3.11.4" ->>>>>>> 0ba151db94ddf8aefb2e80408978e7c0fd56576b - }, - "vscode": { - "interpreter": { - "hash": "7d87edbe593bf1e4e96623606fa487dbb5c6e9299b74648cb83b1cd8ad219f97" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/EXERCICES_S2/TP7_crypto.ipynb b/EXERCICES_S2/TP7_crypto.ipynb index 11299fe95..07f8ae18a 100644 --- a/EXERCICES_S2/TP7_crypto.ipynb +++ b/EXERCICES_S2/TP7_crypto.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -48,7 +48,7 @@ "'a'" ] }, - "execution_count": 11, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -122,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -144,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -209,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -243,7 +243,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -262,24 +262,9 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 13, "metadata": {}, - "outputs": [ - { - "ename": "TclError", - "evalue": "invalid command name \".!label\"", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTclError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[54], line 28\u001b[0m\n\u001b[0;32m 23\u001b[0m entree_cle\u001b[38;5;241m=\u001b[39mtk\u001b[38;5;241m.\u001b[39mEntry(fenetre, width\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m30\u001b[39m)\n\u001b[0;32m 24\u001b[0m entree_cle\u001b[38;5;241m.\u001b[39mgrid(column\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m,row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m---> 28\u001b[0m ButtonCrypt\u001b[38;5;241m=\u001b[39mtk\u001b[38;5;241m.\u001b[39mButton(fenetre, text\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcrypter\u001b[39m\u001b[38;5;124m\"\u001b[39m,command\u001b[38;5;241m=\u001b[39m\u001b[43mchiffre\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 29\u001b[0m ButtonCrypt\u001b[38;5;241m.\u001b[39mgrid(column\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,row\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m 31\u001b[0m ButtonDecrypt\u001b[38;5;241m=\u001b[39mtk\u001b[38;5;241m.\u001b[39mButton(fenetre, text\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdecrypter\u001b[39m\u001b[38;5;124m\"\u001b[39m, command\u001b[38;5;241m=\u001b[39mdechiffre())\n", - "Cell \u001b[1;32mIn[54], line 12\u001b[0m, in \u001b[0;36mchiffre\u001b[1;34m()\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mchiffre\u001b[39m():\u001b[38;5;66;03m#gère la lecture dans les champs d'entrée et l'affichage du résultat \u001b[39;00m\n\u001b[0;32m 11\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(entree_cle\u001b[38;5;241m.\u001b[39mget())\u001b[38;5;241m==\u001b[39m\u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(entree_texte\u001b[38;5;241m.\u001b[39mget()) \u001b[38;5;241m==\u001b[39m\u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m---> 12\u001b[0m \u001b[43mresultat\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtext\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mremplir les deux champ\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 13\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 14\u001b[0m resultat\u001b[38;5;241m.\u001b[39mdelete(\u001b[38;5;241m0\u001b[39m,tk\u001b[38;5;241m.\u001b[39mEND)\n", - "File \u001b[1;32mc:\\Users\\Jeune\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tkinter\\__init__.py:1702\u001b[0m, in \u001b[0;36mMisc.configure\u001b[1;34m(self, cnf, **kw)\u001b[0m\n\u001b[0;32m 1695\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconfigure\u001b[39m(\u001b[38;5;28mself\u001b[39m, cnf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw):\n\u001b[0;32m 1696\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Configure resources of a widget.\u001b[39;00m\n\u001b[0;32m 1697\u001b[0m \n\u001b[0;32m 1698\u001b[0m \u001b[38;5;124;03m The values for resources are specified as keyword\u001b[39;00m\n\u001b[0;32m 1699\u001b[0m \u001b[38;5;124;03m arguments. To get an overview about\u001b[39;00m\n\u001b[0;32m 1700\u001b[0m \u001b[38;5;124;03m the allowed keyword arguments call the method keys.\u001b[39;00m\n\u001b[0;32m 1701\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m-> 1702\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_configure\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mconfigure\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcnf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32mc:\\Users\\Jeune\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tkinter\\__init__.py:1692\u001b[0m, in \u001b[0;36mMisc._configure\u001b[1;34m(self, cmd, cnf, kw)\u001b[0m\n\u001b[0;32m 1690\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(cnf, \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m 1691\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getconfigure1(_flatten((\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_w, cmd, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m+\u001b[39mcnf)))\n\u001b[1;32m-> 1692\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtk\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_flatten\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcmd\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_options\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcnf\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[1;31mTclError\u001b[0m: invalid command name \".!label\"" - ] - } - ], + "outputs": [], "source": [ "def dechiffre():\n", "\n", @@ -287,15 +272,15 @@ " if len(entree_cle.get())==0 or len(entree_texte.get()) ==0:\n", " resultat.config(text='remplir les deux champ')\n", " else:\n", - " resultat.delete(0,tk.END)\n", - " resultat.insert(0,dec_texte_inv(entree_texte.get(),entree_cle.get()))\n", + " resultat.config(text=tk.END)\n", + " resultat.config(text=dec_texte_inv(entree_texte.get(),entree_cle.get()))\n", "\n", "def chiffre():#gère la lecture dans les champs d'entrée et l'affichage du résultat \n", " if len(entree_cle.get())==0 or len(entree_texte.get()) ==0:\n", " resultat.config(text='remplir les deux champ')\n", " else:\n", - " resultat.delete(0,tk.END)\n", - " resultat.insert(0,dec_texte(entree_texte.get(),entree_cle.get()))\n", + " resultat.config(text=tk.END)\n", + " resultat.config(text=dec_texte(entree_texte.get(),entree_cle.get()))\n", "\n", "fenetre=tk.Tk()\n", "fenetre.title(\"Crypto\")\n", @@ -306,18 +291,39 @@ "entree_cle=tk.Entry(fenetre, width=30)\n", "entree_cle.grid(column=2,row=0)\n", "\n", - "\n", - "\n", - "ButtonCrypt=tk.Button(fenetre, text=\"crypter\",command=chiffre())\n", + "ButtonCrypt=tk.Button(fenetre, text=\"crypter\",command=chiffre)\n", "ButtonCrypt.grid(column=1,row=1)\n", "\n", - "ButtonDecrypt=tk.Button(fenetre, text= \"decrypter\", command=dechiffre())\n", + "ButtonDecrypt=tk.Button(fenetre, text= \"decrypter\", command=dechiffre)\n", "resultat=tk.Label(fenetre,text=\"resultat\")\n", "resultat.grid(column=2,row=3)\n", "ButtonDecrypt.grid(column=2,row=1)\n", "fenetre.mainloop()" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR: Could not find a version that satisfies the requirement tkinter (from versions: none)\n", + "ERROR: No matching distribution found for tkinter\n" + ] + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -342,7 +348,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.12.2" } }, "nbformat": 4,