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 :

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.

  1. 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.

  2. Écrire une fonction remplir(quant)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.

Code de déblocage du lien menant à la correction :

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.

Code de déblocage du lien menant à la correction :

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 :

  1. Écrire une fonction prop1(h) qui renvoie le salaire de Arjuna après avoir travaillé h heures avec la proposition 1.

    Code de déblocage du lien menant à la correction :

  2. Écrire une fonction prop2(h) qui renvoie le salaire de Arjuna après avoir travaillé h heures avec la proposition 2.

    Code de déblocage du lien menant à la correction :

  3. Proposer une fonction choix() qui renvoie le nombre d'heures à partir duquel la proposition 1 est préférable pour Arjuna.

    Code de déblocage du lien menant à la correction :

Lorsque l'utilisateur saisit une donnée, il peut être utile de vérifier qu'elle est conforme à ce qu'on attend de lui.

  1. Proposer une fonction saisie() qui demande à l'utilisateur de rentrer un nombre positif et qui renvoie ce nombre.

    Code de déblocage du lien menant à la correction :

  2. 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().

    Code de déblocage du lien menant à la correction :

  3. É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()

    Code de déblocage du lien menant à la correction :

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.

  1. Proposer une fonction minimum qui renvoie le minimum des deux nombres entrés comme arguments.

  2. 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.

  3. 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 :

  1. 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'.

  2. Tester la fonction continuer créée.

  3. 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}$$.
  4. Tester la fonction moyenne créée.

  5. 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.

  6. 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

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International