From 411b7c6022ff66c75d9447e29c323b508930fe72 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Thu, 17 Feb 2022 12:34:00 +0100 Subject: [PATCH] =?UTF-8?q?Feat:=20d=C3=A9but=20des=20=C3=A9tapes=202=20et?= =?UTF-8?q?=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2nd/13_Programmation/1E_tour_d_horizon.ipynb | 119 ++++++------ 2nd/13_Programmation/2E_variables.ipynb | 182 +++++++++++++++++++ 2nd/13_Programmation/3E_conditions.ipynb | 161 ++++++++++++++++ 2nd/13_Programmation/index.rst | 32 +++- 4 files changed, 440 insertions(+), 54 deletions(-) create mode 100644 2nd/13_Programmation/2E_variables.ipynb create mode 100644 2nd/13_Programmation/3E_conditions.ipynb diff --git a/2nd/13_Programmation/1E_tour_d_horizon.ipynb b/2nd/13_Programmation/1E_tour_d_horizon.ipynb index ff77433..619d4b5 100644 --- a/2nd/13_Programmation/1E_tour_d_horizon.ipynb +++ b/2nd/13_Programmation/1E_tour_d_horizon.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "42e99426", + "id": "a895ccc3", "metadata": {}, "source": [ "# Étape 1: Tour d'horizon\n", @@ -11,7 +11,7 @@ }, { "cell_type": "markdown", - "id": "4d43ad4b", + "id": "74bf75e9", "metadata": {}, "source": [ "## Decrire un programme\n", @@ -21,7 +21,7 @@ }, { "cell_type": "markdown", - "id": "d49492cc", + "id": "473bc947", "metadata": {}, "source": [ "### Programme 1" @@ -29,17 +29,28 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "ca80dcab", + "execution_count": 6, + "id": "00e17aa0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello les 2nd\n", + "4\n" + ] + } + ], "source": [ - "print(\"Hello les 2nd\")" + "print(\"Hello les 2nd\")\n", + "a = 2\n", + "print(a + a)" ] }, { "cell_type": "markdown", - "id": "fb207fab", + "id": "114e94e6", "metadata": {}, "source": [ "Description" @@ -47,13 +58,13 @@ }, { "cell_type": "raw", - "id": "7aabc966", + "id": "5542b9fd", "metadata": {}, "source": [] }, { "cell_type": "markdown", - "id": "c5e01d51", + "id": "2261d0a8", "metadata": {}, "source": [ "### Programme 2" @@ -62,7 +73,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5c866894", + "id": "55d73535", "metadata": {}, "outputs": [], "source": [ @@ -77,7 +88,7 @@ }, { "cell_type": "markdown", - "id": "5c822591", + "id": "4bf64258", "metadata": {}, "source": [ "Description" @@ -85,13 +96,13 @@ }, { "cell_type": "raw", - "id": "6f711b5d", + "id": "e289dc8c", "metadata": {}, "source": [] }, { "cell_type": "markdown", - "id": "a8f0ff49", + "id": "248c968b", "metadata": {}, "source": [ "### Programme 3\n" @@ -100,7 +111,7 @@ { "cell_type": "code", "execution_count": null, - "id": "95ca8d78", + "id": "b7a54d74", "metadata": {}, "outputs": [], "source": [ @@ -113,7 +124,7 @@ }, { "cell_type": "markdown", - "id": "82ff2b3e", + "id": "11c8e906", "metadata": {}, "source": [ "Description" @@ -121,13 +132,13 @@ }, { "cell_type": "raw", - "id": "ff4fa059", + "id": "d86c1c23", "metadata": {}, "source": [] }, { "cell_type": "markdown", - "id": "68147e23", + "id": "0387ca4c", "metadata": {}, "source": [ "## Modifier le programme de la momie\n", @@ -141,8 +152,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "9536686d", + "execution_count": 5, + "id": "946e7e2b", "metadata": {}, "outputs": [ { @@ -151,21 +162,21 @@ "text": [ "Tu arrives dans un long couloir et tu avances. Jusqu'à ce que...\n", "Il y a 3 portes devant toi. Laquelle ouvres-tu?2\n", - "Rien!\n", + "Une momie attaque!\n", + "Elle te touche une fois\n", + "Elle te touche une fois\n", + "Elle te touche une fois\n", "Tu arrives dans un long couloir et tu avances. Jusqu'à ce que...\n", "Il y a 3 portes devant toi. Laquelle ouvres-tu?2\n", - "La momie te dévore! Tu perds un point de vie\n", + "Rien! Tu as survécu à une porte en plus.\n", "Tu arrives dans un long couloir et tu avances. Jusqu'à ce que...\n", "Il y a 3 portes devant toi. Laquelle ouvres-tu?2\n", - "Rien!\n", - "Tu arrives dans un long couloir et tu avances. Jusqu'à ce que...\n", - "Il y a 3 portes devant toi. Laquelle ouvres-tu?2\n", - "Rien!\n", - "Tu arrives dans un long couloir et tu avances. Jusqu'à ce que...\n", - "Il y a 3 portes devant toi. Laquelle ouvres-tu?2\n", - "La momie te dévore! Tu perds un point de vie\n", + "Une momie attaque!\n", + "Elle te touche une fois\n", + "Elle te touche une fois\n", + "Elle te touche une fois\n", "T'es mort. Tu n'as plus de points de vie.\n", - "Le jeu est fini, ton score est de 3\n" + "Le jeu est fini, ton score est de 1\n" ] } ], @@ -176,21 +187,25 @@ "def choisir_porte(nombre_portes):\n", " porte_choisie = int(input(\"Il y a \" + str(nombre_portes) + \" portes devant toi. Laquelle ouvres-tu?\"))\n", " return porte_choisie\n", + " \n", " \n", "nombre_portes = 3\n", - "points_de_vie = 2\n", + "points_de_vie = 5\n", "score = 0\n", + "degat_momie = 3\n", "\n", "while points_de_vie > 0:\n", " print(\"Tu arrives dans un long couloir et tu avances. Jusqu'à ce que...\")\n", " porte_momie = randint(0, nombre_portes)\n", " porte_choisie = choisir_porte(nombre_portes)\n", " if porte_choisie == porte_momie:\n", - " print(\"La momie te dévore! Tu perds un point de vie\")\n", - " points_de_vie = points_de_vie - 1\n", + " print(\"Une momie attaque!\")\n", + " for i in range(degat_momie):\n", + " print(\"Elle te touche une fois\")\n", + " points_de_vie = points_de_vie - 1\n", " else:\n", + " print(\"Rien! Tu as survécu à une porte en plus.\")\n", " score = score + 1\n", - " print(\"Rien!\")\n", "\n", "print(\"T'es mort. Tu n'as plus de points de vie.\")\n", "print(\"Le jeu est fini, ton score est de \", score)\n", @@ -199,7 +214,7 @@ }, { "cell_type": "markdown", - "id": "c3fdf1a6", + "id": "89a3387e", "metadata": {}, "source": [ "Maintenant que vous avez un peu joué à ce jeu. Vous allez créer des variantes de ce jeu. \n", @@ -211,7 +226,7 @@ }, { "cell_type": "markdown", - "id": "0394afce", + "id": "8d30a8f4", "metadata": {}, "source": [ "*Variante 1* Modifier le programme pour que chaque ouverture de porte sans momie rapporte 10 points" @@ -220,14 +235,14 @@ { "cell_type": "code", "execution_count": null, - "id": "4138d55d", + "id": "c1b6fc56", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "6a342f0e", + "id": "59ca0f04", "metadata": {}, "source": [ "*Variante 2* Modifier le programme pour que l'on commence avec 5 points de vie mais qu'il n'y ait que deux portes à chaque fois." @@ -236,14 +251,14 @@ { "cell_type": "code", "execution_count": null, - "id": "a2283f54", + "id": "c8756d74", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "6de8db2b", + "id": "524c50c7", "metadata": {}, "source": [ "*Variante 3* On part fixe le nombre de porte à 3. Quelle est la probabilité de tomber sur un momie? Transformer le programme pour la probabilité de tomber sur un momie soit de 3/2." @@ -252,14 +267,14 @@ { "cell_type": "code", "execution_count": null, - "id": "736b4ff0", + "id": "83ca9834", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "cf5d95a7", + "id": "3c1d61e9", "metadata": {}, "source": [ "---\n", @@ -268,7 +283,7 @@ }, { "cell_type": "markdown", - "id": "f353ae11", + "id": "e89d33f2", "metadata": {}, "source": [ "*Variante 4* Le programme comporte un gros bug. Il est possible de ne jamais être dévoré par la momie. Proposer une façon de corriger ce bug." @@ -277,14 +292,14 @@ { "cell_type": "code", "execution_count": null, - "id": "761cdf79", + "id": "22fc7fcf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "ba298be5", + "id": "2857505d", "metadata": {}, "source": [ "*Variante 5* Modifier le programme pour qu'à chaque fois que l'on tombe sur une momie. On ait une chance sur deux de perdre 1 point de vie et une chance sur 2 de ne perdre 2 points de vie." @@ -293,14 +308,14 @@ { "cell_type": "code", "execution_count": null, - "id": "039f2fd1", + "id": "778a6605", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "dc433a7a", + "id": "993bc79b", "metadata": {}, "source": [ "*Variante 6* Ajouter d'autres monstres cachés derière d'autres portes qui enlèves plus ou moins de points." @@ -309,14 +324,14 @@ { "cell_type": "code", "execution_count": null, - "id": "75eaa52a", + "id": "7d4b48e6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "f86952b2", + "id": "3a1cc9d1", "metadata": {}, "source": [ "Variante 7 Étonnez nous avec une variante bien à vous!" @@ -325,14 +340,14 @@ { "cell_type": "code", "execution_count": null, - "id": "b9fafa34", + "id": "5df00726", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "d32bd603", + "id": "f7aff6d5", "metadata": {}, "source": [ "## Bilan\n", @@ -342,7 +357,7 @@ }, { "cell_type": "raw", - "id": "dd41edac", + "id": "e1605a82", "metadata": {}, "source": [ "\n" diff --git a/2nd/13_Programmation/2E_variables.ipynb b/2nd/13_Programmation/2E_variables.ipynb new file mode 100644 index 0000000..5d114e7 --- /dev/null +++ b/2nd/13_Programmation/2E_variables.ipynb @@ -0,0 +1,182 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "431d820f", + "metadata": {}, + "source": [ + "# Étape 2: Variables, affectation et type" + ] + }, + { + "cell_type": "markdown", + "id": "68735bc5", + "metadata": {}, + "source": [ + "Trois types de variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb073084", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "a8e5dc45", + "metadata": {}, + "source": [ + "`input` donne une chaine de caractère. Comment la transformer en int ou float" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "549afdb8", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ef52a1e0", + "metadata": {}, + "source": [ + "Opérations entre les types" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0fa1ffb7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "679b714c", + "metadata": {}, + "source": [ + "## Exercices\n", + "\n", + "Dans les éxercices suivants vous devrez coder un programme qui fait ce qu'il est décrit. Vous pouvez les faire dans l'ordre que vous souhaitez." + ] + }, + { + "cell_type": "markdown", + "id": "39db342d", + "metadata": {}, + "source": [ + "### Variation d'une grandeur\n", + "\n", + "Écrire un programme qui\n", + "\n", + " demande la valeur initiale\n", + " demande le taux d'évolution\n", + " affiche la valeur finale" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "142f5abd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "35b73400", + "metadata": {}, + "source": [ + "## Taux de variation\n", + "\n", + "Écrire un programme qui\n", + "\n", + " demande la valeur initiale\n", + " demande la valeur finale\n", + " affiche le taux d'évolution\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7fb7e8e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "16e4cab9", + "metadata": {}, + "source": [ + "### Coordonnées du milieu\n", + "\n", + "Écrire un programme qui\n", + "\n", + " demande l'abscisse du point A\n", + " demande l'ordonnée du point A\n", + " demande l'abscisse du point B\n", + " demande l'ordonnée du point B\n", + " stock l'abscisse du milieu du segment [AB]\n", + " stock l'ordonnée du milieu du segment [AB]\n", + " affiche les coordonnées du milieu du segment [AB]\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3766249", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "00c3137a", + "metadata": {}, + "source": [ + "### Distance entre deux points\n", + "\n", + "Écrire un programme qui\n", + "\n", + " demande l'abscisse du point A\n", + " demande l'ordonnée du point A\n", + " demande l'abscisse du point B\n", + " demande l'ordonnée du point B\n", + " affiche la distance AB\n", + " \n", + "Pour calculer la racine carré, vous aurez besoin d'importer la fonction `sqrt`. Pour cela, votre programme devra commencer par la ligne suivante\n", + "\n", + " from math import sqrt" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2nd/13_Programmation/3E_conditions.ipynb b/2nd/13_Programmation/3E_conditions.ipynb new file mode 100644 index 0000000..05498f3 --- /dev/null +++ b/2nd/13_Programmation/3E_conditions.ipynb @@ -0,0 +1,161 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "59986333", + "metadata": {}, + "source": [ + "# Conditions\n", + "\n", + "Quand on veut gérer des situations différentes, on utiliser une structure `if`." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "90f79825", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Choisir un nombre (a): 2\n", + "Choisir un autre nombre(b): 4\n", + "a est plus petit que b\n" + ] + } + ], + "source": [ + "a = str(input(\"Choisir un nombre (a): \"))\n", + "b = str(input(\"Choisir un autre nombre(b): \"))\n", + "\n", + "if a > b: # Si\n", + " print(\"a plus grand que b\")\n", + "elif a == b: # Sinon si\n", + " print(\"a est égal à b\")\n", + "else: # Sinon\n", + " print(\"a est plus petit que b\")" + ] + }, + { + "cell_type": "markdown", + "id": "6e39d9d8", + "metadata": {}, + "source": [ + "## Exercices" + ] + }, + { + "cell_type": "markdown", + "id": "21e86bf8", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f719d9ac", + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "56711adc", + "metadata": {}, + "source": [ + "2. **Questions flashs et correction automatique**\n", + "\n", + "Préparer une série de 4 questions flashs simples où la réponse est un nombre ou un mot. Écrire un programme qui demande une réponse aux questions flashs et qui dit si oui ou non la réponse est juste." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "01e13ca3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "7e24624a", + "metadata": {}, + "source": [ + "# Comparaison et logique" + ] + }, + { + "cell_type": "markdown", + "id": "a140ea9c", + "metadata": {}, + "source": [ + "==, !=, <, >, <= et >=" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b60a11dd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "a4a0f415", + "metadata": {}, + "source": [ + "not, and et or" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f3512da", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "4f4b6948", + "metadata": {}, + "source": [ + "## Exercices" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2aad72c0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/2nd/13_Programmation/index.rst b/2nd/13_Programmation/index.rst index 89bfca8..4247e88 100644 --- a/2nd/13_Programmation/index.rst +++ b/2nd/13_Programmation/index.rst @@ -9,6 +9,25 @@ Programmation :summary: TDs de programmation python à faire en salle informatique en demi-groupe. +Le programme +============ + +Contenus + +- Variables informatiques de type entier, booléen, flottant, chaîne de caractères. +- Affectation. +- Séquence d’instructions. +- Instruction conditionnelle. +- Boucle bornée (for), boucle non bornée (while). + +Capacités attendues + +- Choisir ou déterminer le type d’une variable (entier, flottant ou chaîne de caractères). +- Concevoir et écrire une instruction d’affectation, une séquence d’instructions, une instruction conditionnelle. +- Écrire une formule permettant un calcul combinant des variables. +- Programmer, dans des cas simples, une boucle bornée, une boucle non bornée. +- Dans des cas plus complexes: lire, comprendre, modifier ou compléter un algorithme + Présentation ============ @@ -24,20 +43,29 @@ Plan de travail Étape 1: Tour d'horizon des briques de programmation ---------------------------------------------------- +`Tour d'horizon des briques de programmation <./1E_tour_d_horizon.ipynb>`_ + Les élèves commencent par décrire des programmes. Une phrase par ligne de code. Le programme de la momie va les amener à créer plusieurs variantes d'un même programme. Les premières variantes sont justes des modifications de variables mais elles vont pousser les élèves à lire le programme et à chercher quel est le rôle de chaque morceau. Il sera intéressant de discuter de ces rôles en plénière. Le but est que les élèves arrivent à faire au moins ces 3 premières variantes. Les autres variantes seront réservées aux élèves les plus rapides. Au moins 10 minutes avant la fin de l'heure, on forcera les élèves à faire la partie bilan. +Bilan: le programme de la momie avec les mots clé mis en valeur et décrit succinctement. + Étape 2: Variables, affectation et type --------------------------------------- +`Variables, affectation et type <./2E_variables.ipynb>`_ + +Types de données: int, float et string -> input donne un string qu'il est parfois nécessaire de modifier avec int ou float. +Opérations suivant les types de données +Traduction algo en français en programme en python + Étape 3: Conditions if ---------------------- -- programmation d'un QCM -- +`Conditions if <./3E_conditions.ipynb>`_ Étape 4: Boucle for -------------------