{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Les boucles en python\n", "\n", "(code sous licence creative commun CC BY-NC-SA BY Alexis Dendiével)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ":download:`Télécharger le pdf <./06-boucles.pdf>`\n", "\n", ":download:`Télécharger le notebook <./06-boucles.ipynb>`\n", "\n", ":download:`Lancer le notebook sur binder (lent) `" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les bouclent constituent, avec les tests, un élément indispensable de programmation. Il existe deux types de boucles:\n", "- La boucle for qui se réitère quand on parcourt un itérable par exemple, \n", "- la boucle while qui se réitère tant qu'une condition est remplie\n", "\n", "voyons cela par l'exemple\n", "\n", "## La boucle for" ] }, { "cell_type": "code", "execution_count": 1, "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" ] } ], "source": [ "for i in range(10):\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dans cet exemple, nous voyons que i prend successivement les valeurs allant de 0 à 9\n", "L'utilité peut être de faire plusieurs fois le même calcul, comme par exemple le calcul de la distance de chute.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "à l'instant 0 , y vaut : 0.0 m\n", "à l'instant 1 , y vaut : 4.905 m\n", "à l'instant 2 , y vaut : 19.62 m\n", "à l'instant 3 , y vaut : 44.145 m\n", "à l'instant 4 , y vaut : 78.48 m\n", "à l'instant 5 , y vaut : 122.625 m\n", "à l'instant 6 , y vaut : 176.58 m\n", "à l'instant 7 , y vaut : 240.345 m\n", "à l'instant 8 , y vaut : 313.92 m\n", "à l'instant 9 , y vaut : 397.305 m\n" ] } ], "source": [ "# donnée\n", "g = 9.81\n", "\n", "# calcul de l'ordonnée d'un laché vertical sans vitesse initial dans le champ de pesanteur\n", "for t in range (10):\n", " y = 0.5*g*t**2\n", " print(\"à l'instant \", t, \", y vaut : \", y, \" m\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "la boucle for peut aussi servir à parcourir un itérable, comme le montre l'exemple suivant, qui donne les n premiers éléments chimiques avec leur symbole." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hydrogène H\n", "Hélium He\n", "Lithium Li\n", "Béryllium Be\n", "Bore B\n", "Carbone C\n", "Azote N\n", "Oxygène O\n", "Fluor F\n", "Néon Ne\n", "Sodium Na\n", "Magnésium Mg\n", "Aluminium Al\n", "Silicium Si\n", "Phosphore P\n", "Soufre S\n", "Chlore Cl\n", "Argon Ar\n" ] } ], "source": [ "# liste des 18 premiers éléments chimiques de la classification\n", "elements = [ \"Hydrogène H\", \"Hélium He\", \"Lithium Li\", \"Béryllium Be\",\n", "\"Bore B\", \"Carbone C\", \"Azote N\", \"Oxygène O\", \"Fluor F\", \"Néon Ne\",\n", "\"Sodium Na\", \"Magnésium Mg\", \"Aluminium Al\", \"Silicium Si\", \"Phosphore P\",\n", "\"Soufre S\", \"Chlore Cl\", \"Argon Ar\"]\n", "\n", "# la boucle qui parcours la liste des éléments et les imprime\n", "for element in elements:\n", " print (element)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On peut bien sur combiner cette boucle avec un test permettant de n'imprimer que les éléments de numéro atomique inférieur à une certaine valeur:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "les 4 premiers éléments de la classification sont :\n", " - Hydrogène H\n", " - Hélium He\n", " - Lithium Li\n", " - Béryllium Be\n", "\n", "tsss...lisez la doc : le numéro atomique doit être inférieur à 18 !!\n" ] } ], "source": [ "\n", "def affichage_premiers_elements(Zmax):\n", " \"\"\"\n", " Affiche les éléments de numéro atomique inférieur ou égal à Z_max\n", " \n", " :param Z_max: numéro atomique maximal (inférieur à 18)\n", " \"\"\"\n", " # liste des 18 premiers éléments chimiques de la classification\n", " elements = [\n", " \"Hydrogène H\", \"Hélium He\", \"Lithium Li\", \"Béryllium Be\", \"Bore B\",\n", " \"Carbone C\", \"Azote N\", \"Oxygène O\", \"Fluor F\", \"Néon Ne\", \"Sodium Na\",\n", " \"Magnésium Mg\", \"Aluminium Al\", \"Silicium Si\", \"Phosphore P\", \"Soufre S\",\n", " \"Chlore Cl\", \"Argon Ar\"]\n", "\n", " # test pour vérifier que Z est inférieur ou égal à 18\n", " if Zmax <=18: \n", " print(\"les \", Zmax, \"premiers éléments de la classification sont :\")\n", " for i in range(Zmax):\n", " print (\" - \",elements[i])\n", " else:\n", " print(\"tsss...lisez la doc : le numéro atomique doit être inférieur à 18 !!\")\n", " \n", "affichage_premiers_elements(4)\n", "print(\"\")\n", "affichage_premiers_elements(33)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## La boucle while\n", "C'est une autre manière de programmer une boucle: celle-ci aura lieu tant qu'une condition sera remplie.\n", "Reprenons l'exemple précédant avec une boucle while:\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "les 4 premiers éléments de la classification sont :\n", " - Hydrogène H\n", " - Hélium He\n", " - Lithium Li\n", " - Béryllium Be\n", "\n", "nan, j'affiche toujours pas : le numéro atomique est supérieur à 18\n" ] } ], "source": [ "\n", "def affichage_premiers_elements_avec_while(Zmax):\n", " \"\"\"\n", " Affiche les éléments de numéro atomique inférieur ou égal à Z_max\n", " \n", " :param Z_max: numéro atomique maximal (inférieur à 18)\n", " \"\"\"\n", " # liste des 18 premiers éléments chimiques de la classification\n", " elements = [ \"Hydrogène H\", \"Hélium He\", \"Lithium Li\", \"Béryllium Be\",\n", " \"Bore B\", \"Carbone C\", \"Azote N\", \"Oxygène O\", \"Fluor F\", \"Néon Ne\",\n", " \"Sodium Na\", \"Magnésium Mg\", \"Aluminium Al\", \"Silicium Si\", \"Phosphore P\",\n", " \"Soufre S\", \"Chlore Cl\", \"Argon Ar\"]\n", "\n", " # test pour vérifier que Z est inférieur ou égal à 18\n", " if Zmax <=18: \n", " print(\"les \", Zmax, \"premiers éléments de la classification sont :\")\n", " numero = 1\n", " while numero <=Zmax:\n", " print (\" - \",elements[numero-1])\n", " numero = numero + 1\n", " else:\n", " print(\"nan, j'affiche toujours pas : le numéro atomique est supérieur à 18\")\n", " \n", "affichage_premiers_elements_avec_while(4)\n", "print(\"\")\n", "affichage_premiers_elements_avec_while(32)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Complément\n", "Il peut être utile de vouloir sauter une étape à l'intérieur d'une boucle avant qu'elle ne s'achève. On utilise pour cela:\n", "- l'instruction continue" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 \n", "1 \n", "2 \n", "3 \n", "4 \n", "6 \n", "7 \n", "8 \n", "9 \n" ] } ], "source": [ "for i in range(10):\n", " if i ==5:\n", " continue\n", " print(i, \" \")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous voyons ici que l'impression du 5 n'a pas été effective.\n", "Nous pouvons aussi vouloir sortir d'une boucle, pour cela:\n", "- on utilise l'instruction break\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 \n", "1 \n", "2 \n", "3 \n", "4 \n" ] } ], "source": [ "for i in range(10):\n", " if i ==5:\n", " break\n", " print(i, \" \")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ces deux instructions, continue et break, peuvent également s'utiliser avec la boucle while." ] } ], "metadata": { "celltoolbar": "Format de la Cellule Texte Brut", "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.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }