Extrait le tuto VSCode dans un fichier à part
This commit is contained in:
		
							parent
							
								
									7f0fb0bb4f
								
							
						
					
					
						commit
						f6d545059f
					
				
					 20 changed files with 297 additions and 24 deletions
				
			
		
							
								
								
									
										178
									
								
								src/cours/CIEL1/01-bases-python/tp/TP_MDP02_fonctions.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								src/cours/CIEL1/01-bases-python/tp/TP_MDP02_fonctions.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,178 @@ | |||
| # 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` ? | ||||
| ``` | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue