Aller au contenu

Consignes pour le projet final⚓︎

Le matériel peut être téléchargé sous la forme d'une archive []projet_final_2024.zip](./materiel.zip).

Une fois l'archive déballée, on obtient l'arborescence suivante :

fjunier@fjunier:~/Projets/projet_final_2024_materiel$ tree
.
├── arbre_binaire
│   └── eleves
│       ├── attendu1.txt
│       ├── attendu2.txt
│       ├── attendu3.txt
│       ├── attendu4.txt
│       ├── attendu5.txt
│       ├── attendu6.txt
│       ├── input1.txt
│       ├── input2.txt
│       ├── input3.txt
│       ├── input4.txt
│       ├── input5.txt
│       ├── input6.txt
│       ├── output1.txt
│       ├── output2.txt
│       ├── output3.txt
│       ├── output4.txt
│       ├── output5.txt
│       ├── output6.txt
│       ├── test_tree_traversal.py
│       └── tree_traversal.py
├── automate_cellulaire
│   └── eleves
│       ├── attendu1.txt
│       ├── attendu2.txt
│       ├── attendu3.txt
│       ├── attendu4.txt
│       ├── attendu5.txt
│       ├── attendu6.txt
│       ├── automate.py
│       ├── input1.txt
│       ├── input2.txt
│       ├── input3.txt
│       ├── input4.txt
│       ├── input5.txt
│       ├── input6.txt
│       ├── output1.txt
│       ├── output2.txt
│       ├── output3.txt
│       ├── output4.txt
│       ├── output5.txt
│       ├── output6.txt
│       └── test_automate.py
├── labyrinthe
│   └── eleves
│       ├── attendu1.txt
│       ├── attendu2.txt
│       ├── attendu3.txt
│       ├── attendu4.txt
│       ├── attendu5.txt
│       ├── attendu6.txt
│       ├── attendu7.txt
│       ├── input1.txt
│       ├── input2.txt
│       ├── input3.txt
│       ├── input4.txt
│       ├── input5.txt
│       ├── input6.txt
│       ├── input7.txt
│       ├── laby.py
│       ├── output1.txt
│       ├── output2.txt
│       ├── output3.txt
│       ├── output4.txt
│       ├── output5.txt
│       └── test_laby.py
├── loup_chevre_chou
│   └── eleves
│       ├── attendu1.txt
│       ├── attendu2.txt
│       ├── attendu3.txt
│       ├── attendu4.txt
│       ├── attendu5.txt
│       ├── attendu6.txt
│       ├── input1.txt
│       ├── input2.txt
│       ├── input3.txt
│       ├── input4.txt
│       ├── input5.txt
│       ├── input6.txt
│       ├── loup_chevre_chou.py
│       ├── output1.txt
│       ├── output2.txt
│       ├── output3.txt
│       ├── output4.txt
│       ├── output5.txt
│       ├── output6.txt
│       └── test_loup_chevre_chou.py
├── prog_dynamique
│   └── eleves
│       ├── laines.py
│       ├── map_color_example.png
│       ├── map_color.png
│       └── test_laines.py
├── rpn
│   └── eleves
│       ├── attendu1.txt
│       ├── attendu2.txt
│       ├── attendu3.txt
│       ├── attendu4.txt
│       ├── attendu5.txt
│       ├── attendu6.txt
│       ├── attendu7.txt
│       ├── input1.txt
│       ├── input2.txt
│       ├── input3.txt
│       ├── input4.txt
│       ├── input5.txt
│       ├── input6.txt
│       ├── input7.txt
│       ├── output1.txt
│       ├── output2.txt
│       ├── output3.txt
│       ├── output4.txt
│       ├── output5.txt
│       ├── output6.txt
│       ├── output7.txt
│       ├── rpn.py
│       └── test_rpn.py
├── carre
│   └── carre.pdf
└── sudoku
    └── eleves
        ├── attendu1.txt
        ├── attendu2.txt
        ├── attendu3.txt
        ├── attendu4.txt
        ├── input1.txt
        ├── input2.txt
        ├── input3.txt
        ├── input4.txt
        ├── output1.txt
        ├── output2.txt
        ├── output3.txt
        ├── output4.txt
        ├── ressources
        │   └── CAPES_avril_2017_epreuve_info.pdf
        ├── sudoku.py
        └── test_sudoku.py

Tous les projets seront effectués par binôme à l'exception du projet carre qui pourra être réalisé en trinôme :

https://www.cahiernum.net/CGS8UD/

Revenons aux sept projets de l'archive. Chaque répertoire de projet, à deux exceptions près, contient un unique sous-répertoire eleves avec la même structure. Par exemple, le répertoire sudoku\eleves rassemble :

  • un script python avec squelette de code à compléter sudoku.py
  • un script python avec des tests unitaires : test_sudoku.py :
  • on peut exécuter automatiquement les tests depuis une ligne de commandes avec la commande pytest -v si le module pytest est installé :
