{ "nbformat_minor": 0, "nbformat": 4, "cells": [ { "source": [ "$$\n", "\\def\\CC{\\bf C}\n", "\\def\\QQ{\\bf Q}\n", "\\def\\RR{\\bf R}\n", "\\def\\ZZ{\\bf Z}\n", "\\def\\NN{\\bf N}\n", "$$\n", "# Boucle `while`" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "from __future__ import division, print_function # Python 3" ], "outputs": [], "metadata": {} }, { "source": [ "Parfois, on ne sait pas \u00e0 l'avance combien de fois on voudra ex\u00e9cuter un bloc d'instructions. Dans ce cas, il vaut mieux utiliser une boucle `while` dont la syntaxe est:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "while CONDITION:\n", " INSTRUCTION 1\n", " INSTRUCTION 2\n", " ...\n", " INSTRUCTION n" ], "outputs": [], "metadata": {} }, { "source": [ "Le bloc d'instruction est ex\u00e9cut\u00e9 (au complet) tant que la condition est satisfaite. La condition est test\u00e9e avant l'ex\u00e9cution du bloc, mais pas pendant. C'est donc toutes les instructions du bloc qui sont ex\u00e9cut\u00e9es si la condition est vraie. Par exemple, on peut afficher les puissances de 5 inf\u00e9rieures \u00e0 un million avec une boucle `while` :" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "a = 1\n", "while a < 1000000:" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "... print(a)\n", "... a = a * 5\n", "... \n", "1\n", "5\n", "25\n", "125\n", "625\n", "3125\n", "15625\n", "78125\n", "390625" ] }, "metadata": {} } ], "metadata": {} }, { "source": [ "L'exemple suivant est un autre exemple typique de la boucle tant que. Il consiste \u00e0 rechercher, pour un nombre $x\\geq1$, l'unique valeur enti\u00e8re $n$ v\u00e9rifiant $2^{n\u22121}< x < 2^n$, c\u2019est-\u00e0-dire le plus petit entier v\u00e9rifiant $x < 2^n$." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "x = 10**4\n", "u = 1\n", "n = 0\n", "while u <= x:" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "... n = n + 1\n", "... u = 2 * u" ] }, "metadata": {} } ], "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "n" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "14" ] }, "metadata": {} } ], "metadata": {} }, { "source": [ "On v\u00e9rifie bien que $2^13 < 10^4 < 2^14$ :" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "2 ** 13" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "8192" ] }, "metadata": {} } ], "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "2 ** 14" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "16384" ] }, "metadata": {} } ], "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "2**13 < 10**4 < 2**14" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "True" ] }, "metadata": {} } ], "metadata": {} }, { "source": [ "## Interruptions de boucles avec `break` et `continue`\n", "\n", "La commande `break` permet d'interrompre une boucle `for` ou `while` en cours:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "for i in range(10):" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "... if i == 5:\n", "... break\n", "... print(i)\n", "...\n", "0\n", "1\n", "2\n", "3\n", "4" ] }, "metadata": {} } ], "metadata": {} }, { "source": [ "On remarque que les valeurs plus grandes que 4 n'ont pas \u00e9t\u00e9 imprim\u00e9es par la fonction `print`.\n", "\n", "La commande `continue` permet de continuer le parcours d'une boucle \u00e0 la valeur suivante:" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "for i in range(10):" ], "outputs": [ { "execution_count": 1, "output_type": "execute_result", "data": { "text/plain": [ "... if i == 5:\n", "... continue\n", "... print(i)\n", "...\n", "0\n", "1\n", "2\n", "3\n", "4\n", "6\n", "7\n", "8\n", "9" ] }, "metadata": {} } ], "metadata": {} }, { "source": [ "On remarque que la valeur 5 n'a pas \u00e9t\u00e9 imprim\u00e9e par la fonction `print`.\n", "\n", "**NOTE**: Certains auteurs recommandent d'\u00e9viter l'utilisation des intructions `continue` et des `break`, car elles sont \u00e9vitables et leur utilisation produit des programmes moins bien structur\u00e9s." ], "cell_type": "markdown", "metadata": {} } ], "metadata": { "kernelspec": { "display_name": "python2", "name": "python2" } } }