P1.5 boucles non bornées

Bases en Python : boucle tant que 

Un exemple

Les boucles for que nous avons vues jusqu'ici sont bornées : on sait combien de fois la boucle sera exécutée (parfois la boucle pourra être interrompue, mais disons qu'on sait combien de fois au maximum le boucle sera exécutée).

Exemple : la boucle while
Jusqu'à ce que l'ai un 6...

Examinons le problème suivant :

Je lance un dé à 6 faces, et je compte combien de fois je dois le lancer avant d'obtenir un 6.

Dans cette situation, on ne sait pas à l'avance combien de fois on devra relancer le dé, on ne sait même pas donner un nombre maximum. On va lancer Tant que on obtient pas un 6, et arrêter dès qu'on en obtient un.

Dans ce cas on ne peux pas faire une boucle for, on utilise la boucle while :

Nous n'avons parlé jusqu'ici que de variables qui sont des nombres ou des chaînes de caractères. Ici nous allons avoir besoin de variables booléennes.
Voir qui était george Boole
Les variable booléennes sont des variables qui n'ont que 2 valeurs possibles : Vrai ou Faux

En anglais (donc dans tous les langages informatiques) c'est True ou False.

Coder en python la solution du problème

Exemple

Exécutez le code plusieurs fois et vérifiez que le nombre de lancés est variable.


Un mauvais exemple

Il n'est pas convenable d'utiliser une boucle while quand on connaît le nombre d'itérations requis.

Exemple

Ce code est parfaitement fonctionnel mais l'utilisation de tant que est injustifiée. Elle rend le code plus difficile à lire, et si on oublie le i = i + 1 on court à la catastrophe !

Exemple

Lorsque l'on peut, on utilise une boucle `for`.  
Ici tout simplement :

Exemple

Si vous avez déjà étudié les listes en Python, vous pouvez regarder cet autre mauvais exemple

Il n'est pas convenable d'utiliser une boucle while quand on connaît le nombre d'itérations requis.

Exemple

Ce code est parfaitement fonctionnel mais l'utilisation de Tant que est injustifiée. Elle rend le code plus difficile à lire, et si on oublie le i = i + 1 :

Exemple

A votre avis.... que va-t-il se passer ? Vous pouvez vérifier...

Très important

Avec les boucles while il y a un risque que la boucle ne s'arrête jamais. Dans ce cas le programme ne se termine pas. Ce genre de bug est assez fréquent. Pour s'en prémunir il est indispensable de vérifier soigneusement que la condition d'arrêt sera atteinte au cours des itérations.

Exercices

compte a rebourd
Exemple

Voici la structure générale:

La première ligne est une boucle 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) qui contient des instructions que l'on veut répéter. Cela s'appelle le corps de la boucle. Quand vous exécutez le programme, les étapes suivantes sont répétées:

début

  • La condition est testée.
  • Si la condition est True alors le corps de la boucle est exécuté et ensuite nous revenons au début
  • Si la condition est évaluée à False, la boucle s'arrête.
Exercice de code
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!
puissances de 2
Exercice de code
Ecire un code qui trouve le plus petit entier n tel que 2**n soit supérieur à un entier N.
Le nombre N sera généré automatiquement lors de l'exécution de votre code.
suite de grelon
Exercice de code : suite de grelon
Ecire un code qui demande un nombre entier positif puis, tant que cet entier n'est pas égal à 1 :
  • le divise par deux s'il est pair
  • le multiplie par 3 et ajoute 1 s'il est impair
Un nombre n est pair lorsque n%2 est égal à 0
Un nombre n est impair lorsque n%2 est égal à 1
En effet n%2 renvoie le reste de la division euclidienne de n par 2.
Attention : // est la division entière qui est utilisée ici.
6 / 2 renvoie 3.0
6 // 2 renvoie 3
7 / 2 renvoie 3.5
7 // 2 renvoie 3