fjunier@fjunier:~/projet_final_2023/sudoku/correction$ pytest -v
============================= test session starts ==============================
platform linux -- Python 3.9.13, pytest-7.1.2, pluggy-1.0.0 -- /home/fjunier/anaconda3/bin/python
cachedir: .pytest_cache
rootdir: /home/fjunier/Git/Gitlab/frederic-junier/terminale-nsi/Projets/projet_final_2023/sudoku/correction
plugins: anyio-3.5.0
collected 4 items                                                              

test_sudoku.py::test1 PASSED                                             [ 25%]
test_sudoku.py::test2 PASSED                                             [ 50%]
test_sudoku.py::test3 PASSED                                             [ 75%]
test_sudoku.py::test4 PASSED                                             [100%]

============================== 4 passed in 1.56s ===============================
  • On peut aussi exécuter le fichier test_sudoku.py en mode interactif depuis une ligne de commandes et lancer les tests depuis l'interpréteur :
(base) fjunier@fjunier:~/projet_final_2023/sudoku/correction$ python3 -i test_sudoku.py 
>>> test1()
Test sur input1.txt réussi
  • Avec pyzo on peut exécuter le fichier test_sudoku.py avec l'option Run as script pour bien régler le répertoire de travail, ensuite on peut lancer les tests dans la console Python voir même importer le module pytest s'il est installé et lancer pytest.main() depuis la console Python :
📋 Texte
In [3]: test1()
Test sur input1.txt réussi

In [6]: pytest.main(['-v'])
============================= test session starts ==============================
platform linux -- Python 3.10.6, pytest-6.2.5, py-1.10.0, pluggy-0.13.0 -- /usr/bin/python3.10
cachedir: .pytest_cache
rootdir: /home/fjunier/Git/Gitlab/frederic-junier/terminale-nsi/Projets/projet_final_2023/sudoku/correction
collected 4 items                                                              

test_sudoku.py::test1 PASSED                                             [ 25%]
test_sudoku.py::test2 PASSED                                             [ 50%]
test_sudoku.py::test3 PASSED                                             [ 75%]
test_sudoku.py::test4 PASSED                                             [100%]

============================== 4 passed in 1.64s ===============================
Out[6]: <ExitCode.OK: 0>
  • Ave Spyder c'est plus complexe car la technologie utilisée (QT) ne permet pas de simuler toutes les fonctionnalités d'un terminal et en particulier pas la redirection de l'entrée standard (comme on le fait dans les tests pour brancher input sur le flux d'un fichier d'entrée à la place de la console). Un contournement possible est de positionner l'option Run Configuration sur Execute in an external system terminal dans le menu Run. Quand vous cliquerez sur Run, l'exécution du fichier sera déportée dans une fenêtre de terminal externe à Spyder où vous pourrez obtenir le même comportement que précédemment en appelant test1() par exemple.

Choix d'un projet⚓︎

Vous choisissez d'abord un partenaire de binôme puis vous vous positionnez sur un projet. Si plusieurs binômes souhaitent le même projet, ils sont départagés par l'enseignant en fonction de leur niveau ou à l'aide de la fonction random.randint.

Les septs sujets correspondent à des défis en ligne :

Projet Défi Niveau Thème
arbre_binaire https://www.codingame.com/ide/puzzle/binary-search-tree-traversal Facile Parcours d'arbre
automate https://www.codingame.com/training/medium/elementary-cellular-automaton/solution Facile Codage, parsing, dictionnaire
labyrinthe https://www.codingame.com/ide/puzzle/maze Moyen moins Parcours de graphe, Récursivité
loup_chevre_chou https://www.codingame.com/ide/puzzle/river-crossing Moyen Parcours de graphe en largeur
prog_dynamique https://pydefis.callicode.fr/defis/C22_ColorMap/txt Difficile Programmation dynamique
rpn https://www.codingame.com/ide/puzzle/reverse-polish-notation Moyen plus Piles, Parsing,Exception
sudoku https://www.codingame.com/ide/puzzle/sudoku-solver Moyen plus Pile ou Récursivité, Retour sur trace
carre Extrait d'un TP donné en option info de CPGE MP Difficile Pile ou Récursivité, Retour sur trace, Paradigmes de programmation

Rendu⚓︎

Déposez au plus tard le 10 mai sur la plateforme Eléa une archive par groupe avec :

  • tous les fichiers de tests inputN.txt, outputN.txt et attenduN.txt (sauf les projets carre et prog_dynamique)
  • le script projet.py complété et commenté
  • le script de test test_projet.py non modifié

URL espace de dépôt : https://aura-69-metro2.elea.apps.education.fr/mod/assign/view.php?id=16243