Réécriture complète du TP Python B1
This commit is contained in:
parent
eebf8d7a03
commit
eca1cf7e77
9 changed files with 756 additions and 889 deletions
182
src/cours/CIEL1/01-bases-python/tp/TP_MDP01_menu.md
Normal file
182
src/cours/CIEL1/01-bases-python/tp/TP_MDP01_menu.md
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
L'objectif de cette série de TP est de construire un générateur de mots de passe sécurisés.
|
||||
|
||||
# Itération 1 - Menu interactif en Python
|
||||
|
||||
## Objectifs du TP
|
||||
|
||||
### Apprendre
|
||||
|
||||
- **Variables** : Déclarer et utiliser une variable
|
||||
- **Sorties** : Afficher du texte avec `print`
|
||||
- **Entrée** : Récupérer du texte saisi par l'utilisateur
|
||||
- **Conditions** : Utiliser `if`, `elif` et `else`
|
||||
- **Boucles** : Pour répéter le programme
|
||||
|
||||
### Objectif technique
|
||||
|
||||
Créer un menu interactif pour que l'utilisateurice puisse choisir son option
|
||||
|
||||
```
|
||||
================================================
|
||||
CIEL - Générateur de mots de passe
|
||||
================================================
|
||||
Quel type de mot de passe souhaitez-vous créer ?
|
||||
1 - Mot de passe avec configuration par défaut
|
||||
2 - Mot de passe avec configuration personnalisée
|
||||
3 - Phrase de passe avec configuration par défaut
|
||||
4 - Phrase de passe avec configuration personnalisée
|
||||
0 - Quitter
|
||||
Saisissez votre choix : 1
|
||||
Mot de passe par défaut
|
||||
```
|
||||
|
||||
## Étapes
|
||||
|
||||
### 1 - Préparation
|
||||
|
||||
**Objectif :** Préparer votre fichier de script et commencer à travailler avec Thonny
|
||||
|
||||
```admonish travail
|
||||
- Créer un fichier `main.py` dans votre répertoire de travail
|
||||
```
|
||||
|
||||
### 2 - Affichage du titre et du menu
|
||||
|
||||
**Objectif :** Afficher le titre et toutes les options du menu
|
||||
|
||||
```admonish tip title="A utiliser"
|
||||
- La fonction `print`
|
||||
```
|
||||
|
||||
**Résultat attendu :**
|
||||
```
|
||||
================================================
|
||||
CIEL - Générateur de mots de passe
|
||||
================================================
|
||||
Quel type de mot de passe souhaitez-vous créer ?
|
||||
1 - Mot de passe avec configuration par défaut
|
||||
2 - Mot de passe avec configuration personnalisée
|
||||
3 - Phrase de passe avec configuration par défaut
|
||||
4 - Phrase de passe avec configuration personnalisée
|
||||
0 - Quitter
|
||||
```
|
||||
|
||||
```admonish travail
|
||||
- Utilisez du code pour afficher exactement le texte ci-dessus
|
||||
```
|
||||
|
||||
### 3 - Demander le choix à l'utilisateur
|
||||
|
||||
**Objectif :** Afficher "Saisissez votre choix : " et récupérer la réponse de l'utilisateur
|
||||
|
||||
```admonish tip title="A utiliser"
|
||||
- La fonction `input`
|
||||
```
|
||||
|
||||
```admonish question
|
||||
1. Quel est le type de la donnée récupérée via `input`
|
||||
2. Comment allez-vous stocker cette donnée ? Quel type aura la variable ?
|
||||
```
|
||||
|
||||
|
||||
### 4 - Gérer les choix valides
|
||||
|
||||
**Objectif :** Utiliser des conditions pour gérer les choix de l'utilisateur (1, 2, 3, 4 et 0)
|
||||
|
||||
```admonish tip title="A utiliser"
|
||||
- `if`
|
||||
- `elif`
|
||||
- Opérateurs de comparaison
|
||||
```
|
||||
|
||||
**Résultat attendu :** Afficher le texte pour chacun des cas
|
||||
|
||||
|Choix|Texte à afficher|
|
||||
|-|-|
|
||||
|1|Mot de passe par défaut|
|
||||
|2|Mot de passe personnalisé|
|
||||
|3|Phrase de passe par défaut|
|
||||
|4|Phrase de passe personnalisée|
|
||||
|0|Vous quittez le programme|
|
||||
|
||||
### 5 - Gérer les choix invalides
|
||||
|
||||
**Objectif :** Traiter le cas où l'utilisateur saisit un choix non valide
|
||||
|
||||
```admonish tip title="A utiliser"
|
||||
- Ajouter un `else` pour capturer les autres cas
|
||||
- Utiliser une chaîne formatée
|
||||
```
|
||||
|
||||
**Résultat attendu :** Afficher le texte `Erreur : l'option 6 n'existe pas` (si le choix de l'utilisateur est 6 par exemple)
|
||||
|
||||
```admonish question
|
||||
1. Que se passe-t-il lorsque l'utilisateurice saisit une lettre au lieu d'un chiffre lors du choix de l'option ? Pourquoi à votre avis ? Nous ignorerons cette possibilité pour le moment, et verrons plus tard dans l'année comment le gérer.
|
||||
```
|
||||
|
||||
### 6 - Ajouter une boucle
|
||||
|
||||
**Objectif :** Le programme doit pouvoir être répété autant que l'utilisateur le veut.
|
||||
|
||||
```admonish tip title="Quelle boucle utiliser ?"
|
||||
- La boucle `for` s'utilise pour un nombre connu d'itérations
|
||||
- La boucle `while` s'utilise pour un nombre non défini à l'avance d'itérations
|
||||
```
|
||||
|
||||
```admonish warning title="Gestion de la pause"
|
||||
Si le choix de l'utilisateurice est différent de zéro (pour quitter), il faut avoir le temps de lire avant de réafficher le menu.
|
||||
|
||||
Pour cela on peut demander une entrée (avec `input`) à l'utilisateurice, mais ignorer sa saisie. On peut alors simplement lui proposer d'appuyer sur Entrée. Une fois la saisie effectuée, on pourra alors reboucler.
|
||||
```
|
||||
|
||||
```admonish question
|
||||
1. Quelle boucle sera la plus adaptée ? Pourquoi ?
|
||||
2. Comment éviter de déclencher la pause lorsque l'utilisateurice souhaite quitter le programme ?
|
||||
```
|
||||
|
||||
## Validation
|
||||
|
||||
### Checklist
|
||||
|
||||
- [ ] Le programme se lance sans erreur
|
||||
- [ ] Le titre s'affiche correctement
|
||||
- [ ] Toutes les options s'affichent
|
||||
- [ ] La saisie utilisateur fonctionne
|
||||
- [ ] Chaque option affcihe le bon message
|
||||
- [ ] Un choix (nombre entier) invalide affiche une erreur claire
|
||||
- [ ] Le code est propre, les variables sont correctement nommées et avec des noms compréhensibles
|
||||
|
||||
### Critères d'évaluation
|
||||
|
||||
- Le programme fonctionne correctement
|
||||
- Le code est propre : nommage des variables, lisibilité
|
||||
- Documentation : commentaires pertinents
|
||||
- Réponse aux questions dans le compte-rendu
|
||||
|
||||
## Pour aller plus loin
|
||||
### Bonus - Améliorations
|
||||
- Personnaliser le titre avec votre nom
|
||||
- Améliorer le texte des options et les messages
|
||||
- Amélioration de la présentation du menu
|
||||
|
||||
### Bonus difficile - Utiliser l'instruction `match`
|
||||
|
||||
```admonish warning title='Attention'
|
||||
Cette question n'est à faire **que si le reste du TP est terminé**. Elle demande plus d'autonomie et est beaucoup moins guidée.
|
||||
Si vous n'êtes pas très à l'aise avec Python ou la programmation il vaut mieux se concentrer sur le reste et bien comprendre.
|
||||
|
||||
Cette section n'est pas nécessaire à la bonne exécution du TP ni des séances suivantes. On peut terminer sans la faire.
|
||||
|
||||
**Faites une copie de votre code dans un nouveau fichier avant toute modification afin de pouvoir revenir en arrière au prochain TP si vous ne terminez pas cette question.**
|
||||
```
|
||||
|
||||
**Objectif :** Utiliser la documentation Python pour remplacer les conditions du menu par la structure `match`.
|
||||
|
||||
```admonish tip title="A utiliser"
|
||||
- Utiliser la documentation officielle de Python pour comprendre la structure `match` : [Documentation](https://docs.python.org/3/tutorial/controlflow.html#match-statements)
|
||||
- Utiliser la structure match pour remplacer la suite de conditions
|
||||
```
|
||||
|
||||
```admonish question
|
||||
- Comment gérer les cas non prévus dans le menu (ce que faisait le `else`) avec `match` ?
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue