Boucle itérative : while
La structure while
Voici la structure en Python d'une boucle while
while condition:
instruction 1
instruction 2
...
Tant que la condition est vraie les instructions du bloc sont exécutées.
Dans cette structure, on ne connait pas à l'avance le nombre de répétitions.
Deux écueils à éviter :
-
Ne jamais entrer dans une boucle : si la condition au départ vaut False, la boucle while ne sera jamais exécutée.
-
Tourner indéfiniment : Si la condition ne change jamais de valeur, la boucle ne s'arrêtera pas et l'algorithme
restera bloqué sur le while.
Une balle part d'une hauteur de 2 mètres et perd 10% de sa hauteur à chaque rebond. On cherche le nombre de rebonds pour la balle atteigne un
maximum de 1,5 mètre de hauteur. Ce problème (on parle de problème de seuil) peut être traité en python par le script suivant :
hauteur = 2
rebond = 0
seuil = 1.5
while hauteur>seuil:
rebond = rebond+1
hauteur = hauteur*0.9
print(rebond)
Tester ce script
Vous pouvez visualiser les étapes de mise en oeuvre de ce programme en utilisant le lien suivant :
Modifier les valeurs pour que la balle démarre à une hauteur de 3 mètres et atteigne la hauteur de 2 mètres.
Une cuve d'eau à une contenance de 1000L.
-
En moyenne la cuve d'eau se remplis de 3L d'eau par jours.
Écrire une fonction remplir() qui renvoie le nombre jours qu'il faudra pour remplir la cuve.
- Écrire une fonction
remplir(quant) où quant est un entier correspondant au volume d'eau arrivant dans la cuve par jours, qui renvoie le nombre jours qu'il faudra pour remplir la cuve.
On place 1000 euros sur un livret A. Le taux annuel de rémunération est 0,25%. Écrire une fonction
doublement() qui renvoie le nombre d'année qu'il faut pour doubler la somme de 1000 euros.
exercice de renforcement
Arjuna souhaite travailler dans un centre d'arts martiaux quelques heures par semaine. À la suite d'un entretien, deux possibilités
de salaire s'offrent à lui :
-
Proposition 1 : toucher 8 euros de l'heure,
-
Proposition 2 : versement de 91€ en début de mois, puis toucher 5 € chaque heure travaillée.
- Écrire une fonction
prop1(h) qui renvoie le salaire de Arjuna après avoir travaillé h heures avec la proposition 1.
- Écrire une fonction
prop2(h) qui renvoie le salaire de Arjuna après avoir travaillé h heures avec la proposition 2.
-
Proposer une fonction choix() qui renvoie le nombre d'heures à partir duquel la proposition 1 est préférable pour Arjuna.
Lorsque l'utilisateur saisit une donnée, il peut être utile de vérifier qu'elle est conforme à ce qu'on attend de lui.
-
Proposer une fonction saisie() qui demande à l'utilisateur de rentrer un nombre positif et qui renvoie ce nombre.
-
Ecrire une fonction saisie2() qui demande à l'utilisateur de saisir un nouveau nombre si le nombre entré est négatif qui renvoie le nombre.
On utilisera la fonction saisie().
-
Écrire une fonction repeter_lim(times) qui affiche le message : "Bravo tu es capable de choisir un nombre positif" si on propose un nombre positif en moins de times fois et qui affiche "Quel idiot ! tu ne sais pas ce qu'est un nombre positif !".
On utilisera la fonction saisie()
Une banque propose à ses clients une carte de crédit. Chaque mois elle prélève le minimum entre 3 euros et 1%
du montant des transactions effectuées par cette carte de crédit. Dans le cas, où il ne reste plus assez sur le compte
pour payer les frais, elle ne prélève que le restant sur le compte.
-
Proposer une fonction minimum qui renvoie le minimum des deux nombres entrés comme
arguments.
-
Proposer une fonction frais qui prend en paramètres deux nombres réels : la somme sur
le compte et le montant des transactions effectués par carte bancaire et qui renvoie les frais bancaires
qui seront prélevés.
-
Un client impécunieux possède 5073.68€ sur son compte. Il possède une carte de crédit avec laquelle il retire chaque mois
200€. Sachant qu'il ne remet pas d'argent sur son compte, pendant combien de temps pourra-t-il prélever ainsi
de l'argent sur son compte.
Pour accéder au code de la correction : lien
Votre enseignant vous exploite : il vous demande de créer un programme qui lui renverra la moyenne des notes saisies.
Pour cela, il vous donne le cahier des charges suivant :
-
Créer une fonction continuer, sans paramètre d'entrée qui demande à l'utilisateur s'il veut poursuivre ou non la saisie
de notes et qui renvie un booléen True en cas de poursuite et False sinon.
-
Créer une fonction moyenne qui calcule la nouvelle moyenne liée à l'ajout d'une note.
-
Créer dans le programme principal une fonction main qui conduit à demander une nouvelle note et à calculer la moyenne
obtenue alors jusqu'à ce que l'utilisateur décide d'arrêter la saisie.
-
Proposer une fonction continuer qui répond au cahier des charges. Faire en sorte que la casse (=minuscule ou majuscule) ne
soit pas un problème pour la saisie, par exemple en utilisant ma méthode upper.
"mélanGes".upper() renvoie 'MÉLANGES'.
-
Tester la fonction continuer créée.
-
Proposer une fonction moyenne qui répond au cahier des charges. Cette fonction aura trois paramètres :
moy un flottant qui correspond à la moyenne pour l'instant obtenue,
nb_notes un entier qui correspond au nombre de notes déjà pris en compte dans la moyenne moy,
new_note un flottant qui correspond à la nouvelle note à prendre en compte pour la moyenne.
Cette fonction renverra la moyenne de l'ensemble des notes saisies (en comptant aussi la dernière).
Aide mathématique :
On considère deux ensembles de notes A et B de moyenne respective $moy_A$ et $moy_B$ comprenant respectivement $nb_A$ et $nb_B$ notes.
La moyenne des notes formant la réunion de ces deux ensembles est doné par la formule :
$$ moyenne = \frac{moy_A \times nb_A + moy_B \times nb_B}{nb_A + nb_B}$$.
-
Tester la fonction moyenne créée.
-
Proposer une fonction main qui répond au cahier des charges. Cette fonction fera appel aux deux fonctions
continuer et moyenne et n'aura pas de paramètre ; elle renverra la moyenne de toutes les notes successivement
saisies.
-
Tester votre programme principal, par exemple en saisissant successivement les valeurs 10, 19 et 13.
Pour accéder au code de la correction : lien
Exercices de renforcement
Sur la boucle répétitive conditionnelle while
Chaque année la consommation énergétique d'un data center est estimée augmenter de 8 %.
Déterminer le nombre d'années nécessaires au doublement de la consommation énegétique de ce data center.
Le résultat ne dépend pas de la consommation énergétique actuelle de ce data center.
Pour accéder au code de la correction : lien