Boucles non bornées : while
#
while
, qui signifie tant que, permet de répéter un bloc tant qu’une condition est respectée :
while condition:
bloc_repete_tant_que_condition_est_vrai
bloc_execute_apres
On emploie while
lorsqu’on ne sait pas à l’avance combien de fois il sera nécessaire
de répéter un bloc d’instruction.
Par exemple : “tant que je n’ai pas bon à l’exercice, je recommence”.
Ou, tant qu’il reste du pain je mange :
petit déjeuner #
Autre exemple, le casino :
Jean-Martin a 10€, il joue aux machines à sous (un vrai pigeon). Chaque mise lui coûte 1€ et il a une chance sur 100 de gagner 10€ (quand je vous disais)…
Le programme suivant simule cette situation dramatique :
import random # fonctions simulant le hasard
capital = 10
while capital > 0:
capital = capital - 1 # il mise 1 €
if random.random() < 0.01: # une chance sur cent
capital = capital + 10 # il récupère 10 €
print("waouh...")
else:
print("encore perdu...")
print("Jean-Martin a perdu tout son argent.")
Le prof de maths qui sommeille en moi vous signale que :
- Ce programme termine toujours.
- Les étapes intermédiaires varient mais l’issue est toujours la même : Jean-Martin perd tout son argent.
- Le seul moyen de gagner régulièrement aux jeux d’argent est de les organiser. Ce privilège est reservé à l’État.
Casino #
Exercice 12 #
Modifier le programme précédent :
- Créer une variable
compteur
valant 0 avant la boucle, - Augmenter
compteur
de 1 à chaque tour de la boucle, - Affichez la valeur de
compteur
une fois la boucle terminée. - Bonus difficile Affichez à la fin du programme le maximum atteint par Jean-Martin avec un phrase un peu rageante…
Boucle infinie #
On emploie régulièrement des boucles infinies. Il suffit d’écrire la condition while True
pour qu’une boucle soit répétée indéfiniment.
Afin de ne pas saturer complètement votre processeur on va introduire un délai d’une seconde entre deux affichages :
DANS THONNY
from time import sleep
while True:
print("NSI")
sleep(1)
- On importe la fonction
sleep
qui va mettre l’exécution en pause une seconde avecsleep(1)
- On répète indéfiniment l’affichage “NSI” toutes les secondes.
Attention : Impossible d’exécuter ces exemples sur mon site, il faut utiliser un programme externe.
La fonction
sleep
n’est pas traitée correctement ici pour des questions techniques.
Pour arrêter le programme vous pouvez utiliser le raccourci clavier “Ctrl + C”
À quoi cela peut-il bien servir ?
Et bien c’est ce qu’on fait dans TOUS les logiciels… Pensez un instant à un jeu vidéo.
Lorsque vous arrêtez de jouer, ne serait-ce qu’une seconde, le programme ne s’arrête pas de tourner.
On peut résumer un jeu vidéo à ce schéma :
while True:
lire_les_actions_du_joueur()
mettre_le_jeu_a_jour()
afficher_le_jeu_a_l_ecran()
L’instruction break
#
L’instruction break
provoque une sortie immédiate d’une boucle while
ou
d’une boucle for
.
Dans l’exemple suivant, l’expression True
est toujours … vraie : on a
une boucle sans fin.
L’instruction break
est donc le seul moyen de sortir de la boucle.
break #
Affichage de l’heure courante #
Doit être traité à exécuter à l’extérieur, dans Thonny par exemple
import time # importation du module time
while True:
# strftime() est une fonction du module time
print('Heure courante ', time.strftime('%H:%M:%S'))
quitter = input('Voulez-vous quitter le programme (o/n) ? ')
if quitter == 'o':
break
print("A bientôt")
>>>
Heure courante 14:25:12
Voulez-vous quitter le programme (o/n) ? n
Heure courante 14:25:20
Voulez-vous quitter le programme (o/n) ? o
A bientôt
Exercice 13 - Le plus ou moins #
Doit être traité à exécuter à l’extérieur, dans Thonny par exemple
-
Se documenter sur la fonction
randint
du modulerandom
import random help(random.randint)
-
Écrire une boucle qui affiche 10 nombres aléatoires entre 1 et 100
La fonction input(message)
affiche un message à l’écran pour l’utilisateur,
celui-ci saisit au clavier une valeur et cette valeur est renvoyée par input
.
input
renvoie toujours une chaîne de caractère.
Pour convertir une chaîne de caractère en un entier on peut utiliser :
nombre = int(input("votre nombre : "))
Si l’utilisateur tape une valeur pouvant être transformée en entier comme “123”,
nombre
vaudra 123.
Si l’utilsateur tape une valeur ne pouvant pas être transformée en entier comme “Marcel”, Python va générer une erreur.
-
Écrire le script du jeu du plus ou moins suivant :
>>> Le jeu consiste à deviner un nombre entre 1 et 100 : ---> 50 trop petit ! ---> 75 trop petit ! ---> 87 trop grand ! ---> 81 trop petit ! ---> 84 trop petit ! ---> 85 Gagné !
-
Améliorer le jeu pour indiquer combien de coups ont été necessaires pour gagner.
Exercice 13 - Intérêts #
Lorsqu’on place un capital avec intérêt, on perçoit à intervalle régulier un montant qui vient s’ajouter à ce capital.
Il existe deux manières de calculer les intérêts :
- intérêts simples : le montant des intérêts est fixe dans le temps, généralement proportionnel au montant du capital initial
- intérêts composés : les intérêts sont recalculés après chaque période et sont généralement proportionnels au capital courant, après versement des intérêts de la précédente période.
Considérons 100€ de capital initial, placés avec 10% d’intérêts :
-
Intérêts simples
Les intérêts sont constants et valent 10€
Capital initial Fin 1ère période Fin 2nde période Fin 3eme période 100 110 120 130 Par exemple : $120 + 10 = 130$
-
Intérêts composés
Les intérêts sont variables et valent 10% du dernier capital
Capital initial Fin 1ere période Fin 2nde période Fin 3eme période 100 110 121 133.1 Par exemple :
On utilise un coefficient multiplicateur de $1.1$ :
$120 \times 1.1 = 133.1$
Questions
- On place 50000 avec intérêts simples de 5% par période. À l’aide d’une boucle, calculez le montant du capital après 10 périodes.
- Proposez une formule explicite donnant ce montant, retrouvez votre résultat en posant un calcul à la main.
- Posez une équation vous donnant le nombre de période avant de doubler le capital en fonction du taux d’intérêt.
- Même montant initial et même taux d’intérêt mais cette fois composé. Calculez le montant du capital après 10 périodes.
- À l’aide d’une boucle, déterminez le nombre de période pour doubler le capital.
Corsons un peu le contexte. Cette fois on ajoute aussi un dépôt régulier de 2000€. À chaque période l’épargnant ajoute 2000€ à son capital. Selon le système d’intérêt, ils seront pris en compte ou non dans les intérêts suivants.
- Calculez à l’aide d’une boucle le montant après 10 périodes pour les deux systèmes d’intérêts
- Calculez à l’aide d’une boucle le nombre de périodes pour doubler le capital dans les deux systèmes d’intérêts.