• [^] # Re: précisions sur le(s) bot(s)

    Posté par . En réponse à la dépêche HackInScience : automatiser l'enseignement de Python. Évalué à 1.

    Si j'ai bien compris la fin de la présentation, il faut un bot pour la correction automatique de l'exercice mai je n'ai pas bien compris s'il en faut un différent par exercice ou s'ils utilisent tous le même.

    J'écris un "correcteur" par exercice. Pour 72 exercices ça fait 5049 lignes de Python, soit en moyenne 70 lignes par "correcteur" (avec bien sur un peu de redondance : les imports toujours pareil, le setup de gettext, le main ...). Je trouve ça plus propre et maintenable comme ça : quand je veux améliorer la correction de tel ou tel exercice, je sais rapidement où c'est (le script fetch.py me crée un dossier par exercice avec dedans : wording-fr.md, wording-en.md le texte présenté à droite, check.py le code de correction, ...

    D'après le gabarit de code posté, ce bot prend la saisie effectuée par l'élève et s'attend à ce que ça ne renvoie pas d'erreur en l'exécutant. Du coup, on peut mettre n'importe quel code Python pourvu que ça ne fasse pas d'erreur ?

    Chaque "code de correction" prend l'approche qu'il veut, parfois j'exécute le code de l'élève avec subprocess.run(), parfois une seule fois, parfois plusieurs fois si je veux tester plusieurs paramètres. Sinon j'importe les fonctions de l'élève et je les exécute avec différents paramètres pour vérifier leur résultats. Dans le code d'exemple que j'ai mis, qui teste la bonne implémentation d'une fonction bencode par l'élève :

    • J'itére d'abord sur une collection de "messages à tester"
    • J'utilise ma fonction "de référence" bencode, pour encoder le message de test
    • J'exécute la fonction bencode de l'étudiant
    • Si nos deux résultats divergent, je lui forge une erreur. La fonction fail est celle qui print l'erreur, l'exercice sera donc considéré faux.

    Dans tous les cas si quelqu'un rend une fonction de trop, innutilisée, mais que son programme fonctionne, je ne pourrai pas m'en rendre compte. Par contre s'il se met à print en trop, ça risque de déplaire au bot.