nbautoval : Autoévaluation

nbautoeval est un module léger pour créer des exercices auto-corrigés pour l'environnement Jupyter.

L'enseignant demande aux élèves d'écrire une fonction. Il fournit un ensemble de données pour cette fonction ainsi qu'une solution - non visible des élèves.

Les élèves vont pouvoir comparer les résultats de leur fonction par rapport à ceux attendus et avoir un récapitulatif des bonnes réponses et des erreurs éventuelles afin de s'auto-évaluer et corriger le cas échéant leur fonction.

Installation

Méthode

L'installation du module est très simple et se fait par cette commande

1
pip install nbautoeval

Utilisation

Le module propose 3 type d'exercices :

  • ExerciseFunction : l'élève doit écrire une fonction

  • ExerciseRegexp : l'élève doit écrire une expression régulière

  • ExerciseClass : teste le fonctionnement d'une classe

Nous ne verrons ici que la partie d'évaluation d'une fonction.

Méthode

Pour réaliser un exercice, le professeur doit rédiger deux fichiers :

Un fichier python qui définit une instance de la classe ExerciseFunction. Celle-ci contiendra

  • la fonction solution du problème réalisée par le professeur

  • le jeu de données sur lesquelles la fonction de l'élève sera testée

Un classeur jupyter qui importe cette instance et qui donne les consignes à l'élève, avec éventuellement des exemples de résultats attendus par la fonction à réaliser

ExempleMise en pratique

Dans cet exemple, nous allons demander aux élèves d'écrire une fonction isPrime

  • prenant en argument un entier

  • renvoyant True ou False selon que l'entier est premier ou non

Voici à quoi ressemble le fichier corrections.py correspondant :

1
from nbautoeval.exercise_function import ExerciseFunction
2
from nbautoeval.args import Args
3
4
from math import sqrt
5
6
# Fonction solution du probleme 
7
8
def isPrime(n):
9
    if n==2 or n==3:
10
        return True
11
    if n%2 == 0 or n<=1:
12
        return False
13
    d=3
14
    while n%d!=0 and d <= sqrt(n):
15
        d+=2
16
    return n%d!=0
17
18
# Jeu de donnees sur lequel la fonction de l'eleve sera testee
19
20
inputs_isPrime = [
21
    Args(1), Args(2), Args(3), Args(5), Args(17), Args(1001)  
22
]
23
24
# Fabrication de l'instance pour l'autoevaluation
25
26
exo_isPrime = ExerciseFunction(
27
    isPrime,         # La fonction modele
28
    inputs_isPrime,  # Le jeu de donnees
29
    layout='pprint',
30
    layout_args=(40, 25, 25),
31
)

En utilisant ce cadre, la réalisation d'un tel fichier n'est pas compliquée : il n'y a qu'à écrire une fonction solution et spécifier les arguments sur lesquels cette fonction sera évaluée.

Reste à fournir le classeur Jupyter à l'élève. Celui-ci commencera par importer l'instance réalisée ci-dessus :

1
from exos.corrections import exo_isPrime

Il est possible de donner automatiquement des exemples d'appels de la fonction et les résultats attendus en complément de la consigne. Pour donner 4 exemples, il suffit d'invoquer :

1
exo_isPrime.example(4)

L'élève doit alors rédiger sa propre fonction dans une cellule de code que l'enseignant lui laissera le soin de compléter. Pour savoir si la fonction se comporte correctement, l'élève devra invoquer :

1
exo_isPrime.correction(isPrime)

Vous trouverez l'archive ZIP de cet exemple en téléchargement ci-dessous.