{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![En tête general](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/En_tete_general.png)\n", "\n", "\n", "© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
\n", "Les activités partagées sur Capytale sont sous licence Creative Commons.\n", "\n", " Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Corriger un programme bogué simple" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Le but de l'activité est :\n", "\n", "(extrait du programme d'enseignement scientifique en Terminale)\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sommaire\n", "\n", "\n", "I. Tests avec jeux de données
\n", "II. Calcul d'un IMC
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## I. Tests avec jeux de données\n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. On fournit ci-dessous une fonction Python inverse qui doit renvoyer l'inverse d'un nombre x entré en argument.
\n", "$\\quad$Afin de tester cette fonction, on fournit un jeu de données sous forme d'une liste nommée Tests.

\n", "a. Observer la construction de la liste Tests. Quelles sont les valeurs de ce jeu de données ?
\n", "b. Exécuter les trois cellules suivantes, et vérifier la réponse à la question a.
\n", "$\\quad$Expliquer l'erreur obtenue dans la 3ème cellule : À quoi correspond-t-elle ? \n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Exécuter les 3 cellules suivantes (Sélectionner les cellules puis SHIFT+Entrée)\n", "\n", "def inverse(x):\n", " \"\"\"\n", " fonction qui renvoie l'inverse de x\n", " \"\"\"\n", " return 1/x" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "Tests = [ 0.1*k for k in range(-10,11) ]\n", "Tests" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for x in Tests: \n", " print(inverse(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "c. Modifier la fonction inverse pour qu'elle renvoie la valeur None pour la(les) valeur(s) de x qui a(ont) posé problème.\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Écrire ici la fonction inverse modifiée\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " d. Effectuer ici le test de la nouvelle fonction inverse avec le jeu de données Tests.
\n", "$\\quad$Quel est l'avantage d'avoir ainsi débogué la fonction ?\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Effectuer ici le test\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "2. On considère la fonction moyenne donnée ci-dessous, qui doit permettre de calculer la moyenne d'une liste de valeurs.
\n", "$\\quad$On donne également une syntaxe permettant de générer aléatoirement un jeu de données Tests contenant des listes de valeurs.
\n", "
\n", "a. Exécuter la cellule Python suivante.
\n", "$\\quad$Quel type de liste contient le jeu de données Tests ? Combien y en a-t-il?
\n", "$\\quad$Comment ces listes sont-elles générées ?
\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Sélectionner cette zone puis SHIFT+ENTREE\n", "\n", "def moyenne(L):\n", " \"\"\"\n", " fonction qui renvoie la moyenne d'une liste de valeurs\n", " \"\"\"\n", " return sum(L)/len(L)\n", "\n", "\n", "from random import randint \n", "\n", "Tests = [ [ randint(0,20) for j in range(randint(0,6)) ] for k in range(30)]\n", "Tests" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "b. Effectuer une saisie Python pour tester la fonction moyenne avec le jeu de données Tests.
\n", "$\\quad$Observer et expliquer le résultat.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Effectuer ici la saisie pour tester la fonction moyenne avec le jeu de données Tests\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "c. Effectuer un déboguage de la fonction moyenne.\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Écrire ici la fonction moyenne déboguée\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Effectuer ici la saisie pour tester la nouvelle fonction moyenne avec le jeu de données Tests\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "3. On considère la fonction Python resolution, qui doit permettre de résoudre une équation mathématique du type $ax+b=c$.
\n", "$\\quad$Exécuter les cellules pour tester avec le jeu de données Tests.
\n", "$\\quad$Proposer un déboguage.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def resolution(a,b,c):\n", " \"\"\"\n", " fonction qui renvoie la solution de l'équation ax+b = c\n", " \"\"\"\n", " return (c-b)/a\n", " " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Tests = [ (randint(-10,10),randint(-10,10),randint(-10,10)) for k in range(30)]\n", "Tests\n", "\n", "for valeurs in Tests:\n", " print( resolution(*valeurs) )" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "4. Écrire une fonction Python vitesse permettant de calculer une vitesse moyenne, connaissant:\n", "\n", "$\\quad$Effectuer un test et un déboguage de la fonction.\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Utiliser ces zones pour définir la fonction, la tester et la déboguer\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## II. Calcul d'un IMC\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "\n", "L'indice de masse corporelle ( $\\text{IMC}$ ) d'un individu se calcule à l'aide de la formule $\\displaystyle \\text{IMC} = \\frac{m}{t^2}$ où :\n", "\n", "On peut ensuite effectuer un diagnostic rapide à l'aide du tableau ci-dessous.
\n", " \n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " On fournit la fonction Python diagnostic ci-dessous, qui doit permettre de d'effectuer ce diagnostic à partir de m et t.

\n", "1. Expliquer comment est généré le jeu de données Tests.
\n", "2. Exécuter les cellules pour effectuer les tests.
\n", "$\\quad$La fonction donne-t-elle toujours le résultat attendu ? Expliquer et déboguer si nécessaire.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def diagnostic(m,t):\n", " \"\"\"\n", " fonction effectuant le diagnostic à partir de la masse et de la taille\n", " \"\"\"\n", " \n", " IMC = m/t**2\n", " \n", " if IMC<18.5:\n", " bilan = \"maigreur\"\n", " \n", " if IMC<25:\n", " bilan = \"dans la norme\"\n", " \n", " if IMC>25: \n", " bilan = \"surpoids\"\n", " \n", " return bilan\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Quelques tests:\n", "\n", "from random import randint \n", "Tests = [ ( randint(45,110) , randint(130,200)/100) for k in range(30) ]\n", "\n", "for donnees in Tests:\n", " print( donnees,diagnostic(*donnees) )" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
\n", "Les activités partagées sur Capytale sont sous licence Creative Commons." ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "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.10" } }, "nbformat": 4, "nbformat_minor": 2 }