{"cells":[{"metadata":{},"cell_type":"markdown","source":"

Chapitre 4 - Boucle for

"},{"metadata":{},"cell_type":"markdown","source":"

Sommaire

\n
    \n
  1. \n Boucle bornée\n
  2. \n
  3. \n Utilisation de la variable de boucle\n
  4. \n
  5. \n Notion d'accumulateur\n
  6. \n
  7. \n Dessiner avec Turtle\n
  8. \n
"},{"metadata":{},"cell_type":"markdown","source":"

Dans un programme, on a souvent besoin de répéter plusieurs fois la même instruction (ou séquence d'instructions).
\nOn suppose dans ce chapitre que l'on sait à l'avance combien de fois on va devoir répéter la séquence d'instructions.
La boucle for (ou boucle bornée) permet de répondre à ce besoin.

\n Remarque : Si on ne sait pas à l'avance combien de fois on va répéter la boucle (par exemple si on doit arrêter la boucle lorsqu'une certaine condition est réalisée), on utilisera la boucle while (tant que) qui sera vue dans le chapitre 5.

"},{"metadata":{"trusted":true},"cell_type":"markdown","source":""},{"metadata":{},"cell_type":"markdown","source":""},{"metadata":{},"cell_type":"markdown","source":"

1- Boucle bornée (boucle for)

"},{"metadata":{},"cell_type":"markdown","source":"Le programme ci-dessous est un exemple simple d'utilisation de la boucle for.
\nOn répète ici 5 fois l'instruction print(\"Bonjour\").
\nLe bloc d'instructions à répéter doit être **indenté**, c'est-à-dire décalé de quelques espaces vers la droite.
\nLa variable i est l'indice de boucle (ou variable de boucle ou compteur de boucle). On peut lui donner le nom que l'on veut. ."},{"metadata":{"trusted":false},"cell_type":"code","source":"for i in range(5):\n print(\"Bonjour\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
Exercice 1 : La punition
\n Ecrire un programme qui affiche 10 fois \"Je ne dois pas utiliser mon téléphone en classe.\" \n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
Exercice 2 : Ecrire un programme qui demande à l'utilisateur quel message il souhaite afficher, puis qui affiche ce message 10 fois. \n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
Exercice 3 : Ecrire un programme qui demande à l'utilisateur de saisir un nombre entier, puis qui affiche le nombre de fois correspondant le message \"Coucou!\". \n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
Exercice 4 : Compléter le programme ci-dessous pour qu'il calcule et affiche le produit 42x37 en n'effectuant que des additions.
rappel 42x37 = 37 +37 +....+37 \n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"produit = 0\nfor i in range(...)\n produit=produit+...\nprint(produit)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"
Exercice 5 : Ecrire un programme qui affiche la table de 9 sous la forme :
\n 9 * 1 = 9
\n 9 * 2 = 18
\n 9 * 3 = 27
\n ..."},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
Exercice 6 : Ecrire une fonction qui affiche la table de multiplication d'un entier donné\n
"},{"metadata":{},"cell_type":"markdown","source":""},{"metadata":{"trusted":false},"cell_type":"code","source":"def table_fois(n):\n ...","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

2- Utilisation de la variable de boucle

"},{"metadata":{},"cell_type":"markdown","source":"Comme le montre l'exemple suivant, la variable de boucle (i dans l'exemple) est une variable ordinaire qui a initialement la valeur 0 et qui est incrémentée de 1 à chaque tour de la boucle.
On peut choisir n'importe quel nombre pour cette variable. Des noms tels que i, j, k, m, n, index ou compteur sont fréquemment utilisés.
\nAttention à la dernière valeur qui est 9 et non 10, car on a commencé à 0!
Cependant, le nombre qui figure en paramètre de la fonction range() (ici 10) correspond bien au nombre de tours de boucle.
\nLa variable de boucle est aussi appelée \"compteur de boucle\". Elle permet de savoir combien de tours de boucle ont déjà été effectués."},{"metadata":{"trusted":false},"cell_type":"code","source":"for i in range(10):\n print(i)\nprint(\"la derniere valeur de i est \",i)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Remarque : Cet exemple montre aussi que la variable de boucle existe toujours après l'exécution de la boucle.
\nIl est cependant déconseillé d'utiliser cette variable en dehors de la boucle.
\nIl est également déconseillé de modifier le contenu de la variable de boucle à l'intérieur de la boucle."},{"metadata":{"trusted":true},"cell_type":"markdown","source":"
Exercice 7 : Le programme ci-dessous affiche tous les entiers pairs de 0 à 20 inclus, sans utiliser d'autre variable que la variable de boucle.
Modifier le pour afficher les entiers impairs entre 0 et 100. \n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"for i in range(11):\n print(2*i)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"
Exercice 8 : Exécuter le programme ci-dessous qui effectue un compte à rebours puis modifier le tel que :\n
  • on demande à l'utilisateur la valeur de départ
  • \n
  • le compte à rebours doit s'arreter à 0
  • \n
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"from time import sleep # on importe une fonction qui suspend les instructions pendant un nombre de secondes donné\nfor i in range (10):\n sleep(1)\n print(10-i)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"
    Exercice 9 : Ecrire un programme qui dessine un triangle comme ci-dessous avec une hauteur saisie par l'utilisateur. (éxécuter l'aide avant de commencer )
    \n#
    \n##
    \n###
    \n####\n
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"# aide :\nprint(3*\"#\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"hauteur=int(input(\"Veuillez saisir la hauteur du triangle : \"))\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    Les secrets de la fonction range()


    "},{"metadata":{},"cell_type":"markdown","source":"
    Secret n°1\n\"range\" signifie \"intervalle\" en anglais.
    \nrange(n) renvoie en réalité la liste de tous les entiers de 0 inclus à n exclu.
    \nVous pouvez tester cela en tapant list(range(8)).
    \n \"for i in range(8) :\" signifie donc littéralement :
    \n \"pour i prenant successivement toutes les valeurs de 0 à 7, faire :\"\n
    "},{"metadata":{},"cell_type":"markdown","source":"
    Secret n°2\n La fonction range() peut prendre deux paramètres en entrée.
    \n Si a et b sont deux entiers, range(a,b) renvoie la liste de tous entiers compris entre a inclus et b exclu.
    \n
    "},{"metadata":{},"cell_type":"markdown","source":"
    Secret n°3\n La fonction range() peut même prendre trois paramètres en entrée.
    \n Si a, b et p sont trois entiers, range(a,b,c) renvoie la liste de tous entiers compris entre a inclus et b exclu avec un pas p.
    \n Si le pas p est négatif, les nombres de la liste seront données dans l'ordre décroissant.\n
    "},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 10 : Tester les versions avec deux paramètres et trois paramètres (avec un pas positif et avec un pas négatif) de la fonction range().
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"for i in range(2,8):\n print(i)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"for i in range(5,20,3):\n print(i)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"for i in range(100,10,-10):\n print(i)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 11 :
    a) Ecrire un programme qui affiche les mutiples de 11 entre 0 et 1000
    b) Ecrire à nouveau un programme de compte à rebours de n à 0 (n est le nombre demandé à l'utilisateur)
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":""},{"metadata":{},"cell_type":"markdown","source":"

    3- Notion d'accumulateur

    "},{"metadata":{},"cell_type":"markdown","source":"Le compteur de boucle permet de mettre en place un accumulateur, c'est-à-dire une variable qui est utilisée pour stocker les différents résultats successifs d'un calcul qui avance progressivement à chaque tour de boucle.
    On économise ainsi de la mémoire : on ne garde en mémoire par exemple que la somme des valeurs déjà rencontrées ou le dernier état, et non tous les états intermédiaires.
    \nLa variable qui sert d'accumulateur doit être initialisée avant la boucle."},{"metadata":{"trusted":true},"cell_type":"markdown","source":"Exemple : calcul de la somme des entiers de 1 à 100"},{"metadata":{"trusted":false},"cell_type":"code","source":"somme = 0 # La variable somme joue le rôle de l'accumulateur\nfor i in range(1,101):\n somme = somme + i # à chaque tour de boucle, on met à jour la valeur de l'accumulateur en lui ajoutant i\nprint(somme) # On affiche la valeur finale de l'accumulateur","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"tableau de trace des variables i et somme
    \n\n \n \n \n \n \n \n \n
    i somme
    / 0
    1 1
    2 3
    3 6
    4 10
    .. ..
    \n "},{"metadata":{"trusted":true},"cell_type":"markdown","source":"
    Exercice 12 : Prevoir à la main le resultat de l'éxécution de chaque code suivant avant de l'éxécuter."},{"metadata":{"trusted":false},"cell_type":"code","source":"# exemple1\na=10\nfor i in range(3):\n a=a+i ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# exemple2\ns=0\nfor k in range(1,5):\n a=a+2*k ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# exemple 3\na=10\nfor i in range(5):\n a=a-i ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 13 : On passe à la caisse d'un supermaché , écrire un programme qui demande 5 prix puis qui affiche le prix total à payer."},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 14** : Ecrire un programme simule le lancer de 1000 dés et qui affiche la moyenne des résultats obtenus."},{"metadata":{"trusted":false},"cell_type":"code","source":"from random import randint\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":""},{"metadata":{},"cell_type":"markdown","source":"

    4- Dessiner avec Turtle

    "},{"metadata":{"trusted":true},"cell_type":"markdown","source":"La bibliothèque **turtle** permet de dessiner à l'écran.
    \nLe petit programme commenté ci-dessous permet d'obtenir un tracé intéressant :"},{"metadata":{"trusted":false},"cell_type":"code","source":"from turtle import * # ligne à éxécuter au moins une fois","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"speed(10) # On règle la vitesse du tracé (un entier compris entre 1 et 10)\ncolor('red', 'yellow') # On fixe la couleur du tracé à 'rouge' et la couleur de remplissage à 'jaune'\nbegin_fill()\nfor i in range(36):\n forward(200) # La tortue avance de 200 pixels \n left(170) # La tortue tourne vers la gauche de 170°\nend_fill()\ndone() # Il faut terminer par done() pour lancer l'exécution du tracé ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Voici quelques fonctionnalités de turtle :"},{"metadata":{"trusted":true},"cell_type":"markdown","source":"\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    FonctionDescription
    forward(x)Déplace la tortue de x pixels en marche avant.
    backward(x)Déplace la tortue de x pixels en marche arrière.
    left(x)Fait pivoter la tortue d'un angle de x degrés vers la gauche.
    right(x)Fait pivoter la tortue d'un angle de x degrés vers la droite.
    goto(x,y)Déplace la tortue au point de corrdonnées (x,y). Attention, l'axe des y est orienté vers le haut de l'écran comme en mathématiques!
    penup()Lève le crayon (la tortue arrêtera de tracer).
    pendown()Abaisse le crayon. La tortue se remettra à tracer.
    hideturtle()Cache la tortue.
    showturtle()Fait réapparaitre la tortue.
    speed(n)Règle la vitesse du tracé. n est un entier compris entre 0 et 10. 1 correspond à une vitesse lente, 10 correspond à une vitesse rapide. 0 permet d'obtenir un tracé instantané.
    done()Lance l'exécution du tracé.
    circle(r)Trace un cercle de rayon r.
    \n On peut ajouter une deuxième paramètre facultatif a si on souhaite tracer seulement tracer un arc de cercle d'angle a.
    color(couleur1,couleur2)Définir la couleur du tracé (couleur1) et la couleur de remplissage (couleur2).
    width(n)Règle l'épaisseur du trait à n pixels.
    "},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 15 : Modifier le programme ci-dessous qui utilise une boucle for pour tracer un carré de côté 100 pixels, avec un contour bleu et colorié en vert.
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"penup()\ngoto(0,0)\npendown() \nfor i in range(2):\n forward(200) # La tortue avance de 200 pixels \n left(90) # La tortue tourne vers la gauche de 170°\npenup()\ndone() \n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"transfomer ce programme en une fonction qui dessine un carré de coté x"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 16 : Ecrire une fonction pour tracer un hexagone regulier
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 17 : Ecrire une fonction pour tracer un rectangle de largeur et hauteur quelconque
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 18 : Ecrire un programme qui construit le drapeau de la France
    on utilisera la fonction precedente en écrivant le done() à la fin
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 19 : Ecrire un programme qui trace 10 cercles dont les rayons sont 10, 20, 30, ..., 100.
    \n"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    Exercice 20 ** : Ecrire un programme qui dessine le diamant ci-dessous.
    "},{"metadata":{},"cell_type":"markdown","source":"![Diamant.PNG](attachment:Diamant.PNG)","attachments":{"Diamant.PNG":{"image/png":"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"}}},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3.9.13 64-bit (windows store)","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.9.13"},"vscode":{"interpreter":{"hash":"970a2a4939579a4c22872227820a264ec023ee5692739211cbaca24386397975"}}},"nbformat":4,"nbformat_minor":2}