Pyromaths / pyromaths

Pyromaths est un programme qui a pour but de créer des exercices type de mathématiques niveau collège et lycée ainsi que leur corrigé. C'est ce qu'on appelle parfois un exerciseur. Contrairement à de nombreux autres projets, Pyromaths a pour objectif de proposer une correction véritablement détaillée des exercices proposés et pas seulement une solution. Il permet par exemple de proposer des devoirs maison aux élèves et de leur distribuer ensuite la correction. Il peut aussi servir à des familles afin qu'un élève puisse travailler un point du programme et se corriger ensuite.
GNU General Public License v3.0
11 stars 8 forks source link

Nouvelle classe d'exercice ; trois nouveaux exercices #20

Closed paternal closed 6 years ago

paternal commented 6 years ago

Nouvel exercice. L'intérêt réside surtout dans la nouvelle manière de générer l'exercice : avec un template jinja2.

Jusqu'à présent, le code LaTeX des exercices est construit de cette manière :

https://github.com/Pyromaths/pyromaths/blob/b39a7d7fe450c7253c09a199a832ba78516a7119/src/pyromaths/ex/lycee/TermesSuite.py#L644-L742

C'est parfaitement illisible. Avec cette nouvelle méthode, il y a deux parties : la classe exercice en elle même :

https://github.com/Pyromaths/pyromaths/blob/b39a7d7fe450c7253c09a199a832ba78516a7119/src/pyromaths/ex/lycee/matrices.py#L59-L80

Et un template :

https://github.com/Pyromaths/pyromaths/blob/b39a7d7fe450c7253c09a199a832ba78516a7119/data/ex/templates/EtatStableSysteme2-answer.tex

Il est beaucoup plus lisible : c'est du code LaTeX ; le principal à savoir est que les expressions entre double parenthèse (( comme ça )) sont évaluées. Ainsi, dans (( (1-b) | decimal )), le nombre 1-b est d'abord calculé, puis on y applique la fonction decimal, et le résultat de cette fonction est affiché.

C'est beaucoup, beaucoup, beaucoup plus confortable d'écrire des exercices ainsi.

Ce qu'il reste à faire :

Bonne lecture ! Et au dodo… 🌜💤

JeromeO commented 6 years ago

Bonjour Louis. Je suis absolument d'accord avec toi sur le constat et ton exemple semble effectivement très prometteur. Je testerai l'intégration de Jinja2 au paquet mais il n'y a pas de raison que ça ne fonctionne pas... Enfin j'espère. La traduction est un travail titanesque qui n'a peut-être qu'un intérêt limité. Je pense qu'il est plus motivant de travailler sur de nouveaux exercices. Je n'ai pas le temps de regarder ça de près ce week-end, mais je m'y attellerai dès que possible. Merci beaucoup pour cette trouvaille.

paternal commented 6 years ago

Du coup, je te laisse valider ça dés que tu as vérifié le setup.py. Il faut aussi ajouter jinja2 à la liste des dépendances du paquet .deb (il est paquagé : c'était aussi un de mes critère pour l'utiliser).

Pour la documentation, j'ai marqué ça dans ma todo-liste perso, mais ça n'est pas bloquant. Pour la traduction, ça n'est pas bloquant non plus.

paternal commented 6 years ago

La documentation de la création d'un nouvel exercice est terminée (le premier jet, du moins ; il faudrait que je me relise). Bonne lecture !

paternal commented 6 years ago

Je suis en train d'écrire un exercice bilan sur les trinômes en seconde, en utilisant jinja2 comme proposé ici. Je me rends compte qu'il y a encore de bonnes pistes d'améliorations à tout ça, donc ce qui est proposé ici n'est pas gravé dans le marbre, mais le cœur sera conservé : cette pull-request peut être acceptée dés maintenant.

paternal commented 6 years ago

Les exercices proposés :

Bonne lecture !

paternal commented 6 years ago

@JeromeO Merci pour ta relecture. J'ai corrigé quelques détails et mis à jour les tests. Ça me convient.

paternal commented 6 years ago

J'ai l'impression que tu es d'accord dans les grandes lignes. Si tu as encore des modifications à apporter, il sera toujours temps de les faire dans la branche develop

JeromeO commented 6 years ago

Absolument. À ce propos, est-ce qu'on intègre cette branche dans develop dès maintenant ? On ne reviendra pas en arrière, tu as trop bossé.

kiarn commented 6 years ago

D'autant plus que le système via template jinja est très bien. Maintenant je me demande si il ne faudrait pas déjà structurer l'arborescence du dossier templates.

JeromeO commented 6 years ago

Je confirme que c'est super. Relire le code tex d'un exercice devient relativement simple. Concernant la structure, c'est clair qu'il y a quelque chose à faire. Ça va devenir vite illisible.

paternal commented 6 years ago

Je confirme que c'est super. Relire le code tex d'un exercice devient relativement simple.

🎉 Génial ! C'était le but recherché… 🎉

Concernant la structure, c'est clair qu'il y a quelque chose à faire. Ça va devenir vite illisible.

Je ne suis pas sûr que ça devienne si illisible que ça, et je ne vois pas vraiment comment organiser cela. Il a été évoqué ailleurs que le classement des exercices par niveau n'était plus pertinent (dans la mesure où avec la réforme des collèges, la répartition des exercices dans chacun des quatre niveaux n'est plus stricte ; dans la mesure où au lycée, un exercice peut appartenir à plusieurs séries différentes…). Du coup, quelle organisation proposez-vous ? J'en vois deux possibles :

Actuellement, les vignettes sont organisées de la même manière : toutes dans le même répertoire. Trouvez-vous vraiment que ça pose problème ?

Ces répertoires ne sont pas manipulés par l'utilisateur final : ils sont manipulés par l'ordinateur (la plupart du temps) et par le développeur (quelques fois). La situation actuelle ne me semble donc pas génante.

paternal commented 6 years ago

La nuit porte conseil. Autre proposition : inverser l'ordre des répertoires.

Actuellement, le répertoire data/ex contient trois répertoires : un pour les vignettes, un pour les templates, un pour les tests. Au sein de chacun des répertoires se trouvent tous les fichiers de tous les exercices. Pour l'exercice InterpolationMatrices, cela donne :

$ tree data/ex
data/ex
 ├── img
 │   └── InterpolationMatrices.png
 ├── templates
 │   ├── InterpolationMatrices-answer.tex
 │   └── InterpolationMatrices-statement.tex
 └── tests
     ├── InterpolationMatrices.0.answer
     └── InterpolationMatrices.0.statement

On peut aussi inverser cela : le répertoire data/ex contientrait un répertoire par exercice, qui contiendrait les fichiers susmentionnés. Cela donnerait :

$ tree data/ex
 ex
 └── InterpolationMatrices
     ├── test.0.answer
     ├── test.0.statement
     ├── answer.tex
     ├── statement.tex
     └── thumbnail.png

-- Louis