Exo While

Identification

Infoforall

18 - Exercices While


Tous les exercices sont corrigés.

Attention : lire une correction ne garantit pas de pouvoir refaire l'exercice. Comprendre et faire sont deux capacités différentes.

1 - While avec condition de poursuite

01° Compléter ce programme pour qu'il lance les modifications de calcul tant que la variable x est strictement inférieure à 3000.

1 2 3 4 5 6 7
x = 0 while condition_de_poursuite: print(x) x = x + 10 print("FIN DU TANT QUE")

...CORRECTION...

1 2 3 4 5 6 7
x = 0 while x < 3000: print(x) x = x + 10 print("FIN DU TANT QUE")

02° Si la condition de poursuite de la boucle est que x soit strictement inférieure à 3000, quelle est la condition d'arrêt de la boucle ?

...CORRECTION...

Il faut "inverser" la condition x < 3000.

Cela veut donc dire qu'il faut que x soit supérieure OU égale à 3000.

On obtient donc x >= 3000.

03° Compléter ce programme pour qu'il lance les modifications de calcul jusqu'à ce que x soit supérieure ou égale à 3000.

1 2 3 4 5 6 7
x = 0 while not condition_d_arret: print(x) x = x + 10 print("FIN DU TANT QUE")

...CORRECTION...

1 2 3 4 5 6 7
x = 0 while not x >= 3000: print(x) x = x + 10 print("FIN DU TANT QUE")

04° On veut peindre en rouge des décorations jusqu'à ce qu'il y ai strictement plus de décorations rouges que de décorations vertes.

Cette condition pourrait s'écrire deco_rouge > deco_verte.

S'agit-il d'une condition de poursuite ou d'une condition d'arrêt ?

...CORRECTION...

Il s'agit d'une condition d'arrêt puisqu'on devra faire cesser le calcul lorsque cette condition sera vraie.

05° Compléter la condition des deux boucles proposées en se basant sur la condition précédente.

1
while not condition_d_arret:
1
while condition_de_poursuite:

...CORRECTION...

1
while not deco_rouge > deco_verte:
1
while deco_rouge <= deco_verte:

2 - Déroulement pas à pas

On veut créer un système de réservation de tickets de concert en ligne.

Le nombre de ticket maximum est stocké dans maximum.

On veut pouvoir vendre des tickets tant que le nombre nb de tickets vendus est strictement inférieur au nombre de tickets maximum qu'on peut vendre.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
maximum = 2000 nb = 0 while nb < maximum: print(f"\nIl y a actuellement {nb} tickets vendus sur {maximum}") reponse = input("Combien de tickets voulez-vous ? ") tickets = int(reponse) if nb + tickets <= maximum: # On peut effectivement vendre entre ces tickets nb = nb + tickets print("Achat accepté") else: print("Achat refusé : il n'y a plus assez de tickets") print("Les ventes sont terminées")

06° Expliquer le fonctionnement ci-dessous en l'expliquant à partir des instructions du programme.

Il y a actuellement 0 tickets vendus sur 2000 Combien de tickets voulez-vous ? 1000 Achat accepté Il y a actuellement 1000 tickets vendus sur 2000 Combien de tickets voulez-vous ? 1000 Achat accepté Les ventes sont terminées

...CORRECTION...

On arrive une première fois en Ligne 4 avec la condition valide puisqu'on a 0 tickets vendus ce qui est bien inférieur à 2000.

On en commande 1000 et la commande est validée en ligne 8 puisque (0+1000) est bien inférieur ou égal à 2000.

Ligne 9 : on modifie alors le nombre de tickets vendus à 0+1000 soit 1000.

On revient en Ligne 4 avec la condition valide puisqu'on a 1000 tickets vendus ce qui est bien inférieur à 2000.

On en commande 1500 et la commande n'est pas validée en ligne 8 puisque (1000+1500) n'est pas inférieur ou égal à 2000.

Ligne 12 : on affiche que la commande n'est pas validée.

On revient en Ligne 4 avec la condition valide puisqu'on a 1000 tickets vendus ce qui est bien inférieur à 2000.

On en commande 1500 et la commande n'est pas validée en ligne 8 puisque (1000+1500) n'est pas inférieur ou égal à 2000.

Ligne 12 : on affiche que la commande n'est pas validée.

On revient en Ligne 4 avec la condition valide puisqu'on a 1000 tickets vendus ce qui est bien inférieur à 2000.

07° Expliquer le fonctionnement ci-dessous en l'expliquant à partir des instructions du programme.

Il y a actuellement 0 tickets vendus sur 2000 Combien de tickets voulez-vous ? 1000 Achat accepté Il y a actuellement 1000 tickets vendus sur 2000 Combien de tickets voulez-vous ? 1500 Achat refusé : il n'y a plus assez de tickets Il y a actuellement 1000 tickets vendus sur 2000 Combien de tickets voulez-vous ? 1500 Achat refusé : il n'y a plus assez de tickets Il y a actuellement 1000 tickets vendus sur 2000 Combien de tickets voulez-vous ?

...CORRECTION...

On arrive une première fois en Ligne 4 avec la condition valide puisqu'on a 0 tickets vendus ce qui est bien inférieur à 2000.

On en commande 1000 et la commande est validée en ligne 8 puisque (0+1000) est bien inférieur ou égal à 2000.

Ligne 9 : on modifie alors le nombre de tickets vendus à 0+1000 soit 1000.

On revient en Ligne 4 avec la condition valide puisqu'on a 1000 tickets vendus ce qui est bien inférieur à 2000.

On en commande 1000 et la commande est validée en ligne 8 puisque (1000+1000) est bien inférieur ou égal à 2000.

Ligne 9 : on modifie alors le nombre de tickets vendus à 1000+1000 soit 2000.

On revient en Ligne 4 avec la condition invalide puisque 2000 tickets vendus n'est pas strictement inférieur à 2000.

On arrive alors en ligne 14 puisqu'on quitte la boucle TANT QUE.

3 - Equivalence

08° Réaliser à l'aide d'une boucle non bornée TANT QUE un programme similaire à celui-ci qui utilise une boucle bornée POUR.

1 2 3 4 5 6
def somme(n): """Renvoie la somme de 1 + 2 + 3... jusqu'à n.""" reponse = 0 for x in range(n+1): reponse = reponse + x return reponse

Il vous faudra donc créer et initialiser la variable x alors qu'elle est gérée automatiquement par notre boucle FOR.

...CORRECTION...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
def somme(n): """Renvoie la somme de 1 + 2 + 3... jusqu'à n.""" reponse = 0 for x in range(n+1): reponse = reponse + x return reponse def somme2(n): """Renvoie la somme de 1 + 2 + 3... jusqu'à n.""" reponse = 0 x = 0 while x < n+1: reponse = reponse + x x = x + 1 return reponse

09° On peut toujours remplacer une boucle POUR par une boucle TANT QUE. Mais peut-on remplacer n'importe quelle boucle TANT QUE par une boucle POUR ?

...CORRECTION...

Et non. On ne peut pas systématiquement remplacer une boucle TANT QUE par une boucle POUR.

Notamment, il est impossible de réaliser une boucle infinie avec une boucle POUR.

Par contre, lorsqu'on peut remplacer un TANT QUE par un POUR il faut l'associer à un return dans une fonction de façon à obtenir un moyen de stopper la boucle avant sa fin naturelle.

Activité publiée le 02 01 2022
Dernière modification : 02 01 2022
Auteur : ows. h.