Feat: 2 premières séances python pour les 1ST

This commit is contained in:
Bertrand Benjamin 2020-05-05 10:26:00 +02:00
parent 7de4bab059
commit 5e01f15637
5 changed files with 154 additions and 932 deletions

View File

@ -6,10 +6,12 @@
"source": [
"# Projets Python\n",
"\n",
"Dans ce cours autour de la programmation Python et de l'algorithmie, nous verons beaucoup de petits morceaux de programmes. \n",
"Ce notebook contient des petits projets pour s'initier à la programmation `python`. Les premiers sont très simples tandis que les derniers proposent des choses plus compliqués tant niveau programmation que mathématiquement.\n",
"\n",
"Il est vivement recommander de ne pas faire **que** les questions poser mais aussi d'**expérimenter** par soi même.\n",
"\n",
"## Table des matières\n",
"\n",
"* [Introduction à Python](#Introduction-Python)\n",
"* [Générateur d'excuses](#Générateur-d'excuses)\n",
"* [Magic 8 ball](#Magic-8-ball)\n",
@ -17,7 +19,6 @@
"* [Generateur de Smiley](#Generateur-de-simleys)\n",
"* [Pierre feuille ciseau](#Pierre-Feuille-Ciseau)\n",
"* [Chiffrement de Cesar](#Chiffrement-de-Cesar)\n",
"* [Polynome du 2nd degré](#Polynome-du-2nd-degre)\n",
"-----------\n",
"Notions de programmation\n",
"* [input](#input)\n",
@ -25,6 +26,7 @@
"* [Les boucles for](#Boucles-for)\n",
"* [Les boucles while](#Boucles-while)\n",
"* [Les fonctions](#Fonctions)\n",
"\n",
"------------\n",
"Ressouces Python\n",
"* [site du zero](http://openclassrooms.com/courses/apprenez-a-programmer-en-python) (cours en ligne)\n",
@ -33,35 +35,13 @@
"* [checkio](http://www.checkio.org/) (jeu en ligne - anglais - avec beaucoup de langage différents)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Avec Repl.it\n",
"\n",
"Se rendre sur le site de [repli.it](https://repl.it/repls/SpiffyOpulentBackend). \n",
"\n",
"L'interface se sépare en 2 parties:\n",
"\n",
"![interface replit](./fig/replit_global.png)\n",
"\n",
"- **Zone Script**: Éditeur de texte où l'on pourra écrire notre programme python. Pour executer son contenu, il faudra cliquer sur ![replit run](./fig/replit_run.png)\n",
"- **Zone Shell**: Line de commande pour interagir avec python. Ici vous pouvez tester vos commandes python et presser la touche *entrer* pour l'executer. Par contre on ne peut pas écrire sur plusieurs lignes.\n",
"\n",
"Il est conseillé d'utiliser en priorité la **zone script** car elle permet d'écrire sur plusieurs lignes et de corriger après l'execution. La **zone shell** servira à tester des commandes pour voir directement leurs effets. \n",
"\n",
"Pour sauvergarder votre travail, vous cliquerez sur les 3 points à côté de *Files* puis sur *download as zip*.\n",
"\n",
"![replit save](./fig/replit_files.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction Python\n",
"\n",
"Dans les encadrés, il y a du code python. Il faudra le recopier leur contenu dans la zone script et ne pas hésiter à le modifier."
"Dans les encadrés, il y a du code python vous pouvez écrire dedans comme dans un éditeur de texte classique. Pour exécuter les lignes de codes contenues dedans, il faut appuyer sur `shift` et `entrer`."
]
},
{
@ -123,7 +103,7 @@
" \n",
" monde\n",
" \n",
"Quand une ligne commence par un #, Python ne la lit pas. On appelle cela des commentaires. Nous les utiliserons pour expliquer ce que l'on fait."
"Quand une ligne commence par un #, Python ne la lit pas. On appelle cela des **commentaires**. Nous les utiliserons pour expliquer ce que l'on fait."
]
},
{
@ -494,44 +474,6 @@
"* En utilisant les [conditions if](#Condition-if) comparer les deux choix pour determiner qui est le vaincueur."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Polynome du 2nd degre\n",
"\n",
"On veut écrire un programme qui manipule les polynomes du 2nd degré qui l'on améliorera petit à petit.\n",
"\n",
"* Écrire un programme qui demande les valeurs de `a`, `b` et `c` (les coefficients du polynome) et renvoie les racines du polynôme $ax^2 + bx + c$\n",
"\n",
" Valeur de a?\n",
" 4\n",
" Valeur de b?\n",
" 4\n",
" Valeur de c?\n",
" 1\n",
" Delta = 0, il y a une racine:\n",
" x = 0.5\n",
" \n",
"* On veut maintenant améliorer notre programme pour qu'il donne le tableau de signe du polynôme.\n",
"\n",
" Valeur de a?\n",
" 4\n",
" Valeur de b?\n",
" 4\n",
" Valeur de c?\n",
" 1\n",
" Delta = 0, il y a une racine:\n",
" x = 0.5\n",
" Comme a = 4 donc le tableau de signe est \n",
" \n",
" -------------------------\n",
" x | -inf 0.5 +inf\n",
" -----------------------------\n",
" P | + 0 +\n",
" -----------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},

View File

@ -95,6 +95,13 @@
"print(f(-2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Modifier les commandes précédentes pour calculer d'autres images. Vous pouvez aussi entourer le résultat du calcul avec une phrase pour décrire le résultat."
]
},
{
"cell_type": "markdown",
"metadata": {},
@ -102,19 +109,132 @@
"Pour chacune des fonctions suivantes, testées les pour savoir si elles fonctionnents. Une fois que vous ètes sûr qu'elles font bien ce que vous souhaitez, ne les effacées pas et gardez les pour la suite.\n",
"\n",
"* Programmer la fonction $g$ définie par \n",
" $$ g:x \\mapsto x(19 - 2x) $$\n",
" $$ g:x \\mapsto x(19 - 2x) $$\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculer des images par cette fonction et vérifier que les résultats correspondent bien à que l'on attend."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"* Programmer la fonction $h$ qui correspond au programme de calcul suivant\n",
"\n",
" * Choisir un nombre\n",
" * -> Ajouter 2\n",
" * -> Elever au carré\n",
" * -> Soustraire 4\n",
" * -> Soustraire 4"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculer des images par cette fonction et vérifier que les résultats correspondent bien à que l'on attend."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"* Programmer une fonction `celcius2fahrenheit` qui convertit des degrés celcius vers des degrés fahrenheit en utilisant la formule suivante\n",
" $$ (°F) = 1,8 * (°C) + 32 $$\n",
"\n",
"* Programmer la fonction inverse `fahrenheit2celcius`.\n",
" $$ (°F) = 1,8 * (°C) + 32 $$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Convertir en Fahrenheit les températures suivantes\n",
"$$\n",
" 0°C \\qquad 10°C \\qquad 100°C\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Programmer la fonction inverse `fahrenheit2celcius`.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Convertir en Celsius les températures suivantes\n",
"$$\n",
" 0°F \\qquad 100°F \\qquad -10°F\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Les 2 prochaines parties peuvent être faite independament. A vous de choisir celle qui tente le plus."
]
@ -143,7 +263,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Le faire de la sorte peut prendre beaucoup de temps et n'est pas vraiment dans la logique de faire travailler l'ordinateur à notre place.\n",
"Le faire de la sorte peut prendre beaucoup de temps et se serait se priver de faire travailler l'ordinateur à notre place\n",
"\n",
"Pour réaliser plusieurs calculs de façon systématiques, on peut utiliser ** une boucle ** `for`.\n",
"\n",
@ -166,10 +286,30 @@
"source": [
"On peut donc penser que la fonction a un maximum autour de 3.\n",
"\n",
"* Ecrire toutes les conversions 0 à 100 degré celcius en farhenheit\n",
"* Trouver le maximum de la fonction $g$."
"* Ecrire toutes les conversions 0 à 100 degré celcius en farhenheit"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Approcher le maximum de la fonction $g$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},

