161 lines
7.8 KiB
Markdown
161 lines
7.8 KiB
Markdown
# Révisions de rentrée : notes de séance
|
|
|
|
Deux activités de reprise pour la rentrée de Terminale, après la coupure estivale.
|
|
Elles couvrent les mêmes notions et sont interchangeables : Z-Event (marathon caritatif de
|
|
streaming) et PERRIAND-7 (station orbitale en avarie).
|
|
|
|
## Z-Event
|
|
|
|
| Fichier | Pour qui | Publié sur hub-docs |
|
|
|---|---|---|
|
|
| `TP_ZEvent.md` | Élèves | oui |
|
|
| `TP_ZEvent.ipynb` | Élèves | seulement si ajouté à `NOTEBOOK_ALLOWLIST` |
|
|
| `Corrige_TP_ZEvent.md` | Professeur | **oui par défaut** (c'est un `.md`), voir ci-dessous |
|
|
| `_generateur_zevent.py` | Professeur | non (`EXCLUDE_FILES`) |
|
|
|
|
Écrit au gabarit de tes TP : `## Contexte`, `## Objectifs pédagogiques`, `## Partie N`,
|
|
`**Question N.M**`, sorties attendues en commentaire à droite des `print`, `## Barème
|
|
indicatif` sur 20, auteur et licence. Cinq parties, dix-huit questions, environ deux heures.
|
|
|
|
**Le contexte factuel est volontairement prudent.** Le TP ne dit rien de l'édition en cours :
|
|
ni montant, ni association, ni participants réels. Seuls figurent des éléments stables
|
|
(l'événement existe depuis 2016, créé par ZeratoR et Dach). Toutes les données manipulées
|
|
sont inventées, et un encadré le dit explicitement aux élèves dès le contexte. Les streamers
|
|
cités ne servent que de noms dans un jeu de données fictif.
|
|
|
|
**Deux décisions de publication à prendre** avant de pousser :
|
|
- `Corrige_TP_ZEvent.md` sera publié automatiquement sur hub-docs, comme tous tes autres
|
|
`Corrige_TP_*.md`. Le `robots.txt` le désindexe des moteurs de recherche, mais il reste
|
|
accessible depuis la navigation du site. Si tu ne veux pas ça pour demain, il faut soit
|
|
l'ajouter temporairement à `EXCLUDE_FILES`, soit ne pas le pousser tout de suite.
|
|
- `TP_ZEvent.ipynb` ne sera **pas** publié tant qu'il n'est pas dans
|
|
`NOTEBOOK_ALLOWLIST["terminale"]`. Sans ça, les élèves n'auront que la version Markdown
|
|
en ligne, et le choix de format annoncé dans le README n'existera pas.
|
|
|
|
### Points de vigilance
|
|
|
|
- **Question 1.3** : `"25" + "40"` donne `"2540"`. Leur faire exécuter avant d'expliquer.
|
|
- **Question 3.2** : l'initialisation de l'accumulateur avec `liste[0]` et non `0` est le
|
|
point qui coince le plus. C'est la question 2 de la synthèse.
|
|
- **Question 5.1** : le créneau de Baghera Jones est à cheval sur minuit, donc `debut > fin`.
|
|
C'est volontaire, et c'est le seul endroit du TP qui demande de distinguer deux cas.
|
|
- **Question 5.2** : parcours d'une liste d'adjacence. La question 4 de la synthèse pose le
|
|
problème du cycle sans demander de le résoudre, c'est le pont vers le chapitre Graphes.
|
|
|
|
### Barème
|
|
|
|
Réparti sur 20 dans l'énoncé. Les parties 1 à 3 pèsent 13 points : un élève qui a décroché
|
|
pendant l'été peut valider la moitié du TP sans toucher aux dictionnaires.
|
|
|
|
---
|
|
|
|
## PERRIAND-7
|
|
|
|
| Fichier | Pour qui | Publié sur hub-docs |
|
|
|---|---|---|
|
|
| `README.md` | Élèves | oui (page d'index de la section) |
|
|
| `PERRIAND-7_Reveil_des_systemes.ipynb` | Élèves | oui (`NOTEBOOK_ALLOWLIST`) |
|
|
| `PERRIAND-7_CORRIGE.ipynb` | Professeur | non (aucun notebook Terminale hors allowlist) |
|
|
| `NOTES_PROF.md` | Professeur | non (`EXCLUDE_FILES`) |
|
|
| `_generateur.py` | Professeur | non (`EXCLUDE_FILES`, il contient le corrigé) |
|
|
|
|
Notebooks ouvrables sur [Basthon](https://basthon.fr), Jupyter ou VS Code.
|
|
Aucune bibliothèque externe, aucun fichier annexe.
|
|
|
|
---
|
|
|
|
## Intention
|
|
|
|
Ces activités ne révisent **pas** le programme de Première pour lui-même : chaque notion
|
|
est choisie et cadrée pour ce qui arrive derrière en Terminale.
|
|
|
|
| Module | Notion révisée | Prépare |
|
|
|---|---|---|
|
|
| 1, Le réacteur | affectation, mutabilité, aliasing de listes | POO (attributs), listes chaînées |
|
|
| 2, Les protocoles | `return` vs `print`, paramètres, portée | **Récursivité**, Modularité |
|
|
| 3, Le balayage | `for` / `while`, accumulateur, `range(len(...))` | parcours d'arbres et de graphes |
|
|
| 4, La soute | indices, tranches, listes de listes, compréhensions | structures linéaires, tri fusion |
|
|
| 5, L'équipage | dictionnaires, `.get()`, dict de listes | **graphes** (liste d'adjacence), mémoïsation |
|
|
| 6, Sortie d'orbite | synthèse : parcours avec une pile, pile d'appels | Pile/File, **Récursivité** |
|
|
|
|
Le module 6 se termine sur un compte à rebours récursif à tracer à la main : c'est le
|
|
raccord direct avec le chapitre en cours.
|
|
|
|
---
|
|
|
|
## Parti pris pédagogique
|
|
|
|
**Lire et réparer avant d'écrire.** Après deux mois d'arrêt, la page blanche bloque. Chaque
|
|
module suit donc la même montée : *diagnostic* (prédire la sortie sans exécuter), puis
|
|
*réparation* (code cassé à corriger), puis *production* (écrire), puis *bonus*.
|
|
Les diagnostics donnent aussi un repérage rapide de qui a réellement décroché.
|
|
|
|
**La difficulté monte, comme au bac.** Les derniers exercices de chaque module, et le
|
|
module 6 dans son ensemble, sont volontairement plus exigeants. C'est annoncé aux élèves
|
|
dès l'introduction du notebook : les dernières questions servent à voir jusqu'où vont les
|
|
meilleurs, ne pas les terminer n'est pas un échec.
|
|
|
|
**Auto-correction par `assert`.** Chaque production est suivie d'une cellule de tests qui
|
|
affiche `OK`. Les élèves avancent sans file d'attente devant le bureau, et ça amorce le
|
|
chapitre Modularité (jeux de tests). Tous les `assert` du corrigé ont été exécutés et
|
|
passent.
|
|
|
|
**Modules indépendants.** Chaque module s'ouvre sur une cellule **SECOURS** qui redéfinit
|
|
ses données. Un élève bloqué au module 2 peut sauter au module 5 sans rien casser : le fil
|
|
rouge est narratif, pas technique.
|
|
|
|
---
|
|
|
|
## Conduite de séance
|
|
|
|
Compter **2 h** pour le parcours complet bonus inclus. Sur **1 h**, le noyau utile est :
|
|
|
|
- Module 1 : diagnostics 1.1 et **1.2** (l'aliasing, celui qui rapporte le plus)
|
|
- Module 2 : diagnostic 2.1 et réparation 2.2 (`print` vs `return`)
|
|
- Module 3 : production 3.4 (maximum à la main)
|
|
- Module 5 : production 5.3 (dictionnaire de comptage)
|
|
|
|
Les bonus (1.5, 2.5, 3.6, 4.5, 5.5) sont là pour occuper les rapides. 4.5 (fusion de deux
|
|
listes triées) et 6.1 (parcours en profondeur) sont les deux vrais morceaux.
|
|
|
|
**À faire au tableau plutôt qu'en autonomie :**
|
|
|
|
- **1.2 (aliasing)** : un schéma mémoire de deux flèches vers la même liste vaut mieux
|
|
qu'une explication écrite.
|
|
- **6.2 (compte à rebours)** : à tracer collectivement, c'est le pont vers la pile d'appels.
|
|
|
|
**Points de vigilance :**
|
|
|
|
- Le diagnostic **3.2** contient une boucle infinie. Elle est en bloc Markdown non
|
|
exécutable et signalée comme telle, mais prévenir à l'oral évite un Basthon figé.
|
|
- Le diagnostic **2.3** provoque volontairement une `UnboundLocalError`. Insister sur le
|
|
fait que la bonne réponse est le passage en paramètre, **pas** `global`.
|
|
- La réparation **4.2** (suppression pendant l'itération) est le plus difficile des
|
|
exercices non-bonus : leur faire d'abord exécuter le code cassé pour constater.
|
|
|
|
---
|
|
|
|
## Régénérer les notebooks
|
|
|
|
Les deux notebooks sont produits par un script unique (énoncé et corrigé partagent la
|
|
même source, ce qui évite qu'ils divergent) :
|
|
|
|
```bash
|
|
python3 _generateur.py # PERRIAND-7
|
|
python3 _generateur_zevent.py # Z-Event
|
|
```
|
|
|
|
Pour Z-Event, les sorties attendues affichées en commentaire ne sont pas écrites à la main :
|
|
le générateur exécute les solutions de référence et injecte les valeurs obtenues. Modifier
|
|
un montant dans le jeu de données met donc à jour tous les résultats de l'énoncé.
|
|
|
|
Modifier un exercice dans `_generateur.py` puis relancer met à jour les deux notebooks.
|
|
|
|
Attention : `_generateur.py` contient le corrigé en clair, et `build_docs.py` publie les
|
|
fichiers `.py` comme ressources téléchargeables. Il est explicitement exclu du build
|
|
(`EXCLUDE_FILES`), tout comme le présent fichier. Ne pas le renommer sans mettre à jour
|
|
cette exclusion côté serveur.
|
|
|
|
---
|
|
*Lycée Charlotte Perriand, NSI Terminale, Licence CC BY-SA 4.0*
|