ajout exercices, corrections diverses, glossaire

- Ajout des 10 TPs d'évaluation (sans PDF)
- Création GLOSSAIRE.md et AMELIORATIONS.md
- Corrections f-strings, eval(), sommaires

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-29 23:37:26 +01:00
parent 66323aac75
commit 616dd49e8c
43 changed files with 8682 additions and 42 deletions

View File

@@ -352,7 +352,7 @@ Coordonnees = namedtuple('Coordonnees', ['latitude', 'longitude'])
paris = Coordonnees(48.8566, 2.3522)
lyon = Coordonnees(latitude=45.7640, longitude=4.8357)
print(f"Paris : {paris.latitude}°N, {paris.longitude}°E")
print("Paris :", paris.latitude, "°N,", paris.longitude, "°E")
```
### Avantages des p-uplets nommés

View File

@@ -49,7 +49,7 @@ L'algorithme principal est le suivant :
bombe = creer_bombe(creer_combinaison(combinaison))
numero_serie = creer_numero_serie()
print(f"n°{numero_serie}")
print("n°", numero_serie)
afficher_bombe(bombe)

View File

@@ -0,0 +1,481 @@
# TP de rattrapage : Le Vérificateur de Code Secret
**Travail personnel obligatoire**
Ce TP est à réaliser **chez vous**. Il vous prépare au TP Mastermind en vous faisant travailler les mêmes notions, mais **étape par étape**.
Chaque étape vous indique :
- Ce que vous devez faire
- Où trouver l'aide dans votre cours
- Des indices pour vous guider
**Vous devez rendre un fichier Python `verificateur.py` avec tout votre code.**
---
## Contexte
Vous allez créer un petit programme qui vérifie si un code secret à 4 chiffres est correct. C'est comme un digicode d'immeuble !
Le code secret est : `[1, 2, 3, 4]`
L'utilisateur propose un code, et le programme lui dit :
- Combien de chiffres sont **bien placés**
- Combien de chiffres sont **présents mais mal placés**
---
## Partie 1 : Créer des listes (15 min)
### Exercice 1.1 - Créer le code secret
**Objectif** : Créer une variable `code_secret` qui contient la liste `[1, 2, 3, 4]`
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Créer une liste"**
> Cherchez "créer par extension"
**Ce que vous devez écrire** : Une seule ligne de code qui crée la variable.
**Vérification** : Ajoutez `print(code_secret)` et exécutez. Vous devez voir `[1, 2, 3, 4]`
---
### Exercice 1.2 - Créer une proposition
**Objectif** : Créer une variable `proposition` qui contient la liste `[1, 5, 3, 2]`
**Aide dans le cours** :
> 📖 Même section que l'exercice précédent
**Vérification** : Ajoutez `print(proposition)` et exécutez.
---
### Exercice 1.3 - Créer une liste vide
**Objectif** : Créer une variable `resultats` qui est une liste **vide**
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Créer une liste"**
> Cherchez "Vide"
**Indice** : Une liste vide s'écrit avec des crochets sans rien dedans.
**Vérification** : `print(resultats)` doit afficher `[]`
---
## Partie 2 : Accéder aux éléments (15 min)
### Exercice 2.1 - Afficher le premier élément
**Objectif** : Afficher le **premier** élément de `code_secret`
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Accéder aux éléments d'une liste"**
> Cherchez "indice" et "Le premier élément"
**Question** : Quel est l'indice du premier élément ? (Ce n'est PAS 1 !)
**Ce que vous devez écrire** : `print(code_secret[???])` en remplaçant `???`
**Vérification** : Vous devez voir `1`
---
### Exercice 2.2 - Afficher le dernier élément
**Objectif** : Afficher le **dernier** élément de `code_secret`
**Aide dans le cours** :
> 📖 Même section
> Cherchez "indice négatif"
**Deux méthodes possibles** :
- Avec l'indice positif (lequel ?)
- Avec l'indice négatif `-1`
**Vérification** : Vous devez voir `4`
---
### Exercice 2.3 - Connaître la taille d'une liste
**Objectif** : Afficher le nombre d'éléments dans `code_secret`
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Accéder aux éléments d'une liste"**
> Cherchez "len"
**Ce que vous devez écrire** : `print(len(???))` en remplaçant `???`
**Vérification** : Vous devez voir `4`
---
## Partie 3 : Comparer des éléments (20 min)
### Exercice 3.1 - Comparer deux valeurs
**Objectif** : Afficher `True` si le premier élément de `code_secret` est égal au premier élément de `proposition`, `False` sinon.
**Aide dans le cours** :
> 📖 Cours sur les conditionnelles (programmation/chapitre_2) → Section **"Comparaisons de variables"**
> Cherchez "est égal à" et le symbole correspondant
**Attention** : Pour tester l'égalité, on n'utilise PAS `=` mais un autre symbole !
**Ce que vous devez écrire** : `print(code_secret[0] ??? proposition[0])` en remplaçant `???`
**Vérification** : Avec `code_secret = [1,2,3,4]` et `proposition = [1,5,3,2]`, vous devez voir `True` (car les deux premiers éléments sont `1`)
---
### Exercice 3.2 - Comparer le deuxième élément
**Objectif** : Même chose pour le **deuxième** élément
**Vérification** : Vous devez voir `False` (car `2 != 5`)
---
### Exercice 3.3 - Utiliser une condition if
**Objectif** : Écrire un code qui affiche `"Bien placé !"` si le premier élément est correct, sinon affiche `"Raté !"`
**Aide dans le cours** :
> 📖 Cours sur les conditionnelles → Section **"Cas : Si...Alors...Sinon"**
> Regardez la structure `if ... else`
**Structure à compléter** :
```python
if code_secret[0] == proposition[0]:
print(???)
else:
print(???)
```
**Vérification** : Avec les listes données, vous devez voir `"Bien placé !"`
---
## Partie 4 : Parcourir une liste avec une boucle (25 min)
### Exercice 4.1 - Afficher tous les éléments
**Objectif** : Afficher **tous** les éléments de `code_secret`, un par ligne
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Parcours d'une séquence"**
> Cherchez "for elt in liste"
**Structure à compléter** :
```python
for element in code_secret:
print(???)
```
**Vérification** : Vous devez voir :
```
1
2
3
4
```
---
### Exercice 4.2 - Parcourir avec les indices
**Objectif** : Afficher l'indice ET l'élément correspondant
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Parcours d'une séquence"**
> Cherchez "for i in range(len(...))"
> 📖 Cours sur les boucles (programmation/chapitre_3) → Section **"Utilisation de la fonction range()"**
**Structure à compléter** :
```python
for i in range(len(code_secret)):
print("Indice", i, "-> valeur", ???)
```
**Indice** : Pour accéder à l'élément d'indice `i`, on écrit `code_secret[i]`
**Vérification** : Vous devez voir :
```
Indice 0 -> valeur 1
Indice 1 -> valeur 2
Indice 2 -> valeur 3
Indice 3 -> valeur 4
```
---
### Exercice 4.3 - Compter les bien placés
**Objectif** : Compter combien de chiffres de `proposition` sont bien placés (même valeur au même indice)
**Aide dans le cours** :
> 📖 Combinez ce que vous avez vu :
> - Boucle `for i in range(...)`
> - Condition `if ... == ...`
> - Compteur (une variable qu'on incrémente)
**Structure à compléter** :
```python
compteur = 0
for i in range(???):
if code_secret[i] == proposition[i]:
compteur = compteur + 1
print("Nombre de bien placés :", compteur)
```
**Vérification** : Avec `code_secret = [1,2,3,4]` et `proposition = [1,5,3,2]`, vous devez voir `2` (les positions 0 et 2 sont correctes)
---
## Partie 5 : Tester l'appartenance à une liste (15 min)
### Exercice 5.1 - Vérifier si un élément est dans une liste
**Objectif** : Afficher `True` si le chiffre `5` est présent quelque part dans `code_secret`, `False` sinon
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"À retenir"** (le tableau récapitulatif)
> Cherchez l'opérateur `in`
**Ce que vous devez écrire** : `print(5 ??? code_secret)` en remplaçant `???` par le bon mot-clé
**Vérification** : Vous devez voir `False` (car 5 n'est pas dans [1,2,3,4])
---
### Exercice 5.2 - Vérifier si 2 est dans le code
**Objectif** : Même chose avec le chiffre `2`
**Vérification** : Vous devez voir `True`
---
### Exercice 5.3 - Compter les mal placés
**Objectif** : Compter combien de chiffres de `proposition` sont **présents** dans `code_secret` mais **pas au bon endroit**
**Aide** : Un chiffre est "mal placé" si :
1. Il n'est PAS bien placé (`proposition[i] != code_secret[i]`)
2. ET il existe quelque part dans `code_secret` (`proposition[i] in code_secret`)
**Structure à compléter** :
```python
mal_places = 0
for i in range(4):
if proposition[i] != code_secret[i]: # Pas bien placé
if proposition[i] ??? code_secret: # Mais présent dans le code
mal_places = mal_places + 1
print("Nombre de mal placés :", mal_places)
```
**Vérification** : Avec `proposition = [1,5,3,2]`, vous devez voir `1` (le `2` est présent mais mal placé)
---
## Partie 6 : Ajouter des éléments à une liste (15 min)
### Exercice 6.1 - Ajouter un élément
**Objectif** : Ajouter le nombre `99` à la fin de la liste `resultats` (qui était vide)
**Aide dans le cours** :
> 📖 Cours sur les listes → Section **"Propriétés"**
> Cherchez "append"
**Ce que vous devez écrire** : `resultats.???(99)` en remplaçant `???`
**Vérification** : `print(resultats)` doit afficher `[99]`
---
### Exercice 6.2 - Construire une liste de résultats
**Objectif** : Créer une liste qui contient `"OK"` pour chaque position bien placée et `"X"` pour chaque position mal placée
**Structure à compléter** :
```python
resultats = []
for i in range(4):
if code_secret[i] == proposition[i]:
resultats.???(???) # Ajouter "OK"
else:
resultats.???(???) # Ajouter "X"
print(resultats)
```
**Vérification** : Avec `proposition = [1,5,3,2]`, vous devez voir `['OK', 'X', 'OK', 'X']`
---
## Partie 7 : Créer une fonction (20 min)
### Exercice 7.1 - Votre première fonction
**Objectif** : Créer une fonction `dire_bonjour` qui affiche "Bonjour !"
**Aide dans le cours** :
> 📖 Cours sur les fonctions (programmation/chapitre_4) → Section **"Déclaration d'une fonction"**
**Structure** :
```python
def dire_bonjour():
print("Bonjour !")
```
**Pour appeler la fonction** : `dire_bonjour()`
**Vérification** : Vous devez voir `Bonjour !`
---
### Exercice 7.2 - Fonction avec paramètre
**Objectif** : Créer une fonction `dire_bonjour_a` qui prend un `prenom` en paramètre et affiche "Bonjour [prenom] !"
**Structure à compléter** :
```python
def dire_bonjour_a(prenom):
print("Bonjour", ???, "!")
```
**Appel** : `dire_bonjour_a("Alice")` doit afficher `Bonjour Alice !`
---
### Exercice 7.3 - Fonction qui renvoie une valeur
**Objectif** : Créer une fonction `double` qui prend un nombre en paramètre et **renvoie** son double
**Aide dans le cours** :
> 📖 Cours sur les fonctions → Cherchez `return`
**Structure à compléter** :
```python
def double(nombre):
resultat = nombre * 2
return ???
```
**Appel** : `print(double(5))` doit afficher `10`
---
### Exercice 7.4 - La fonction finale !
**Objectif** : Créer une fonction `verifier_code(secret, proposition)` qui :
- Prend deux listes en paramètres
- Renvoie le nombre de chiffres bien placés
**Structure à compléter** :
```python
def verifier_code(secret, proposition):
compteur = 0
for i in range(???):
if secret[i] == proposition[i]:
compteur = ???
return ???
```
**Test** :
```python
code_secret = [1, 2, 3, 4]
essai = [1, 5, 3, 2]
resultat = verifier_code(code_secret, essai)
print("Bien placés :", resultat) # Doit afficher 2
```
---
## Partie 8 : Le programme complet (30 min)
### Exercice final
**Objectif** : Assembler tout ce que vous avez appris pour créer une fonction `analyser_code(secret, proposition)` qui renvoie **deux valeurs** :
- Le nombre de bien placés
- Le nombre de mal placés
**Aide dans le cours** :
> 📖 Cours sur les fonctions → Cherchez comment renvoyer plusieurs valeurs avec `return`
> (Indice : on sépare les valeurs par une virgule)
**Structure à compléter** :
```python
def analyser_code(secret, proposition):
bien_places = 0
mal_places = 0
for i in range(4):
if secret[i] == proposition[i]:
# C'est bien placé
???
elif proposition[i] in secret:
# C'est présent mais mal placé
???
return ???, ???
```
**Test** :
```python
code = [1, 2, 3, 4]
essai = [1, 5, 3, 2]
bp, mp = analyser_code(code, essai)
print("Bien placés :", bp) # Doit afficher 2
print("Mal placés :", mp) # Doit afficher 1
```
---
## Récapitulatif des notions
| Partie | Notion | Où dans le cours |
|--------|--------|------------------|
| 1 | Créer une liste | Listes → "Créer une liste" |
| 2 | Accéder par indice | Listes → "Accéder aux éléments" |
| 3 | Comparer avec `==` | Conditionnelles → "Comparaisons" |
| 3 | Structure `if/else` | Conditionnelles → "Si...Alors...Sinon" |
| 4 | Boucle `for` | Listes → "Parcours" + Boucles |
| 4 | `range(len(...))` | Boucles → "Fonction range()" |
| 5 | Opérateur `in` | Listes → "À retenir" (tableau) |
| 6 | Méthode `append()` | Listes → "Propriétés" |
| 7 | Fonctions `def/return` | Fonctions → "Déclaration" |
---
## Barème indicatif
| Partie | Points |
|--------|--------|
| Parties 1-2 (listes de base) | 4 pts |
| Partie 3 (comparaisons) | 3 pts |
| Partie 4 (boucles) | 4 pts |
| Partie 5 (opérateur in) | 3 pts |
| Partie 6 (append) | 2 pts |
| Partie 7 (fonctions) | 2 pts |
| Partie 8 (exercice final) | 2 pts |
| **Total** | **20 pts** |
---
## Conseils
1. **Faites les exercices dans l'ordre** : chaque exercice prépare le suivant
2. **Testez chaque exercice** avant de passer au suivant
3. **Relisez votre cours** à chaque fois que vous bloquez
4. **N'hésitez pas à revenir en arrière** si vous ne comprenez plus
5. **Écrivez tout dans un seul fichier** `verificateur.py`
---
*Ce TP est à rendre complété. Il sera noté et permettra de valider votre rattrapage sur les listes.*