# IV Les boucles non bornées

### Principe

Une boucle non bornée permet de répéter des instructions tant qu'un test logique renvoie la valeur "vrai".
On parle de boucle non bornée car le nombre d'itérations effectué n'est pas fixé à l'avance.

Dans l'illustration ci-dessous, on lance un dé tant que le 4 n'est pas sorti.

### Syntaxe

On utilise le mot-clé "while" pour introduire une boucle non bornée, vient ensuite le test logique. La première ligne se termine par deux points ":".
Le bloc d'instructions à exécuter tant que le test renvoie la valeur "True" est indenté. On quitte ce bloc lorsque le test logique renvoie "False".

Le programme ci-dessous permet de lancer un dé tant que le 4 n'est pas sortie.
Une fois le 4 sorti, la fonction attente() renvoie le nombre de lancers nécessaires.

from random import randint def attente(): compteur = 0 # compteur du nombre d'itérations d = 0 # on initialise la variable d while d != 4: # tant que d différent de 4... d = randint(1,6) # le bloc indenté est exécuté compteur = compteur + 1 return "le 4 est sorti au bout de:", compteur, "lancers"

★ Lire ce programme et identifier la syntaxe de la boucle bornée.
★ Exécuter le programme, puis appeler attente( ) plusieurs fois dans la console.

### Exemples

#### Exemple 1

La superficie occupée par une colonie de bactéries double chaque jour, l'aire initiale est de 3 cm². La fonction seuil( ) renvoie le nombre de jours entiers nécessaires pour que l'aire dépasse 90 cm² ainsi que l'aire atteinte.

def seuil(): aire = 3 # aire initiale jours = 0 while aire <= 90: # tant que le test logique est vrai ... aire = aire * 2 jours = jours + 1 return jours, aire

★ Exécuter le programme, puis appeler la fonction seuil( ) dans la console.

#### Exemple 2

La fonction temps( ) définie ci-dessous, prend un capital initial et un taux. Elle renvoie le nombre d'années nécessaires pour au moins doubler le capital initial.

def temps(C0, taux): capital = C0 annees = 0 while capital < 2 * C0: # tant que C0 n'est pas au moins doublé capital = capital * (1 + taux) annees = annees + 1 return annees, capital

★ Exécuter le programme ci-dessus, puis, appeler temps(1000, 0.05).

#### Exemple 3

La séquence de Syracuse associée à un entier n > 1 est obtenue en appliquant l'alorithme ci-dessous. Vérifier mentalement que pour n = 5, on obtient la séquence 5, 16, 8, 4, 2, 1.

On a traduit l'algorithme en langage python. La fonction syracuse(n) ci-dessous renvoie la séquence associée à l'entier n pris en paramètre.

def syracuse(n): sequence = [n] # liste des étapes while n > 1: # tant que 1 n'est pas atteint ... if n % 2 == 0: # si n est pair n = n//2 sequence.append(n) # on ajoute n à la séquence else: n = 3*n+1 sequence.append(n) return sequence

★ Observer la structure du programme et remarquer les indentations successives.
★ Exécuter le programme ci-dessus, puis, appeler syracuse(n) pour différentes valeurs du paramètre n.

### Exercices

#### Exercice 1

Chaque année, les surfaces agricoles d'une commune sont réduites de moitié. En 2021 la surface agricole totale était de 230 ha. On souhaite déterminer dans combien d'années cette surface passera en dessous de 15 ha.
La fonction définie ci-dessous renvoie ce nombre ainsi que l'aire atteinte.

def surface(): annees = 0 aire = 230 while aire ... : annees = annees + 1 aire = aire / 2 return annees, aire

★ Compléter la ligne 4, puis exécuter le programme.
★ Appeler la fonction surface( ).

#### Exercice 2

On souhaite déterminer le premier entier naturel dont le cube est supérieur à 120.
Completer la ligne 6 du programme en utisisant la fonction cube.

def cube(n): return n**3 def prem(): k = 1 while ............ : k = k + 1 return cube(k), k

Après avoir exécuté le programme, appeler la fonction prem().

#### Exercice 3

Un appartement coûte aujourd'hui 230 000 euros. On prévoit une hausse régulière de son prix de 3 % par an.

★ Définir une la fonction nbr(cible) qui prend en paramètre un prix "cible" et renvoie le nombre d'années entières nécessaires pour atteindre ce prix, par exemple, nbr(300000) doit renvoyer le nombre d'années nécessaires pour que le prix de l'appartement atteigne au moins 300 000 euros.
★ Exécuter votre programme, puis appeler nbr(cible), pour différentes valeurs du paramètre cible.