Non, ça ne l'est pas. Je te propose d'étudier le code suivant, qui me semble suffisamment documenté vis-à-vis de ce que tu as proposé dans ton premier post.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 | # generer_exercice.py
# Importation du module d'aléa.
import random
# Définition des modèles LaTeX.
# On veut que les exercices soient de forme
# 12 + 24 = …
# et les corrigés
# 12 + 24 = 36
TEMPLATES = { "question": "\\item ${a} + {b} = \ldots$",
"answer": "\\item ${a} + {b} = {c}$" }
# Plage pour les nombres
RANGE = (1,1000)
# Nombre de questions à générer
NQUESTIONS = 50
# Fichier de sortie
QUESTIONS = "ex0-que.tex"
ANSWERS = "ex0-ans.tex"
def generate_question():
"Génère une question."
# On génère deux nombres aléatoires.
a, b = random.randint(RANGE[0], RANGE[1]), \
random.randint(RANGE[0], RANGE[1])
# Retourne une tuple (a, b, a+b)
return a, b, a + b
def generate_questions():
"Génère les 3-uplets des questions."
# On génère une liste de questions d'une longueur correspondant
# à QUESTIONS
# C'est équivalent à
# out = []
# for _ in range(NQUESTIONS):
# out.append(generate_question())
# return out
return [generate_question() for _ in range(NQUESTIONS)]
# Génère une fois pour toute les questions qui seront
# imprimées dans les fichiers `ex0-que.tex` et `ex0-ans.tex`.
questions = generate_questions()
# On ouvre le fichier `ex0-que.tex` avec le drapeau `w`, c'est-à-dire
# « écriture »
with open(QUESTIONS, 'w') as que:
# On applique la fonction anonyme
# \x -> TEMPLATES.format(a=x[0], b=x[1])
# (c'est-à-dire formatter les réponses selon le modèle)
# sur chaque élément de la liste `questions` (fonction map)
# et les assemble par des sauts de ligne (fonction `join`,
# et \n pour marquer les sauts de ligne).
# La fonction `format` utilise un modèle et remplace certains
# éléments par les valeurs fournies, par exemple ici `{a}` sera
# remplacé par la valeur de x[0]
#
# C'est équivalent à
# for question in questions:
# a, b, c = question
# formatted = TEMPLATES["questions"].format(a=a,
# b=b)
# que.write("{}\n".format(formatted))
que.write("\n".join(map(lambda x:
TEMPLATES["question"].format(a=x[0],
b=x[1]), questions)))
with open(ANSWERS, 'w') as ans:
# Même chose
ans.write("\n".join(map(lambda x:
TEMPLATES["answer"].format(a=x[0],
b=x[1],
c=x[2]), questions)))
|
Cela produira deux fichiers (ex0-que.tex
et ex0-ans.tex
), qui ressembleront à quelque chose comme ça:
1
2
3
4
5
6
7
8
9
10
11
12 | % ex0-que.tex
\item $226 + 391 = \ldots$
\item $519 + 693 = \ldots$
\item $659 + 595 = \ldots$
\item $713 + 483 = \ldots$
\item $862 + 581 = \ldots$
\item $276 + 665 = \ldots$
\item $407 + 751 = \ldots$
\item $601 + 667 = \ldots$
\item $239 + 76 = \ldots$
\item $124 + 297 = \ldots$
% …
|
1
2
3
4
5
6
7
8
9
10
11
12 | % ex0-ans.tex
\item $226 + 391 = 617$
\item $519 + 693 = 1212$
\item $659 + 595 = 1254$
\item $713 + 483 = 1196$
\item $862 + 581 = 1443$
\item $276 + 665 = 941$
\item $407 + 751 = 1158$
\item $601 + 667 = 1268$
\item $239 + 76 = 315$
\item $124 + 297 = 421$
% …
|
Dans le fichier que tu utilises usuellement pour tes questions, qui ressemble probablement à quelque chose comme cela:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | % test.tex
\documentclass{article}
% suite du préambule…
\begin{document}
\chapter{Addition}
\section{Exercices}
\subsection{Questions}
\begin{itemize}
\item $12 + 13 = \ldots$
\item $42 + 11= \ldots$
\item $113 + 22 = \ldots$
% …
\end{itemize}
\subsection{Réponses}
\begin{itemize}
\item $12 + 13 = 25$
\item $42 + 11= 53$
\item $113 + 22 = 135$
% …
\end{itemize}
\end{document}
|
Par quelque chose comme ceci, en faisant usage de la commande \input{<fichier>}
de LaTeX. Cette commande va alors aller lire le fichier et l'insérer dans le fichier LaTeX dans lequel la commande est appelée.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | % test.tex
\documentclass{article}
% suite du préambule…
\begin{document}
\chapter{Addition}
\section{Exercices}
\subsection{Questions}
\begin{itemize}
\input{exercices/ex0-que.tex}
\end{itemize}
\subsection{Réponses}
\begin{itemize}
\input{exercices/ex0-ans.tex}
\end{itemize}
\end{document}
|
Maintenant, en supposant que tu as une structure similaire à celle-ci,
| test.tex
exercices/
generer_exercice.py
|
Tu pourras lancer, dans le répertoire racine, un script comme suit,
| #!/bin/sh
cd exercices && python generer_exercice.py && cd ..
pdflatex test.tex
|
Tu auras donc, en définitif,
| test.tex
test.pdf
exercices/
generer_exercice.py
ex0-que.tex
ex0-ans.tex
|
Edit: formattage LaTeX
Edit: ajout de l'équivalence pour le join/map.