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

Remplacer 07_Boucle_while.ipynb

parent 5e5ae841
Branches
No related tags found
Loading
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="padding:20px;background-color:papayawhip;" > <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> <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> <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> 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> 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> </p> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# 7 - Boucle `while` # 7 - Boucle `while`
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 : 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, - la boucle `while` répète aussi longtemps qu'une condition est vraie,
- le mot-clé `break` permet de sortir de la boucle. - le mot-clé `break` permet de sortir de la boucle.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3> <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 : En Python, while permet de réaliser :
A) une fonction A) une fonction
B) une condition B) une condition
C) une boucle C) une boucle
D) aucune des réponses précédentes D) aucune des réponses précédentes
``` ```
%% Cell type:raw id: tags: %% Cell type:raw id: tags:
Ma réponse: Ma réponse:
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<details> <details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8"> <summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse Réponse
</summary> </summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">C) une boucle <div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">C) une boucle
</div> </div>
</details> </details>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Exemple 1 : Compteur trivial ### Exemple 1 : Compteur trivial
L'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début 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 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`. bloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
compteur = 1 compteur = 1
while compteur <= 10: while compteur <= 10:
print(compteur) print(compteur)
compteur = compteur + 1 compteur = compteur + 1
``` ```
%% Cell type:markdown id: tags: %% 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> <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. 💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% 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> <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. 💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% 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> <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. 💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 4: Menu répétitif </h3> <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** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse "q" pour quitter. 💡 **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).
```Python
- Menu -
1. Salade mêlée
2. Tartiflette
q. Quitter
Choisissez une option :
```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 > Exemple 2: Faire une somme</h3> <h3 > Exemple 2: Faire une somme</h3>
Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur-trice. 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. 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. Entrez les frais de vos 3 derniers achats.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
somme = 0 somme = 0
nombre = float(input('Entrez un nombre: ')) nombre = float(input('Entrez un nombre: '))
while nombre != 0: while nombre != 0:
somme = somme + nombre somme = somme + nombre
nombre = float(input('Entrez un nombre: ')) nombre = float(input('Entrez un nombre: '))
print('somme =', somme) print('somme =', somme)
``` ```
%% Cell type:markdown id: tags: %% 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> <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. **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: %% Cell type:code id: tags:
``` python ``` python
somme = 0 somme = 0
nombre_de_note = 0 nombre_de_note = 0
note = float(input('Entrez une note: ')) note = float(input('Entrez une note: '))
while note != 0: while note != 0:
# compléter le code à la place des ... # compléter le code à la place des ...
somme = ... somme = ...
nombre_de_note = ... nombre_de_note = ...
note = float(input('Entrez un nombre: ') note = float(input('Entrez un nombre: '))
print('moyenne =', somme/nombre_de_note) print('moyenne =', somme/nombre_de_note)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 6: Saisie sécurisée </h3> <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** : Demander un nombre entre 1 et 10 jusqu'à obtenir une entrée valide. Tant que le nombre saisi n'est pas compris entre 1 et 10, on repose la question (input). 💡 **Objectif** : Corrigez le code qui affiche 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: %% Cell type:code id: tags:
``` python ``` python
while rep != 'q':
rep = input("""- Menu -
1. Salade mêlée
2. Tartiflette
q. Quitter
Choisissez une option :""")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
--- ---
# 🎯 **Conclusion : Quand utiliser `while` ?** # 🎯 **Conclusion : Quand utiliser `while` ?**
| Situation | `for` | `while` | | Situation | `for` | `while` |
|-----------|-------|---------| |-----------|-------|---------|
| Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non | | Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non |
| Nombre d'itérations inconnu (dépend d'une condition) | ❌ Non | ✅ Oui | | 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 | | Répéter une action jusqu'à un événement spécifique | ❌ Non | ✅ Oui |
| Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui | | Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui |
| Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté | | Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté |
## 📌 **À retenir** ## 📌 **À retenir**
- **Utilise `for`** lorsque **le nombre d'itérations est fixé** (ex: parcourir une liste, boucle de comptage). - **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). - **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. - **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` ! 🚀 **Exercez-vous** en adaptant les exercices et en créant vos propres scénarios d'utilisation de `while` !
--- ---
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Pour aller plus loin... ## Pour aller plus loin...
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3> &nbsp; Exemple 3: Décomposer en facteurs premiers</h3> <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. Le programme suivant réalise la décomposition en facteurs premiers d'un nombre donné par l'utilisateur-trice.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
nombre = int(input('Entrez un entier: ')) nombre = int(input('Entrez un entier: '))
i = 2 i = 2
while i < nombre: while i < nombre:
if nombre % i == 0: # % est le reste de la division entière if nombre % i == 0: # % est le reste de la division entière
print(i) print(i)
nombre = nombre // i # // correspond à la division entière nombre = nombre // i # // correspond à la division entière
else: else:
i = i + 1 i = i + 1
print(nombre) print(nombre)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 > &nbsp; Exemple 4: En code binaire</h3> <h3 > &nbsp; Exemple 4: En code binaire</h3>
Le programme transforme l'entier en code binaire. Le programme transforme l'entier en code binaire.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
n = int(input('Entrez un entier: ')) n = int(input('Entrez un entier: '))
code = '' code = ''
while n > 0: while n > 0:
if n % 2 == 1: if n % 2 == 1:
code = '1' + code code = '1' + code
else: else:
code = '0' + code code = '0' + code
n = n // 2 n = n // 2
print(code) print(code)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 > &nbsp; Exemple 5: Lancer un dé jusqu'à obtenir un 6 🎲</h3> <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. 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. `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: %% Cell type:code id: tags:
``` python ``` python
from random import * from random import *
tentatives = 0 tentatives = 0
resultat = 0 resultat = 0
while resultat != 6: while resultat != 6:
resultat = randint(1, 6) resultat = randint(1, 6)
tentatives = tentatives + 1 tentatives = tentatives + 1
print("Tentative:", tentatives, ":", resultat) print("Tentative:", tentatives, ":", resultat)
print("Vous avez obtenu un 6 après", tentatives, "essais.") print("Vous avez obtenu un 6 après", tentatives, "essais.")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3>Exemple 6: Compte à rebours</h3> <h3>Exemple 6: Compte à rebours</h3>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
On peut utiliser la boucle `while` pour créer un compteur à rebours. 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. 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. 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: %% Cell type:code id: tags:
``` python ``` python
from time import sleep from time import sleep
n = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str). n = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str).
while n > 0: while n > 0:
print(n) print(n)
sleep(1) # On attend 1 seconde avant de continuer sleep(1) # On attend 1 seconde avant de continuer
n = n - 1 n = n - 1
print('boum!!!') print('boum!!!')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Sortir avec `break` ## Sortir avec `break`
Le mot-clé `break`, seul sur une ligne, permet de sortir d'une boucle. 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. Souvent cette méthode est utilisée pour sortir d'une boucle infinie.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
noms = [] noms = []
while True: while True:
nom = input('Entrez un nom: ') nom = input('Entrez un nom: ')
if nom == '': if nom == '':
break break
noms.append(nom) noms.append(nom)
print(noms) print(noms)
``` ```
%% Cell type:markdown id: tags: %% 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> <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. 💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% 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> <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. 💡 **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: Suivre les indications suivantes:
- le stylo de couleur bleu avance sur un segment droit de longueur 5; - le stylo de couleur bleu avance sur un segment droit de longueur 5;
- puis tourne de 70° vers la droite. - puis tourne de 70° vers la droite.
- Ensuite, la longueur du segment est incrémentée (augmentée de 0.5). - 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. - 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°. Tester ensuite le programme avec une rotation de 89° au lieu de 70°.
Dessinez une usine avec un toit en dents de scie. 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) ![Image de tourbillon](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/tourbillon.png)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
--- ---
#### Remarque générale #### 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) 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) ![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.
Please register or to comment