109 lines
4.3 KiB
Python
Executable File
109 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
import random
|
||
from fpdf import FPDF
|
||
|
||
|
||
def generer_nombre():
|
||
"""Génère un nombre naturel entre 1 et 9"""
|
||
return random.randint(1, 9)
|
||
|
||
|
||
def evaluer_expression(expr):
|
||
"""Évalue une expression mathématique en remplaçant × par *"""
|
||
try:
|
||
# Remplacer × par * pour l'évaluation
|
||
expr_eval = expr.replace("×", "*")
|
||
return eval(expr_eval)
|
||
except Exception:
|
||
return -1 # En cas d'erreur, considérer comme négatif
|
||
|
||
|
||
def generer_expression():
|
||
"""Génère une expression aléatoire respectant les contraintes"""
|
||
# On choisit aléatoirement un type d'expression (avec ou sans parenthèses)
|
||
# On vérifie que le résultat est positif
|
||
expressions_positives = [
|
||
lambda: f"({generer_nombre()} + {generer_nombre()}) × {generer_nombre()} - {generer_nombre()}",
|
||
lambda: f"{generer_nombre()} + {generer_nombre()} × {generer_nombre()} - {generer_nombre()}",
|
||
lambda: f"({generer_nombre()} + {generer_nombre()}) × ({generer_nombre()} + {generer_nombre()})",
|
||
lambda: f"{generer_nombre()} + {generer_nombre()} × {generer_nombre()} - {generer_nombre()} + {generer_nombre()}",
|
||
lambda: f"({generer_nombre()} + {generer_nombre()}) × {generer_nombre()} - {generer_nombre()} + {generer_nombre()}",
|
||
lambda: f"{generer_nombre()} × {generer_nombre()} + {generer_nombre()} - {generer_nombre()} × {generer_nombre()}",
|
||
lambda: f"({generer_nombre()} + {generer_nombre()}) + {generer_nombre()} × {generer_nombre()} - {generer_nombre()}",
|
||
lambda: f"{generer_nombre()} + {generer_nombre()} × ({generer_nombre()} + {generer_nombre()}) - {generer_nombre()}",
|
||
lambda: f"({generer_nombre()} + {generer_nombre()}) + {generer_nombre()} × {generer_nombre()} - {generer_nombre()}",
|
||
lambda: f"{generer_nombre()} × ({generer_nombre()} + {generer_nombre()}) + {generer_nombre()} - {generer_nombre()}",
|
||
lambda: f"{generer_nombre()} + {generer_nombre()} × {generer_nombre()} - {generer_nombre()} × {generer_nombre()} + {generer_nombre()}",
|
||
lambda: f"({generer_nombre()} + {generer_nombre()}) × {generer_nombre()} - {generer_nombre()} + {generer_nombre()} - {generer_nombre()}",
|
||
]
|
||
|
||
# Essayer jusqu'à ce qu'on obtienne une expression avec résultat positif
|
||
while True:
|
||
choix = random.choice(expressions_positives)
|
||
expr = choix()
|
||
resultat = evaluer_expression(expr)
|
||
if resultat >= 0:
|
||
return expr
|
||
|
||
|
||
def generer_feuille_exercices(n_exercices=20):
|
||
"""Génère une feuille d'exercices en format 2 colonnes"""
|
||
expressions = [generer_expression() for _ in range(n_exercices)]
|
||
|
||
# Format 2 colonnes : on affiche par paires
|
||
output = ""
|
||
for i in range(0, n_exercices, 2):
|
||
expr1 = f"{i + 1}. {expressions[i]}"
|
||
expr2 = f"{i + 2}. {expressions[i + 1]}" if i + 1 < len(expressions) else ""
|
||
# Alignement pour deux colonnes
|
||
output += f"{expr1:<36} {expr2}\n" + " " * 36 + " \n" * 3
|
||
return output
|
||
|
||
|
||
def generer_pdf_exercices_en_memoire(n_exercices=20):
|
||
"""Génère une feuille d'exercices au format PDF en mémoire"""
|
||
pdf = FPDF()
|
||
pdf.add_page()
|
||
pdf.set_font("Helvetica", size=12)
|
||
|
||
# Titre
|
||
pdf.cell(
|
||
200,
|
||
10,
|
||
text="Feuille d'exercices d'opérations",
|
||
new_x="LMARGIN",
|
||
new_y="NEXT",
|
||
align="C",
|
||
)
|
||
pdf.ln(10)
|
||
|
||
# Contenu en 2 colonnes
|
||
expressions = [generer_expression() for _ in range(n_exercices)]
|
||
|
||
for i in range(0, n_exercices, 2):
|
||
# Colonne 1
|
||
expr1 = f"{i + 1}. {expressions[i]}"
|
||
pdf.cell(90, 10, text=expr1, border=0, align="L")
|
||
|
||
# Colonne 2
|
||
if i + 1 < len(expressions):
|
||
expr2 = f"{i + 2}. {expressions[i + 1]}"
|
||
pdf.cell(90, 10, text=expr2, border=0, align="L")
|
||
pdf.ln(10)
|
||
|
||
# Espacement supplémentaire - ajout de deux lignes vides supplémentaires
|
||
pdf.ln(15)
|
||
|
||
# Retourner les données PDF en mémoire
|
||
return pdf.output()
|
||
|
||
|
||
def generer_pdf_exercices(n_exercices=20, output_file="exercices.pdf"):
|
||
"""Génère une feuille d'exercices au format PDF"""
|
||
pdf_data = generer_pdf_exercices_en_memoire(n_exercices)
|
||
|
||
# Sauvegarde du PDF
|
||
with open(output_file, "wb") as f:
|
||
f.write(pdf_data)
|
||
return output_file
|