Aller au contenu

Guide de l'IDE⚓

Exemple⚓

Un IDE se présente sous cette forme :

Enroulez-moi !

###
assert somme([]) == None, "Test 1 failed"bksl-nlassert somme([1, 2]) == 3, "Test 2 failed"bksl-nlbksl-nl ∞/∞
# --HDR--#bksl-nldef mystere(a: int) -> int:bksl-nl return abksl-nlbksl-nlbksl-nl# --HDR--#bksl-nlbksl-nlbksl-nldef sommation(T: list) -> int:bksl-nl a = 0bksl-nl for nombre in T:bksl-nl a = a + nombrebksl-nl return abksl-nlbksl-nlbksl-nldef somme(L: list) -> None | int:bksl-nl return None if len(L) == 0 else sum(L)bksl-nlbksl-nldef somme(L: list[int]) -> int:bksl-nl return None if len(L) == 0 else sum(L)bksl-nlbksl-nl

A

Remarque sur la solution

C'est simple mais il faut ĂȘtre vigilant.

Une autre remarque est possible

Toujours simple mais toujours vigilant.

Z

Il dispose de six boutons :

  • Lancer le script :
  • Valider le script avec des tests unitaires :
  • TĂ©lĂ©charger le script actuel :
  • TĂ©lĂ©verser un script local :
  • Recharger l'Ă©noncĂ© :
  • Enregistrer le script actuel :
Rappel RGPD

Tout se fait du cÎté client. Rien n'est envoyé au serveur.

Prise en main⚓

Par défaut, la commande {{IDE('exo2')}} permet de charger un script placé dans docs/scripts/.

Organisations possibles

Votre page markdown constitue un chapitre et regroupe de nombreux exercices avec de nombreux IDE.

Dans ce cas, optez pour l'arborescence suivante :

docs/
├── images
│   └── projet2
│       └── plante.png
├── index.md
├── projet1.md
├── projet2.md     âŹ…ïžŽ corps du chapitre que vous souhaitez Ă©crire
├── projet3.md
├── scripts
│   ├── projet2    âŹ…ïžŽ dossier contenant les exercices Ă  intĂ©grer Ă  vos IDE
│   │   ├── exo1.py
│   │   ├── exo1_corr.py
│   │   ├── exo1_test.py
│   │   ├── exo2.py
│   │   ├── exo2_corr.py
│   │   ├── exo2_test.py
│   │   ├── exo3.py
│   │   ├── exo3_corr.py
│   │   ├── exo3_test.py
│   │   ├── exo4.py
│   │   ├── exo4_corr.py
│   │   ├── exo4_test.py
│   │   ├── exo5.py
│   │   ├── exo5_corr.py
│   │   ├── plante_fractale.py
│   │   └── tableau_dynamique.py
......

Exemple :

{{IDE('projet2/exo2')}} chargera le script exo2.py depuis docs/scripts/projet2/.

Votre page markdown est spécialisée sur un exercice particulier, indiqué dans mkdocs.yml.

Dans ce cas, optez pour l'arborescence ci-dessous :

docs/
├── N1
│   ├── 110-maximum_nombres
│   │   ├── exo.py
│   │   ├── exo_corr.py
│   │   ├── exo_test.py
│   │   └── sujet.md

Exemple :

  • mkdocs.yml contient la ligne - "Calcul de max": N1/110-maximum_nombres/sujet.md.
  • {{IDE('exo')}} chargera le script exo.py depuis docs/N1/110-maximum_nombres/.

Format de fichiers

Le script Python est écrit de maniÚre classique avec quelques particularités.

Il peut se décomposer en ces éléments (tous facultatifs) :

#MAX Nombre_d_essais_autorisés
#--- HDR ---#
"""
Code Python dans un header
Ce code ne sera pas visible par l'élÚve et sera exécuté avant le code élÚve à l'exécution et à la validation

Utile pour proposer des classes spécifiques à un exercice
"""
#--- HDR ---#

