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