7C: Boucles

La leçon 7 est composée de trois parties, A, B, C qui peuvent être complétées dans n'importe quel ordre.

Jusqu'à présent, nous avons vu les commandes de base de la programmation (e.g. attribuer des valeurs, écrire à l'écran) ainsi que les instructions if. Dans cette leçon, nous allons introduire les boucles (aussi appelées répétitions ou itérations): c'est une manière de faire faire à un ordinateur la même chose (ou des choses similaires) encore et encore. Par exemple, vérifier l'orthographe de chaque mot dans un document pourrait être implémenté avec une boucle. Nous allons décrire deux types de boucles: les boucles while et les boucles for.

Boucles while

Une instruction while répète une section de code encore et encore tant qu'une condition données est vraie ("true"). Voici un exemple:

Exemple : Compte à Rebours

Voici la structure générale:

  • La première ligne est une  while «condition»: où «condition» est une expression qui retourne True ou False (une expression Booléenne, comme pour l'instruction if).
  • Ensuite, on utilise un block indenté (comme pour une instruction if) qu contient des instructions que l'on veut répéter encore et encore. Cela s'appelle le corps de la boucle.
  • Quand vous exécutez le programme, les étapes suivantes sont répétées:
    • La condition est testée; si la condition est True alors le corps de la boucle est exécuté et ensuite nous répétons depuis le haut; quand la condition est évaluée à False, la boucle s'arrête.

Exercice de code : Compte à Rebour à l'Envers
Modifiez l'exemple ci-dessus pour obtenir un programme qui compte de manière croissante de 1 à 10 et qui écrit à la fin: Décollage!
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Avec les boucles, il est facile d'écrire un programme qui s'exécute infiniement en boucle infinie.
Exemple
Boucle infinie
Vous obtenez l'erreur "Time Limit Exceeded" ("Limite de Temps Excédée") car le server web CS Circles limite le temps d'exécution d'un programme; après 1 seconde, le programme est stoppé. Si vous exécutez le programme chez vous, il ne s'arrêtera jamais (jusqu'à ce que vous l'arrêtiez vous-même). 

Boucles for

Il y a un autre type de boucle en Python appelé boucle for. Dans beaucoup de cas, on peut utiliser n'importe laquelle des deux boucles (for/while) mais l'utilisation de l'une peut être plus simple que l'autre et il est donc nécessaire de savoir utiliser les deux. Une boucle for est construite pour facilement parcourir un intervalle de nombre (ou, comme nous le verrons dans une prochaine leçon, n'importe quelle liste de données).

Exemple
Exemple de boucle for: compter en ordre croissant

La structure générale pour une boucle numérique for est

for «nomDeVariable» in range(«premiereValeur», «derniereValeur»):
  «Block indenté de commandes appelé le corps de la boucle»
Comme d'habitude, le block du corps de la boucle peut être long de plusieurs lignes, du moment que toutes ces lignes soient indentées de la même façon. Pour commencer, le corps de la boucle est exécuté avec nomDeVariable ayant pour valeur premiereValeur. Puis il se répète avec nomDeVariable ayant pour valeur premiereValeur+1, et encore avec premiereValeur+2, etc. Ce processus continue jusqu'à ce que  nomDeVariable est comme valeur derniereValeur-1 et ensuite la boucle s'arrête.

La boucle se termine avec derniereValeur-1 et pas derniereValeur!
Exemple

Voici un exemple avec une boucle for à l'intérieur d'une autre boucle for.

Exemple : Un carré
Ce programme imprime un carré de 5 x 5 de 1s.
REMARQUE: Lorsque l'on multiplie un nombre X par dix et en ajouter un, nous sommes essentiellement mettre 1 chiffre supplémentaire à la fin de X. Par exemple, (1867*10)+1=18671.

Exercice de code : Un Triangle
Modifiez le programme précédent de deux manières. Tout d'abord, au lieu d'un carré, faites le afficher un triangle: ◤. Ensuite, au lieu d'avoir 5 lignes, vous lirez en entrée la taille désirée. Par exemple, si l'input est 3, vous obtiendrez

111
11
1
Cliquez ici pour une astuce. 
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Les instructions break et continue

L'instruction break est comme une sortie de secours pour une boucle while ou une boucle loop: break génère un saut immédiat à la commande qui se trouve après la fin du corps de la boucle. Voici un exemple qui utilise break: il lit toutes les lignes d'entrées jusqu'à ce que l'une d'elle dise "FIN".

Exemple : Boucler à travers toutes les lignes d'entrées

L'instruction continue saute le reste d'une boucle et répète le corps de la boucle à partir du prochain tour de boucle (souvent appelé la prochaine "iteration").

Exemple

Exercices

Exercice de code : Square Census
Les carrés sont des entiers de la forme K × K, e.g. 9 est un carré car 3 × 3 = 9. Ecrivez un programme qui lit en entrée un entier n et écrit tous les carrés des nombres inférieurs à n, dans l'ordre croissant. Par exemple, si l'entrée est 16, la sortie sera

1
4
9
Indice
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Exercice de code : Code sauté
Complétez l'exercice "Boucler à travers toutes les lignes d'entrées" (nous l'avons copié pour vous) en ajoutant une nouvelle fonctionalité: toutes les lignes égales à SAUTER ne seront pas écrite et vous n'incrémenterez pas le compteur artificiellement. Exécutez le programme pour voir un exemple. Indice
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Exercice de code : Factorisation
Si a × b = n, nous appelons a × b une factorisation de n. Dans cet exercice, écrivez un programme qui prend en entre un entier positif n et qui écrit toutes les factorisations de n; vous utiliserez la présentation donnée par l'exemple suivant avec n=10.

1 fois 10 font 10
2 fois 5 font 10
5 fois 2 font 10
10 fois 1 font 10
Indice
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.