Skip to content
Snippets Groups Projects
Commit 968c7bf7 authored by Edoardo Basilico (EDU-GE)'s avatar Edoardo Basilico (EDU-GE)
Browse files

Ajout série while + image

parent 9018a7b7
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`
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 fonction `sleep()` permet d'attendre et ralentir le programme,
- 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 est
A) une fonction
B) une condition
C) une boucle
D) un mot-clé
```
%% 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">D) un mot-clé
</div>
</details>
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 1: Compteur trivial</h3>
L'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début
de boucle, le programme va évaluer la condition `compteur <= maxCompteur` 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
maxCompteur = 10
compteur = 1
while compteur <= maxCompteur:
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; Exemple 2: 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:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 3: Lister des noms</h3>
Nous utilisons une boucle `while` pour demander des noms à l'utilisateur-trice.
On ne peut pas savoir à l'avance combien de noms il y aura, donc ici nous ne pouvons pas utiliser la boucle `for`. Nous prenons comme condition de terminaison une réponse avec la chaîne (`'STOP'`).
Entrez les noms de 3-4 de vos amis.
%% Cell type:code id: tags:
``` python
nom = input("Entrez un nom: ")
autre_nom = ""
while autre_nom != "STOP":
autre_nom = input("Entrez un autre nom (ou 'STOP' pour terminer) : ")
if autre_nom != "STOP": # Vérification avant de l'ajouter
nom += ", " + autre_nom
print("Voici la liste des noms :", nom)
```
%% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 4: 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 une chaîne vide (`''`) en tapant juste sur entrée (*enter*).
Entrez les frais de vos 3 derniers achats.
%% Cell type:code id: tags:
``` python
somme = 0
nombre = input('Entrez un nombre: ')
while nombre !='':
somme = somme + float(nombre) # nombre est une chaîne de caractère !
nombre = input('Entrez un nombre: ')
print('somme =', somme)
```
%% Cell type:markdown id: tags:
## **1️⃣ Exercice : Faire une moyenne**
💡 **Objectif** : Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur.
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 une chaîne vide (`''`). Compléter le code suivant en remplaçant les ...
%% Cell type:code id: tags:
``` python
somme = 0
nombre_de_note = 0
note = float(input('Entrez une note: '))
while note:
# compléter le code à la place des ...
somme = ...
nombre_note = ...
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; Exemple 5: 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 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 6: 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 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 7: 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:
## 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:
---
# 🎯 **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:
## **2️⃣ Série d'exercices simples**
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse "q" pour quitter.
```Python
- Menu -
1. Option une
2. Option deux
q. Quitter
Choisissez une option :
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
## **3️⃣ Exercice : Saisie sécurisée**
💡 **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).
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
## **4️⃣ Exercice : Lancer de dé jusqu'à obtenir un 6 🎲**
💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.
%% Cell type:code id: tags:
``` python
from random import *
tentatives =
```
%% Cell type:markdown id: tags:
## **5️⃣ Exercice : Le trait qui tourne**
💡 **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)
Notebooks/imgs_chap7/tourbillon.png

76.8 KiB

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