- FGadratJe viens de m'inscrire !
Bonjour à tous,
J'ai créé un script qui permet de modifier de manière automatique les valeurs numériques dans un DM et je me suis dit que j'allais partager, peut être que ça intéressera quelqu'un. J'ai fait un github :
https://github.com/fgadrat/Homework_Randomizer
J'avais ce projet depuis un moment et j'ai enfin eu le courage de m'y mettre, ainsi que l'aide considérable de ChatGPT qui mérite d'être cité comme contributeur. Le but n'est pas seulement d'empêcher les élèves de tricher, même si c'est une conséquence bienvenue, mais aussi de leur permettre de travailler ensemble. Le copain peut lui montrer le calcul qu'il a fait, expliquer la méthode, mais il faut quand même que l'élève fasse son calcul puisque c'est pas le même. Un collègue me disait que ça pourrait être sympa pour pondre des masses d'exercices de bachotage aussi.
Le principe c'est que vous prenez un de vos DM fait en LaTeX qui va vous servir de modèle, vous changez les valeurs que vous voulez randomizer par {v1}, {v2},... etc. Le script python passe sur le modèle, remplace les valeurs, créé un nouveau fichier .tex et le compile en un pdf nominatif pour l'élève. Quand il a fait tous les élèves, il fusionne tous les pdf en un seul pdf pour toute la classe, il n'y a plus qu'à photocopier.
Comme on peut changer tous les paramètres qu'on veut, ce n'est pas juste les valeurs numériques. Je me suis amusé à faire des graphiques individualisés ou à ajouter des lignes pour simplifier un calcul uniquement quand il est simplifiable. Mais bon, ça peut finir par devenir compliqué.
J'ai créé un script qui permet de modifier de manière automatique les valeurs numériques dans un DM et je me suis dit que j'allais partager, peut être que ça intéressera quelqu'un. J'ai fait un github :
https://github.com/fgadrat/Homework_Randomizer
J'avais ce projet depuis un moment et j'ai enfin eu le courage de m'y mettre, ainsi que l'aide considérable de ChatGPT qui mérite d'être cité comme contributeur. Le but n'est pas seulement d'empêcher les élèves de tricher, même si c'est une conséquence bienvenue, mais aussi de leur permettre de travailler ensemble. Le copain peut lui montrer le calcul qu'il a fait, expliquer la méthode, mais il faut quand même que l'élève fasse son calcul puisque c'est pas le même. Un collègue me disait que ça pourrait être sympa pour pondre des masses d'exercices de bachotage aussi.
Le principe c'est que vous prenez un de vos DM fait en LaTeX qui va vous servir de modèle, vous changez les valeurs que vous voulez randomizer par {v1}, {v2},... etc. Le script python passe sur le modèle, remplace les valeurs, créé un nouveau fichier .tex et le compile en un pdf nominatif pour l'élève. Quand il a fait tous les élèves, il fusionne tous les pdf en un seul pdf pour toute la classe, il n'y a plus qu'à photocopier.
Comme on peut changer tous les paramètres qu'on veut, ce n'est pas juste les valeurs numériques. Je me suis amusé à faire des graphiques individualisés ou à ajouter des lignes pour simplifier un calcul uniquement quand il est simplifiable. Mais bon, ça peut finir par devenir compliqué.
- VinZTDoyen
Voilà qui a l'air bigrement intéressant, dès que j'aurai du temps devant moi, faudra que je regarde !
Merci pour le partage.
Merci pour le partage.
_________________
« Il ne faut pas croire tout ce qu'on voit sur Internet » Victor Hugo.
« Le con ne perd jamais son temps. Il perd celui des autres. » Frédéric Dard
« Ne jamais faire le jour même ce que tu peux faire faire le lendemain par quelqu'un d'autre » Pierre Dac
« Je n'ai jamais lâché prise !» Claude François
« Un économiste est un expert qui saura demain pourquoi ce qu'il avait prédit hier ne s'est pas produit aujourd'hui. » Laurence J. Peter
- floflo1010Niveau 6
Merci. Cela a l'air génial.
- ElietteNiveau 9
Je vais regarder, ça parait intéressant !
Mais est-ce que les valeurs numériques sont absolument random ou bien dans une gamme à définir ? En physique on doit respecter un certain rapport à la réalité...
Mais est-ce que les valeurs numériques sont absolument random ou bien dans une gamme à définir ? En physique on doit respecter un certain rapport à la réalité...
- FGadratJe viens de m'inscrire !
Tu fais comme tu veux pour les valeurs. T'utilises le code Python pour générer la valeur. De bases j'ai mis des entiers entre 1 et 10 dans les valeurs, mais l'idée c'est que tu vas dans le script Python là où sont générées les valeurs et tu fais les calculs. LaTeX fait pas de calculs, donc tu les fais sous Python et le script place le résultat dans ton document LaTeX a sa place.
Ce n'est pas du tout obligé d'être des valeurs aléatoires, ça peut être un calcul (important pour faire le corrigé) ou même être du texte.
Imaginons par exemple que tu veuilles faire résoudre une équation du second degré. Dans ton template de corrigé tu pourrais avoir :
Et dans le script Python tu auras alors quelque chose comme :
Comme ça les variables v1, v2 et v3 sont des entiers aléatoires entre 1 et 15. Python calcule le discriminant et place le résultat dans v4. v5 est le texte de conclusion. Je renomme mes variables au milieu du script pour plus de lisibilité.
J'aurais tout aussi bien pu faire que v1, v2 et v3 soit négatifs ou même des réels. Mais faut faire un peu plus attention aux différents cas. Comme j'ai mis
${v1}x^2+{v2}x +{v3}=0$
dans mon modèle LaTeX, si je laisse v2 et v3 être négatifs, je vais me retrouver avec des devoirs qui vont ressembler à 3x²+-5x+12=0 parce qu'il aura remplacé {v2} par "-5" et qu'il y avait un + avant. Ça peut se résoudre avec quelques "if" pour les différents cas, où restreindre le champ des variables aléatoires.
Ça peut devenir aussi compliqué que tu veux (mais on peut rester plus simple aussi). Et une autre façon de gérer le problème est d'imposer des conditions sur ta génération de variable. Au lieu de faire trois cas pour les valeurs du discriminant, j'aurais pu garantir que le discriminant soit positif et ne faire qu'un seul cas :
Comme ça, je garantis que j'ai choisi des valeurs aléatoires qui respectent mes conditions, puisque je lui dis de refaire le tirage tant que c'est pas bon.
Ce n'est pas du tout obligé d'être des valeurs aléatoires, ça peut être un calcul (important pour faire le corrigé) ou même être du texte.
Imaginons par exemple que tu veuilles faire résoudre une équation du second degré. Dans ton template de corrigé tu pourrais avoir :
- Code:
Pour résoudre l'équation ${v1}x^2+{v2}x +{v3}=0$ on calcule son discriminant\\
$\Delta=({v2})^2-4({v1})({v3})={v4}{v5}
Et dans le script Python tu auras alors quelque chose comme :
- Code:
v[1]=random.randint(1, 15)
v[2]=random.randint(1, 15)
v[3]=random.randint(1, 15)
a, b, c = v[1], v[2], v[3]
v[4]=b**2-4*a*c
delta = v[4]
if delta>0:
x1=round((-b+sqrt(delta))/(2*a),3)
x2=round((-b-sqrt(delta))/(2*a),3)
v[5]=f'>0$ donc l\'équation admet deux solutions {x1} et {x2}.'
elif delt==0:
x0=round(-b/(2*a),3)
v[5]=f'=0$ donc l\'équation admet une solution double {x0}.'
else:
v[5]='<0$ donc l\'équation n\'admet pas de solution.'
Comme ça les variables v1, v2 et v3 sont des entiers aléatoires entre 1 et 15. Python calcule le discriminant et place le résultat dans v4. v5 est le texte de conclusion. Je renomme mes variables au milieu du script pour plus de lisibilité.
J'aurais tout aussi bien pu faire que v1, v2 et v3 soit négatifs ou même des réels. Mais faut faire un peu plus attention aux différents cas. Comme j'ai mis
${v1}x^2+{v2}x +{v3}=0$
dans mon modèle LaTeX, si je laisse v2 et v3 être négatifs, je vais me retrouver avec des devoirs qui vont ressembler à 3x²+-5x+12=0 parce qu'il aura remplacé {v2} par "-5" et qu'il y avait un + avant. Ça peut se résoudre avec quelques "if" pour les différents cas, où restreindre le champ des variables aléatoires.
Ça peut devenir aussi compliqué que tu veux (mais on peut rester plus simple aussi). Et une autre façon de gérer le problème est d'imposer des conditions sur ta génération de variable. Au lieu de faire trois cas pour les valeurs du discriminant, j'aurais pu garantir que le discriminant soit positif et ne faire qu'un seul cas :
- Code:
while true:
a, b, c = random.randint(1, 15), random.randint(1, 15), random.randint(1, 15)
delta=b**2-4*a*c
if delta>0:
break
v[1], v[2], v[3], v[4]= a, b, c, delta
x1, x2 = round((-b+sqrt(v[4]))/(2*a),3), round((-b-sqrt(v[4]))/(2*a),3)
v[5]=f'>0$ donc l\'équation admet deux solutions {x1} et {x2}.'
Comme ça, je garantis que j'ai choisi des valeurs aléatoires qui respectent mes conditions, puisque je lui dis de refaire le tirage tant que c'est pas bon.
- FlorentGDGNiveau 5
Salut,
autre solution, peut-être plus accessible, créer ton DM sur un traitement de texte, créer une liste de valeurs sur un tableur (avec des fonctions Randomize) et faire du publipostage?
autre solution, peut-être plus accessible, créer ton DM sur un traitement de texte, créer une liste de valeurs sur un tableur (avec des fonctions Randomize) et faire du publipostage?
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum