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:
481
representation_construits/chapitre_1/tp/TP_RATTRAPAGE_LISTES.md
Normal file
481
representation_construits/chapitre_1/tp/TP_RATTRAPAGE_LISTES.md
Normal 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.*
|
||||
Reference in New Issue
Block a user