"""
Code élÚve à compléter
"""

#Tests
"""
Tests publics faits à l'exécution et à la validation
Exemple: assert machin == 0, "vous avez une erreur de machin"
"""

Les librairies standards sont pour la plupart acceptées, les limitations étant principalement graphiques. Les annotations de type, le walrus opérator sont acceptées.

Le fichier Python de correction s'appelle nom_de_script_corr.py.

Vous pouvez répéter le HDR si vous le souhaitez afin que l'élÚve puisse tester en local

1
2
def somme(L: list[int]) -> int:
    return None if len(L) == 0 else sum(L)

Le fichier de juge en ligne peut ĂȘtre Ă©crit de maniĂšre beaucoup plus "classique" en utilisant assert :

1
2
3
assert longueur_ajout([], []) == 0, 'longueur_ajout([], []) == 0'
assert longueur_ajout([1, 3, 5, 5],[]) == 4, 'longueur_ajout([1, 3, 5, 5],[]) == 4'
assert longueur_ajout([0]*100, [1]*20) == 120, 'longueur_ajout([0]*100, [1]*20) == 120'

Les assert sont directement évalués par Pyodide. Seul le test ayant échoué sera affiché. Les tests réussis n'afficheront rien.

Pas de problÚme pour tester autant de fonctions que nécessaire.

Le fichier de juge en ligne doit contenir une variable appelée benchmark, de type list ou tuple :

1) Si l'on souhaite vérifier une unique fonction grùce à l'évaluateur de code :

1
benchmark = ['longueur([])==0', 'longueur([1,3,5,5])==4', 'longueur([0]*100)==100']

On a donc un tuple de chaßnes de caractÚres qui sera évalué avec eval().

2) Si l'on souhaite vérifier plusieurs fonctions grùce à l'évaluateur de code :

1
2
assert somme([]) == None, "Test 1 failed"
assert somme([1, 2]) == 3, "Test 2 failed"

On a donc un tuple de tableau de chaßnes de caractÚres qui sera évalué avec eval().

Options

Lors de l'appel à un IDE dans le fichier .md, il est possible de spécifier plusieurs options telles :

{{IDE("fichier1.py", MAX = 5, SANS = "sort, exec", SIZE = 14)}}

ou

{{IDE("fichier2.py", MAX = "+")}}

  • MAX : indique le nombre maximum d'essais autorisĂ©s pour rĂ©soudre un exercice avant rĂ©vĂ©lation de la solution (1000 ou "+" pour infini). Par dĂ©faut : 5.
  • SANS : exclu des instructions Python (builtins ou non). Par dĂ©faut : "exec, eval".
  • SIZE : donne la taille maximale d'un IDE. Si le script est plus petit, la taille rĂ©elle s'adaptera au plus petit. Un script Python plus long que SIZE sera tout de mĂȘme visible Ă  l'aide des sliders. Par dĂ©faut : 20.

Important

Le bouton de validation du script Ă  l'aide de tests unitaires est prĂ©sent uniquement si vous fournissez un fichier nom_du_fichier_test.py prĂ©sent dans le mĂȘme rĂ©pertoire que nom_du_fichier.py.

La solution apparait au bout du nombre de tests unitaires dĂ©finis dans le fichier ou directement dans la crĂ©ation de l'IDE seulement si vous fournissez un fichier nom_du_fichier_corr.pydans le mĂȘme rĂ©pertoire que nom_du_fichier.py.

Les boutons de lancement du script, de téléchargement, de téléversement, de sauvegarde et de rechargement sont présents par défaut.

Conclusion

À condition que les fichiers fichier.py, fichier_corr.py et fichier_test.py soient prĂ©sents, {{IDE('foo/bar/truc/muche/fichier')}} gĂšre tout seul :

  • l'Ă©noncĂ©,
  • le juge en ligne,
  • les fichiers de correction