4. Répéter - for

Dans ce chapitre, nous découvrons comment utiliser une boucle for pour répéter un bloc d’instructions un certain nombre de fois. Nous allons voir que :

  • la boucle for permet de répéter des instructions,

  • la structure for i in range(n): permet de répéter un bloc un nombre n fois,

  • le deux-points : est toujours suivi d’un bloc en indentation.

Question

Une boucle informatique est




4.1. La répétition

Revenons vers un exemple simple : dessiner un carré.

Si nous regardons le code de près, nous pouvons voir que nous répétons 4 fois les mêmes deux instructions forward() et left().

Ne serait-ce pas pratique de pouvoir dire à la tortue de répéter ces instructions 4 fois ? Ceci est possible avec une boucle for. La ligne for i in range(4): va répéter 4 fois le bloc en indentation qui suit.

Exercice 1

Transformez le rectangle en triangle.

4.2. Variable d’itération i

Que représente i dans l’expression for i in range(n) ?
C’est ce qu’on appelle une variable d’itération. Cette variable commence à 0 et augmente de 1 à chaque répétition jusqu’à \(n-1\). Pour visualiser cette valeur nous pouvons l’afficher dans le dessin avec l’instruction write(i).

4.3. Polygone régulier

Avec une boucle for, nous pouvons simplifier le dessin des formes symétriques.

Observez bien la double indentation :

  • la première pour def

  • la deuxième pour for

Dans les deux cas un : est suivi d’un bloc en indentation. En Python vous pouvez avoir multiples niveaux d’indentation.

Exercice 2

Définissez la fonction hexagone() pour dessiner un hexagone, et appelez cette fonction.

4.4. Escalier

Pour dessiner un escalier, il faut simplement répéter dans une boucle le dessin pour une seule marche. Nous utilisons la variable i pour numéroter les marches.

Pour dessiner des dents de scie, il faut simplement répéter dans une boucle le dessin pour une seule dent.

Exercice 3

Dessinez une usine avec un toit en dents de scie.

4.5. Éventail

Que se passe-t-il si nous dessinons une ligne (forward()/backward()) et tournons chaque fois d’un petit angle ? C’est un peu comme un éventail qui s’ouvre. Les lignes de l’éventail sont numérotés en utilisant la variable i.

Exercice 4

Doublez l’angle de rotation dans left().

Que se passe-t-il si nous avançons plus que nous reculons ? Une toute petite modification du programme peut faire une chouette différence.

Exercice 5

Modifiez les valeurs dans forward() et backward().

4.6. Étoile

Voici une autre façon de toujours avancer, mais en tournant chaque fois d’un angle un peu plus petit que 180°. Essayons !

Exercice 6

Changez le nombre de pics de l’étoile.

4.7. Losange

Si nous déformons les angles d’un carré, nous obtenons un losange (diamant). Quelle forme obtenons-nous en dessinant un carré et deux losanges ?

Si nous dessinons un losange 6 fois, nous obtenons une jolie fleur.

Exercice 7

Tournez un angle plus petit que 60°

4.8. Paquebot

Une boucle for est utilisée dans l’exemple suivant pour dessiner les hublots d’un paquebot. Les hublots sont numérotés en utilisant la variable i.

Exercice 8

Créez une fonction paquebot() et dessinez-en un deuxième.

4.9. Cube de Rubik

Le Cube de Rubik est un casse-tête inventé par Ernő Rubik en 1974, et qui s’est rapidement répandu sur toute la planète au cours des années 1980.

Pour dessiner la face rouge, nous dessinons d’abord une ligne, en répétant 3 fois un carré. Ensuite nous répétons 3 fois une ligne pour dessiner une surface.

4.10. La tortue

Voici quelques fonctions de la tortue.

Estampe

Vous pouvez laisser une impression de la tortue à sa position actuelle avec la fonction stamp().

Forme

Vous pouvez changer la forme de votre tortue avec la fonction shape().

Exercice 9

Essayez les formes 'triangle' et 'arrow'.

Vitesse

Vous pouvez changer la vitesse de la tortue avec la fonction speed(s). Le paramètre vitesse s peut varier entre 1 (le plus lent) et 1000 (le plus rapide). Sa vitesse par défaut est de 3. Mettre la vitesse à 0 choisit automatiquement la vitesse maximum.

Exercice 10

Augmentez graduellement la vitesse de la tortue, en utilisant la variable i comme argument de vitesse.

4.11. Erreurs

Il est important de bien lire et comprendre les messages d’erreur. Dans cette section, vous allez découvrir les différentes catégories d’erreur et comment les corriger.

ImportError

Cette erreur survient lorsque vous essayez d’importer un module qui n’existe pas.

Exercice 11

Corrigez l’erreur d’importation.

SyntaxError

Cette erreur survient lorsque vous écrivez mal un mot-clé, ou si vous oubliez une ponctuation. Dans ce cas, le mot-clé mal écrit n’est pas reconnu et il n’est pas colorié correctement dans votre code.

Exercice 12

Corrigez les trois erreurs de syntaxe et remarquez les éventuelles différences de stylisation.

NameError

Cette erreur survient lorsque vous écrivez mal le nom d’une variable ou fonction.

Exercice 13

Corrigez les trois erreurs de nom.

TypeError

Cette erreur survient lorsque vous ne mettez pas le nombre d’arguments corrects pour une fonction.

Exercice 14

Corrigez les trois erreurs de type.

4.12. Exercice

  • Téléchargez un exercice.

  • Éditez-le dans un éditeur externe.

  • Déposez-le sur Moodle.

Pellicule

Une pellicule photographique est un support souple recouvert d’une émulsion contenant des composés sensibles à la lumière. Dessinez une pellicule photographique. Utilisez une boucle for pour créer 4 trous de perforation. Utilisez une deuxième boucle pour répéter une trame.

../_images/pellicule.jpg

Chemin de fer

Dessinez les rails d’un chemin de fer.

rails

Utilisez une boucle for pour la répétition des traverses.

Wagon de métro

Dessinez un wagon de métro. Utilisez une boucle for pour les fenêtres. Utilisez la fonction dot() pour les roues.

Gratte-ciel

Dessinez un gratte-ciel avec \(n \times m\) fenêtres. Pour ceci, utilisez deux boucles imbriquées.

Jeu du moulin

Le jeu du moulin est un jeu de société traditionnel en Europe. Le plateau de jeu existait déjà dans la Rome antique. Aussi appelé jeu du charret (en Suisse), certains lui donnent le nom médiéval de jeu de mérelles, voire de marelle.

../_images/moulin.png

Pour les points d’intersection, utilisez la fonction dot(). La distance entre les lignes est de 50 pixels.

Vous constatez aussi une symétrie par 4. Donc avec un choix intelligent de fonction et de boucle for, vous pouvez réduire le nombre de lignes de code considérablement.

TP

Créez une scène de jeu vidéo en utilisant la répétition, des cercles et de la couleur.