179 lines
5.9 KiB
Markdown
179 lines
5.9 KiB
Markdown
|
|
# Itération 2 - Fonctions et modules
|
||
|
|
|
||
|
|
## Objectifs du TP
|
||
|
|
|
||
|
|
### Apprendre
|
||
|
|
|
||
|
|
- **Fonctions** : Création de fonctions
|
||
|
|
- **Refactorisation** : réorganiser le code existant
|
||
|
|
- **Modules** : Répartir le code dans différents fichiers
|
||
|
|
|
||
|
|
### 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` ?
|
||
|
|
```
|