View File

@ -1,278 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Échauffements\n",
"\n",
"- [ ] Copier-coller blocspar blocs le programme suivant en corrigeant les éventuelles erreurs (il y en a au moins une par bloc)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\"Je veux calculer le périmètre et l'aire de cercles\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"print(\"Pour cela j'ai besoin de Pi\")\n",
"pi = 3.14\n",
"print(\"Je sais que pi vaut pi\")\n",
"print(\"Mais Python connait une valeur approchée plus précise de pi, elle vaut\", math.pi)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(\"Je veux calculer le périmètre d'un cercle\")\n",
"rayon = 3\n",
"print(\"Quand le rayon vaut\", rayon, \"le périmètre vaut\", 2*math.pi*5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(\"On peut en faire une fonction\")\n",
"def perimetre(rayon)\n",
"return 4*math.pi*rayon\n",
"print(\"Le périmètre d'un cercle de rayon 2 est \", perimetre(2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- [ ] Ecrire une fonction qui calcule l'aire d'un cercle à partir de son rayon.\n",
"- [ ] Copier-coller, tester ce bloc puis expliquer avec # ce qu'il fait."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"rayon = 10\n",
"print(\"J'ai un cercle de rayon\", rayon)\n",
"if rayon < 50:\n",
" print(\"C'est un petit cercle.\")\n",
"else:\n",
" print(\"C'est un grand cercle!\")\n",
"print(\"Son périmètre vaut\", perimetre(rayon))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simulation de phénomènes aléatoires\n",
"\n",
"D'après wikipedia\n",
"\n",
" La simulation est un outil utilisé par le chercheur, l'ingénieur, le militaire, etc. pour étudier les résultats d'une action sur un élément sans réaliser l'expérience sur l'élément réel.\n",
"\n",
" Lorsque l'outil de simulation utilise un ordinateur on parle de simulation numérique.\n",
" \n",
"La simulation sert à produire des **données** à partir d'un modèle, d'une expérience. Ces données servent ensuite à valider le modèle ou à analyser l'expérience.\n",
"\n",
"Dans ce TP, vous allez modéliser puis simuler des expériences aléatoires. Il vous faudra d'abord choisir les bons outils pour reproduire informatiquement l'expérience puis la faire jouer par l'ordinateur de nombreuses fois."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Les fonctions random\n",
"\n",
"Par défaut, Python ne sait pas faire d'aléatoire. Il faut donc importer quelques fonctions depuis `random` (aléatoire en anglais)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from random import random, randint, uniform, choice"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Exécutez plusieurs fois les commandes pour vous convaincre qu'elles ne donnent pas toujours le même résultat.\n",
"\n",
"- `random()`: donne un nombre aléatoire entre 0 et 1."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"random()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `randint(a, b)`: donne un entier aléatoire entre a et b."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"randint(4, 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `uniform(a, b)`: donne un nombre aléatoire entre a et b."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"uniform(4, 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `choice(liste)`: choisit aléatoirement un élément de la liste."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Pour définir une liste, on utilise des crochets []\n",
"matieres = [\"math\", \"français\", \"Histoire\"]\n",
"# Choisir au hasard un élément parmi cette liste\n",
"choice(matieres)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"Pour chaque problème qui suit, avant de vous lancer dans sa résolution, réfléchissez à la réponse que vous donneriez intuitivement.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Jeux de dés\n",
"\n",
"On veut jouer à un jeu de hasard, le but est d'avoir le plus haut score. Pour cela nous pouvons choisir l'une des trois situations suivantes:\n",
"\n",
"- Situation 1: On lance deux dés à douze faces numérotées de 1 à 12 et on ajoute les scores.\n",
"- Situation 2: On lance quatre dés à 6 faces numérotées de 1 à 6 et on ajoute des scores.\n",
"\n",
"On supposera que tous les dés sont équilibrés.\n",
"\n",
"**On souhaite savoir quelle est la situation la plus avantageuse.**\n",
"\n",
"Pour répondre à cette question, on propose les étapes suivantes.\n",
"\n",
"1. Simuler la situation 2. Y a-t-il des nombres qui semblent revenir plus souvent que les autres?\n",
"2. Simuler la situation 3. Même question.\n",
"3. Simuler les 2 situations en même temps. Quelle est celle qui semble la plus avantageuse?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dés de Efrons\n",
"\n",
"On dispose de 3 dés à 6 faces équilibrés avec les nombres suivants sur leurs faces.\n",
"\n",
"- A : 1, 6, 11, 12, 13, 14\n",
"- B : 2, 3, 4, 15, 16, 17\n",
"- C : 5, 7, 8, 9, 10, 18\n",
"\n",
"**On souhaite savoir si un dé est plus avantageux que les autres.**\n",
"\n",
"Proposition d'étapes pour répondre à cette question\n",
"\n",
"1. Simuler le lancer de ces 3 dés.\n",
"2. Simuler en même temps les dés A et B. Lequel semble donner le meilleur score?\n",
"3. Faire la même chose avec les dés A et C puis avec les dés B et C.\n",
"4. Y a-t-il un dé plus fort que les autres?\n",
"5. Simuler le lancer des 3 dés en même temps lequel semble le plus fort?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Les dés des Dudu\n",
"\n",
"Dans [le problème des dés des Dudu](https://mathix.org/video/problemes_ouverts/PB_DUDU/PBDUDU7-d%C3%A9.mp4), les deux frères ont chacun deux dés différents:\n",
"\n",
"- Le frère 1: a un dé qui va de 0 à 9 et un dé de 1 à 8.\n",
"- Le frère 2: a un dé de 1 à 12 et un dé classique 1 à 6.\n",
"\n",
"**On veut savoir qui sera le premier à faire 17 en ajoutant le résultat de ses 2 dés.**\n",
"\n",
"À vous de simuler cette situation pour répondre à la question."
]
}
],
"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.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@ -1,232 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simulation et évaluation\n",
"\n",
"Dans ce TP les consignes en orange correspondent à consignes qui seront évaluées. Comme d'habitude, vous avez tout à faire le droit d'échanger avec vos voisins et d'aller chercher des informations dans les TPs précédents.\n",
"\n",
"## Echauffement et pyramide\n",
"\n",
"D'après wikipedia:\n",
"\n",
" La pyramide de Khéops ou grande pyramide de Gizeh est un monument construit par les Égyptiens de l'Antiquité, formant une pyramide à base carrée. Tombeau présumé du pharaon Khéops, elle fut édifiée il y a plus de 4 500 ans, sous la IVe dynastie, au centre du complexe funéraire de Khéops se situant à Gizeh en Égypte. \n",
" \n",
" Ce monument forme une pyramide à base carrée de 440 coudées royales anciennes, soit environ 230,5 mètres. Il est constitué d'environ 2 000 000 blocs de pierre calcaire d'environ 2,5tonnes chacuns. \n",
" \n",
"\n",
"<div style=\"background-color: #fa8258;\">\n",
"Ecrire un programme qui présente cette pyramide. Il devra aussi calculer la périmètre de la base de la pyramide ainsi qu'une estimation de son poid total.\n",
" \n",
"Critères d'évaluations:\n",
"<ul>\n",
" <li> Réspect de la consigne (présentation et grandeurs à calculer)</li>\n",
" <li> Utilisation de variables pour le calcul du périmètre et du poids de la pyramide. </li>\n",
" <li> <strong>Bonus:</strong> le calcule du périmètre se fera avec une fonction.\n",
"</ul>\n",
" <strong> Sauver votre programme dans \"Ordinateur > Ma classe > Restitution de Devoirs\" en le nommant</strong> <code>nom-prénom-pyramide.py</code> (Mettre les 2 noms de familles si vous travaillez à 2).\n",
"</div> \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulation de dés\n",
"\n",
"<div style=\"background-color: #fa8258;\">\n",
"Copier-coller le bloc le programme suivant. Puis commenter (avec #) pour expliquer ce que fait chaque ligne.\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from random import randint # Import de randint qui génère un entier aléatoire entre 2 nombres.\n",
"print(\"--- Simulateur de lancer de dés ---\")\n",
"print(\"Première situation\")\n",
"de1 = randint(1, 6)\n",
"de2 = randint(1, 10)\n",
"resulat1 = de1 * de2\n",
"print(\"La première situation donne\", resulat1)\n",
"print(\"Deuxième situation\")\n",
"resulat2 = randint(1, 8) * randint(1, 8)\n",
"print(\"La deuxième situation donne\", resulat2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div style=\"background-color: #fa8258;\">\n",
"Transformer le programme pour qu'il simule les deux situations suivantes:\n",
"<ul>\n",
" <li> Situation 1: On fait la somme des résultats des lancers de 2 dés à 18 faces.</li>\n",
" <li> Situation 2: On fait le produit des résultats des lancers de deux dés à 3 faces et d'un dé à 4 faces.</li>\n",
"</ul>\n",
"</br>\n",
"Vous ètes invités à apporter toutes les améliorations qui vous semblent interessantes.\n",
"</br>\n",
"</br>\n",
"Vous serez noté suivant les critères suivants:\n",
"<ul>\n",
" <li> Qualité des commentaires qui expliquent le fonctionnement du programme.</li>\n",
" <li> Fonctionnement de votre programme et respect de la consigne.</li>\n",
" <li> Qualité des améliorations apportées.</li>\n",
"</ul>\n",
"<strong> Sauver votre programme dans \"Ordinateur > Ma classe > Restitution de Devoirs\" en le nommant</strong> <code>nom-prénom-simlulation.py</code> (Mettre les 2 noms de familles si vous travaillez à 2).\n",
"</div> \n",
" \n",
"- [ ] Copier-coller le bloc à la suite. Puis commenter."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"if resulat1 > resulat2:\n",
" print(\"La première situation gagne\")\n",
"else:\n",
" print(\"La deuxième situation gagne\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- [ ] Quelle situation semble donner le score le plus grand?\n",
"- [ ] Ouvrir un nouveau fichier, copier-coller le programme suivant puis commenter chaque ligne pour expliquer son fonctionnement."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from random import randint\n",
"\n",
"print(\"--- Simulateur de lancer de dés ---\")\n",
"\n",
"for i in range(10):\n",
" print(\"---------------------\")\n",
" print(\"# Simulation numéro\", i+1)\n",
" \n",
" print(\"Première situation\")\n",
" de1 = randint(1, 6)\n",
" de2 = randint(1, 10)\n",
" resulat1 = de1 * de2\n",
" print(\"La première situation donne\", resulat1)\n",
" \n",
" print(\"Deuxième situation\")\n",
" resulat2 = randint(1, 8) * randint(1, 8)\n",
" print(\"La deuxième situation donne\", resulat2)\n",
" \n",
" if resulat1 > resulat2:\n",
" print(\"-> La première situation gagne.\")\n",
" else:\n",
" print(\"-> La deuxième situation gagne.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"Pour chaque problème qui suit, avant de vous lancer dans sa résolution, réfléchissez à la réponse que vous donneriez intuitivement.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dés de Efrons\n",
"\n",
"On dispose de 3 dés à 6 faces équilibrés avec les nombres suivants sur leurs faces.\n",
"\n",
"- A : 1, 6, 11, 12, 13, 14\n",
"- B : 2, 3, 4, 15, 16, 17\n",
"- C : 5, 7, 8, 9, 10, 18\n",
"\n",
"**On souhaite savoir si un dé est plus avantageux que les autres.**\n",
"<div style=\"background-color: #fa8258;\">\n",
"\n",
"**Vous enregistrez votre programme dans \"Ordinateur > Ma classe > Restitution de Devoirs\" sous le nom** `nom-prénom-deEfron.py`\n",
"\n",
"</div>\n",
"\n",
"Proposition d'étapes pour répondre à cette question\n",
"\n",
"1. Simuler le lancer de ces 3 dés.\n",
"2. Simuler en même temps les dés A et B. Lequel semble donner le meilleur score?\n",
"3. Faire la même chose avec les dés A et C puis avec les dés B et C.\n",
"4. Y a-t-il un dé plus fort que les autres?\n",
"5. Simuler le lancer des 3 dés en même temps lequel semble le plus fort?\n",
"\n",
"Astuces pour simuler les lancés de dés:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"from random import choice\n",
"# On définit les valeurs inscrites sur chaque face\n",
"deA = [1, 6, 11, 12, 13, 14]\n",
"# Python choisi une face au hasard\n",
"print(choice(deA))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Les dés des Dudu\n",
"\n",
"Dans [le problème des dés des Dudu](https://mathix.org/video/problemes_ouverts/PB_DUDU/PBDUDU7-d%C3%A9.mp4), les deux frères ont chacun deux dés différents:\n",
"\n",
"- Le frère 1: a un dé qui va de 0 à 9 et un dé de 1 à 8.\n",
"- Le frère 2: a un dé de 1 à 12 et un dé classique 1 à 6.\n",
"\n",
"**On veut savoir qui sera le premier à faire 17 en ajoutant le résultat de ses 2 dés.**\n",
"\n",
"À vous de simuler cette situation pour répondre à la question."
]
}
],
"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.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@ -1,350 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Listes et fonctions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Graphique de fonctions\n",
"\n",
"Nous allons tracer la représentation graphique de \n",
"\n",
"$$ f : x \\mapsto x^2 - 10x + 20 $$\n",
"\n",
"**Recopier** le programme suivant, **compléter** les pointillés et calculer les images jusqu'à 8."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L'image de ... est ...\n",
"L'image de ... est ...\n"
]
}
],
"source": [
"def f(x):\n",
" return x**2 - 10*x + 20\n",
"\n",
"# image de 0\n",
"print(\"L'image de\", \"...\",\" est\", \"...\")\n",
"# image de 1\n",
"print(\"L'image de\", \"...\",\" est\", \"...\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour tracer le graphique de cette fonction, il faudrait *enregistrer* toutes ces valeurs et donc utiliser des variables. \n",
"\n",
"Mettre plusieurs valeurs dans une seule variable c'est possible, on utilise des `listes` (on les a déjà rencontré plusieurs fois).\n",
"\n",
"**Recopier et compléter** ce programme pour enregistrer les images et les antécédents jusqu'à 10."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L'image de ... est ... On l'ajoute à la liste\n",
"L'image de ... est ... On l'ajoute à la liste\n"
]
}
],
"source": [
"def f(x):\n",
" return x**2/10 - 5\n",
"\n",
"images = [] # La liste est vide\n",
"antecedents = []\n",
"\n",
"\n",
"# image de 0\n",
"print(\"L'image de\", \"...\",\" est\", \"...\", \"On l'ajoute à la liste\")\n",
"antecedents.append(0) # On ajoute (append) 0 à la liste des antecedents\n",
"# image de 1\n",
"print(\"L'image de\", \"...\",\" est\", \"...\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nous allons maintenant enfin pouvoir tracer le graphique.\n",
"\n",
"**Ajouter** la ligne suivante au début de votre programme."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Ajouter** cette ligne à la fin."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.plot(antecedants, images)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vous avez tracer la courbe représentative de de la fonction $f$.\n",
"\n",
"![Représentation graphique de f](./fig/plt_f.png)\n",
"\n",
"Dans un nouveau fichier, **tracer** la courbe représentative pour x allant de 0 à 15 de la fonction $g$ tel que\n",
"$$ g : x \\mapsto -(x - 5)^2 + 5$$\n",
"\n",
"![Représentation graphique de f](./fig/plt_g.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Précision et controle du tracé\n",
"\n",
"Pour le moment, on sait donner un maximum à l'antécédent $x$ mais on ne peut pas contrôler le minimum ni le pas (l'écart en 2 valeurs de $x$). \n",
"\n",
"Or pour tracer précisément la représentation graphique d'une fonction, nous avons besoin de contrôler la **fenêtre** (minimum et maximum) et le **pas**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Boucle `while` (tant que )\n",
"\n",
"Une boucle `while` permet de répeter une ou plusieurs actions **tant qu'** une condition est vérifiée.\n",
"\n",
"Les 2 programmes ci-dessous font la même chose."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"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"
]
}
],
"source": [
"x = 0\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1\n",
"\n",
"print(x)\n",
"x = x+1"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"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"
]
}
],
"source": [
"x = 0\n",
"while x < 10:\n",
" print(x)\n",
" x = x + 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Commenter** le programme avec le `while`.\n",
"\n",
"Que se passe-t-il si on inverse les 2 dernières lignes?\n",
"\n",
"**Réécrire** le programme suivant en utilisant une boucle `while` et en stockant les antécédents."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Les images sont [0.0, 1.0, 1.2246467991473532e-16, -1.0, -2.4492935982947064e-16, 1.0, 3.6739403974420594e-16, -1.0, -4.898587196589413e-16, 1.0, 6.123233995736766e-16, -1.0, -7.347880794884119e-16, 1.0, 8.572527594031472e-16, -1.0, -9.797174393178826e-16, 1.0, 1.102182119232618e-15, -1.0]\n"
]
}
],
"source": [
"from math import sin, pi\n",
"\n",
"def h(x):\n",
" return sin(x*pi/2)\n",
"\n",
"images = []\n",
"antecedants = []\n",
"\n",
"# image de 0\n",
"print(\"L'image de\", \"...\",\" est\", \"...\", \"On les ajoute à la liste\")\n",
"antecedents.append(0)\n",
"images.append(h(0))\n",
"\n",
"# image de 1\n",
"print(\"L'image de\", \"...\",\" est\", \"...\", \"On les ajoute à la liste\")\n",
"antecedents.append(1)\n",
"images.append(h(1))\n",
"\n",
"# ....\n",
"\n",
"# image de 20\n",
"print(\"L'image de\", \"...\",\" est\", \"...\", \"On les ajoute à la liste\")\n",
"antecedents.append(20)\n",
"images.append(h(20))\n",
"\n",
"print(\"Les images sont \", images)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Modifier** votre programme pour que les antécédents aillent de -2 à 2.\n",
"\n",
"**Modifier** votre programme pour que les antécédents augmentent avec un pas de 0.5 au lieu de 1.\n",
"\n",
"**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 1. \n",
"\n",
"**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 0.5. \n",
"\n",
"**Tracer** sa représentation graphique pour $x$ allant de -2 à 2 avec un pas de 0.1.\n",
"\n",
"En regroupant les 3 programmes écrit précedement, **tracer** sur le même graphique les 3 représentations pour observer l'amélioration de la précision.\n",
"\n",
"*Astuce*: pour tracer 3 graphiques en 1, on fait les `plt.plot(...)` de chaque graphique et uniquement à la fin on lance `plt.show()`.\n",
"\n",
"![Comparaison des pas](./fig/comp_sin.png)"
]
},
{
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}