PremierLangage / Yggdrasil

A PL subproject where we are tackling the design of new types of exercises
4 stars 2 forks source link

Proposition d'une syntaxe pour exercice à étapes/quiz de type quizmaker/feuille d'exercices/... [demande][maths] [etape] #102

Open esandier opened 3 years ago

esandier commented 3 years ago

Balises

Paramètres

Balise Before (optionnel)

Comme d'habitude, du code qui initialise des variables

Balise Pipeline (optionnel)

Décrit le passage d'informations de l'étape n à l'étape n+1. L'étape 0 est le before, l'étape N+1 est l'evaluator. Les exos sont numérotés de 1 à N.

Pour i = 0..N, Pipeline[i] est un dictionnaire, où les clés sont des noms de clés du dictionnaire généré par l'étape i, et les valeurs sont des noms de clés du dictionnaire fourni en entrée à l'étape i+1.

Un couple {a:b} dans Pipeline[i] signifie que la variable a générée par l'étape i est injectée dans la variable b fournie à l'étape i+1.

Note: Par défaut, chaque étape 1,..N fournit un score et un feedback qui sont accessibles à Evaluator.

Balise Text

Comme d'habitude, l'énoncé.

Balise Form

Une page Html, avec des conteneurs pour les exos 1, 2, .., N

Balise Evaluator

Calcule Le score final et le feedback à partir des données fournies par les étapes 1..N.

ddoyen commented 3 years ago

Je trouve ça très bien !

Et ce modèle doit pouvoir se généraliser à une structure d'exercices en arbre.

ddoyen commented 3 years ago

J'aime beaucoup l'idée du pipeline pour passer des paramètres d'un exercice à l'autre. Mais, dans beaucoup d'actitvités, on aurait juste besoin de générer la liste des exercices avec des paramètres de surcharge au début de l'activité.

Voilà une proposition.

Il nous faudrait une classe Exo pour représenter un exercice (un peu comme la classe Component). On pourrait construire un exercice dans le before de l'activité en utilisant cette classe. Les paramètres du constructeur Exo seraient l'adresse du fichier source pl et (optionnel) un dictionnaire de surcharge.

A la fin du before, il faudrait avoir construit une liste liste_exos d'objets Exo.

Cette approche est compatible avec le pipeline (on update l'objet Exo avec le dictionnaire du pipeline en temps voulu).

Une activité qui choisit 3 exercices parmi 5.

@ exo1.pl
@ exo2.pl
@ exo3.pl
@ exo4.pl
@ exo5.pl

before ==
from random import sample
names = ['exo1.pl', 'exo2.pl', 'exo3.pl', 'exo4.pl', 'exo5.pl']
for name in rd.sample(names, k=3):
    lst_exos.append(Exo(name))
==

Une activité à étapes.

@ step1.pl
@ step2.pl
@ step3.pl

before ==
from random import randint
value1 = randint(1, 10)
value2 = randint(1, 10)
dicparam = {'param1': value 1, 'param2': value2}
lst_exos = [Exo('step1.pl', dicparam),
Exo('step2.pl', dicparam),
Exo('step3.pl', dicparam)]
==

Une activité qui génère plusieurs exercices à partir d'un même modèle d'exercice et d'un jeu de données.

Ce serait utile pour les exercices de vocabulaire.

@ exomodel.pl

before ==
from random import sample
data = sample(range(1, 10), k=5)
for value in data:
    lst_exos.append(Exo('exomodel.pl', {'param': value}))
==
esandier commented 3 years ago

Tout à fait d'accord avec l'idée de classe Exo, qui serait bien utile dans le contexte d'une activité.

Les exemples ci-dessus sont tout à fait le genre de chose qui iraient dans le before de l'activité.

Pour ce qui est du pipeline, il me semble que c'est le play_activity qui devrait se charger d'assurer la transmission éventuelle des données d'une étape à l'autre.