Build
Résumé
-
Inclusion:
@ /grader/evalfunc.py [builder.py] -
Dépendance:
@ /utils/sandboxio.py
-
Clés utilisées:
grader/grader.py, evalfunc
Utilisation
Ce grader permet de déclarer un script Python 3 dans la clé evalfunc.
Ce script doit déclarer une fonction qui doit retourner un tuple (note, feedback):
(100, "Bonne réponse"). La note doit être incluse dans [-1, 100].
Le fonction evalfunc à pour prototype def evalfunc(dic, response) où dic est un dictionnaire
contenant l'ensemble des variables de l'exercice et response l'ensemble des réponses de l'élève.
Par exemple, en supposant que le PL utilise un champ form_answer, la fonction evalfunc aura accès a la variable response['answer'].
- Avantages :
- Possibilité d'utiliser un ```return (100,"feedback")
- Possibilité d'utilisé les modules built-in ainsi que d'importer tout fichier
ajouté à l'exercice grâce à la syntaxe
@ monscript.py - Permet de déclarer des clés de type :
int, float, string, list, dict and NoneType. Tout autre type encoderatype.__dict__.
- Inconvénients :
- Nécessite l'écriture d'une fonction et d'accèder à un dictionnaire pour chaque modification de variable, ce qui peut devenir vite redondant.
Débugage
Il est possible de print dans sys.stderr à des fins de débugage. Ces prints ne seront affiché qu'en cas d'erreur, et seulement aux professeurs:
import sys
def build(dic, response):
print("debug", file=sys.stderr)
Exemple
@ /utils/sandboxio.py
@ /grader/evaluator.py [grader.py]
form==
<input id="form_answer" type="number" value="{{ answers__.answer }}" required/>
==
op1 = 32
op2 = 26
evalfunc==
import traceback
import sys
def evalfunc(dic, answers):
try:
if int(answers['answer']) == dic['op1'] + dic['op2']:
return (100, "Bonne réponse")
return (0, "Mauvaise réponse")
except:
print(traceback.format_exc(), file=sys.stderr)
return(-1, "Merci de rentrer un entier")
==