Documentation
Guide de programmation
Programmation d'un exercice
Construction, Affichage et Évaluation

Construction, Affichage et Évaluation

Le cycle de vie d'un exercice PLaTon se déroule en quatre phases principales:

  • Construction - Génération des données et configuration de l'exercice (clé builder)
  • Affichage - Présentation de l'exercice à l'apprenant (clés title, statement, form)
  • Évaluation - Analyse de la réponse soumise et attribution d'une note (clé grader)
  • Solution - Affichage optionnel de la solution (clé solution)

Environnement d'exécution : Sandbox

Les exercices s'exécutent dans un environnement isolé appelé "sandbox", qui garantit la sécurité et la reproductibilité de leur exécution.

Sandbox node (par défaut)

  • Syntaxe : sandbox = "node"
  • Description : Exécution de code JavaScript via l'API de sandboxing de Node.js
  • Bibliothèques disponibles : API standard de JavaScript et fonctions utilitaires (opens in a new tab)
  • Cas d'usage : Exercices simples à modérément complexes, sans besoin de bibliothèques système

Sandbox python

⚠️

La sandbox Python nécessite une configuration supplémentaire. Consultez la documentation (opens in a new tab) pour son installation.

Construction: Builder

La phase de construction permet de générer des données aléatoires et de préparer l'exercice avant son affichage.

builder == #!lang=js
// Code exécuté avant l'affichage de l'exercice
max = 10
op1 = Math.round(Math.random() * max)
op2 = Math.round(Math.random() * max)
expected_result = op1 + op2
==

Pour l'aléatoire dans une sandbox Python:

builder == #!lang=py
# Important: utilisez la graine (seed) fournie automatiquement
import random
random.seed(seed)
op1 = random.randint(1, 10)
op2 = random.randint(1, 10)
expected_result = op1 + op2
==

Affichage: Title, Statement et Form

title - Le titre de l'exercice

title = "Addition aléatoire"
⚠️

La clé title ne peut pas contenir de variables avec la syntaxe {{ nomvariable }}.

statement - L'énoncé de l'exercice

statement ==
Calculez le résultat de **{{ op1 }}** + **{{ op2 }}**.
==

form - Le formulaire de réponse

input = :wc-input-box
input.type = "number"
 
form ==
{{ input }}
==

Ces clés supportent le HTML, le Markdown (opens in a new tab), et les templates Nunjucks (opens in a new tab) pour l'affichage dynamique de variables avec la syntaxe {{ variable }}.

Évaluation: Grader

Le grader évalue la réponse de l'apprenant et lui attribue une note:

grader == #!lang=js
// Important: grade et feedback doivent être déclarés comme variables globales (sans let/const/var)
grade = 0
feedback = {
  type: "error",
  content: "Mauvaise réponse"
}
 
if (parseInt(input.value) === expected_result) {
  grade = 100
  feedback.type = "success"
  feedback.content = "Bonne réponse!"
}
==
⚠️

Déclarez toujours grade et feedback sans mot-clé (let, const, var) pour qu'ils soient accessibles en dehors du grader.

Pour afficher plusieurs feedbacks:

grader == #!lang=js
// Plusieurs feedbacks avec un tableau
feedback = [
  { type: "warning", content: "Premier commentaire" },
  { type: "success", content: "Deuxième commentaire" }
]
==

Solution: Affichage de la solution

inputSolution = :wc-input-box
inputSolution.type = "number"
inputSolution.disabled = true
 
builder == #!lang=js
// ...existing code...
inputSolution.value = expected_result
==
 
solution ==
{{ inputSolution }}
==