Skip to content
Snippets Groups Projects
Commit f934f435 authored by Vincent Namy (EDU_GE)'s avatar Vincent Namy (EDU_GE)
Browse files

[NB7 while] améliorations + ajout correction

parent 95a2cb15
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
<div style="padding:20px;background-color:papayawhip;" >
<h3 style="color:chocolate"> <i class="fa fa-info" aria-hidden="true"> </i> &nbsp; Remarque introductive &nbsp; <i class="fa fa-info" aria-hidden="true"></h3>
<p> Ce fichier est fait pour être lu sur le site <a href="https://notebook.basthon.fr/"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style="border: 0; display:inline; margin: 0 5px; height:30px" alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <a href="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" &nbsp; <i class="fa fa-folder" aria-hidden="true"> </i>
</p> </div>
%% Cell type:markdown id: tags:
# 7 - Boucle `while` - Corrigé
Dans ce chapitre, nous découvrons un deuxième type de boucle, la boucle `while`. Elle est souvent utilisée pour attendre quelque chose. Nous allons voir que :
- la boucle `while` répète aussi longtemps qu'une condition est vraie,
- le mot-clé `break` permet de sortir de la boucle.
%% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3>
```
En Python, while permet de réaliser :
A) une fonction
B) une condition
C) une boucle
D) aucune des réponses précédentes
```
%% Cell type:raw id: tags:
Ma réponse:
%% Cell type:markdown id: tags:
<details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse
</summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">C) une boucle
</div>
</details>
%% Cell type:markdown id: tags:
### Exemple 1 : Compteur trivial
L'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début
de boucle, le programme va évaluer la condition `compteur <= 10` puis exécuter le
bloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`.
%% Cell type:code id: tags:
``` python
compteur = 1
while compteur <= 10:
print(compteur)
compteur = compteur + 1
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 1: Compteur </h3>
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50.
%% Cell type:code id: tags:
``` python
compteur = 0
while compteur <= 50:
print(compteur)
compteur = compteur + 1
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 2: Compteur pair </h3>
💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50.
%% Cell type:code id: tags:
``` python
compteur = 0
while compteur <= 50:
print(compteur)
compteur = compteur + 2
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 3: Compteur décroissant </h3>
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant.
%% Cell type:code id: tags:
``` python
compteur = 20
while compteur >= 0:
print(compteur)
compteur = compteur - 1
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 4: Saisie sécurisée </h3>
💡 **Objectif** : Demander un nombre supérieur à 20 jusqu'à obtenir une entrée valide. Tant que le nombre saisi n'est pas supérieur à 20, on repose la question (input).
%% Cell type:code id: tags:
``` python
rep=0
while rep <= 20:
rep = int(input("Entrez un nombre supérieur à 20 : "))
```
%% Cell type:markdown id: tags:
<h3 > Exemple 2: Faire une somme</h3>
Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur-trice.
On ne peut pas savoir à l'avance combien de nombres il y aura, et donc nous ne pouvons pas utiliser la boucle `for`. Nous prenons comme condition de terminaison une réponse avec le nombre 0.
Entrez les frais de vos 3 derniers achats.
%% Cell type:code id: tags:
``` python
somme = 0
nombre = float(input('Entrez un nombre: '))
while nombre != 0:
somme = somme + nombre
nombre = float(input('Entrez un nombre: '))
print('somme =', somme)
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 5: Faire une moyenne</h3>
**Objectif** : Sur l'exemple du code précédent. Compléter le code suivant en remplaçant les ... afin de calculer une moyenne.
%% Cell type:code id: tags:
``` python
somme = 0
nombre_de_note = 0
note = float(input('Entrez une note: '))
while note != 0:
# compléter le code à la place des ...
somme = somme + note
nombre_de_note = nombre_de_note + 1
note = float(input('Entrez un nombre: '))
print('moyenne =', somme/nombre_de_note)
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 6: Menu répétitif </h3>
💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse "q" pour quitter.
```Python
- Menu -
1. Salade mêlée
2. Tartiflette
q. Quitter
Choisissez une option :
```
%% Cell type:code id: tags:
``` python
rep='1'
while rep != 'q':
rep = input("""- Menu -
1. Salade mêlée
2. Tartiflette
q. Quitter
Choisissez une option :""")
```
%% Cell type:markdown id: tags:
---
# 🎯 **Conclusion : Quand utiliser `while` ?**
| Situation | `for` | `while` |
|-----------|-------|---------|
| Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non |
| Nombre d'itérations inconnu (dépend d'une condition) | ❌ Non | ✅ Oui |
| Répéter une action jusqu'à un événement spécifique | ❌ Non | ✅ Oui |
| Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui |
| Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté |
## 📌 **À retenir**
- **Utilise `for`** lorsque **le nombre d'itérations est fixé** (ex: parcourir une liste, boucle de comptage).
- **Utilise `while`** lorsque **la boucle dépend d’une condition** qui peut varier (ex: entrée utilisateur, événement aléatoire, suivi d'une valeur dynamique).
- **Attention aux boucles infinies !** Toujours s'assurer que la condition de sortie est bien définie.
🚀 **Exercez-vous** en adaptant les exercices et en créant vos propres scénarios d'utilisation de `while` !
---
%% Cell type:markdown id: tags:
## Pour aller plus loin...
%% Cell type:markdown id: tags:
<h3> &nbsp; Exemple 3: Décomposer en facteurs premiers</h3>
Le programme suivant réalise la décomposition en facteurs premiers d'un nombre donné par l'utilisateur-trice.
%% Cell type:code id: tags:
``` python
nombre = int(input('Entrez un entier: '))
i = 2
while i < nombre:
if nombre % i == 0: # % est le reste de la division entière
print(i)
nombre = nombre // i # // correspond à la division entière
else:
i = i + 1
print(nombre)
```
%% Cell type:markdown id: tags:
<h3 > &nbsp; Exemple 4: En code binaire</h3>
Le programme transforme l'entier en code binaire.
%% Cell type:code id: tags:
``` python
n = int(input('Entrez un entier: '))
code = ''
while n > 0:
if n % 2 == 1:
code = '1' + code
else:
code = '0' + code
n = n // 2
print(code)
```
%% Cell type:markdown id: tags:
<h3 > &nbsp; Exemple 5: Lancer un dé jusqu'à obtenir un 6 🎲</h3>
Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives. Pour simuler un lancé de dé, nous allons utiliser le module random en python.
`randint(min,max)` est une fonction qui retourne un nombre entier compris entre min et max. Dans notre cas min = 1 et max = 6.
%% Cell type:code id: tags:
``` python
from random import *
tentatives = 0
resultat = 0
while resultat != 6:
resultat = randint(1, 6)
tentatives = tentatives + 1
print("Tentative:", tentatives, ":", resultat)
print("Vous avez obtenu un 6 après", tentatives, "essais.")
```
%% Cell type:markdown id: tags:
<h3>Exemple 6: Compte à rebours</h3>
%% Cell type:markdown id: tags:
On peut utiliser la boucle `while` pour créer un compteur à rebours.
Pour attendre une seconde, la fonction `sleep()` du module `time` est importée.
Tant que `n` est strictement plus grand que 0, les instructions indentées dans la boucle `while` sont executées.
%% Cell type:code id: tags:
``` python
from time import sleep
n = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str).
while n > 0:
print(n)
sleep(1) # On attend 1 seconde avant de continuer
n = n - 1
print('boum!!!')
```
%% Cell type:markdown id: tags:
## Sortir avec `break`
Le mot-clé `break`, seul sur une ligne, permet de sortir d'une boucle.
Souvent cette méthode est utilisée pour sortir d'une boucle infinie.
%% Cell type:code id: tags:
``` python
noms = []
while True:
nom = input('Entrez un nom: ')
if nom == '':
break
noms.append(nom)
print(noms)
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 7: Lancer de dé jusqu'à obtenir un 6 🎲 </h3>
💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 8: Le trait qui tourne </h3>
💡 **Objectif** : En répétant plusieurs fois je dessine un trait et je tourne d'un angle, je dessine une figure.
Suivre les indications suivantes:
- le stylo de couleur bleu avance sur un segment droit de longueur 5;
- puis tourne de 70° vers la droite.
- Ensuite, la longueur du segment est incrémentée (augmentée de 0.5).
- Répéter ces étapes tant que la longueur du segment est inférieure à 150.
Tester ensuite le programme avec une rotation de 89° au lieu de 70°.
Dessinez une usine avec un toit en dents de scie.
![Image de tourbillon](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/tourbillon.png)
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
---
#### Remarque générale
Ce document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)
![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment