feat: permit to generate only multiplications
This commit is contained in:
+39
-17
@@ -167,6 +167,7 @@ class ExerciseRequest(BaseModel):
|
||||
min_table: int
|
||||
max_table: int
|
||||
num_exercises: int = 15
|
||||
multiplication_only: bool = False
|
||||
|
||||
|
||||
class OperationExerciseRequest(BaseModel):
|
||||
@@ -174,7 +175,7 @@ class OperationExerciseRequest(BaseModel):
|
||||
|
||||
|
||||
def generate_exercises(
|
||||
min_table: int, max_table: int, num_exercises: int = 15
|
||||
min_table: int, max_table: int, num_exercises: int = 15, multiplication_only: bool = False
|
||||
) -> List[str]:
|
||||
"""Génère des exercices de multiplication et division aléatoires mélangés sans doublons"""
|
||||
exercises: List[str] = []
|
||||
@@ -192,8 +193,12 @@ def generate_exercises(
|
||||
b = random.randint(min_table, max_table)
|
||||
result = a * b
|
||||
|
||||
# Choisir aléatoirement le type d'exercice (seulement multiplication ou division)
|
||||
exercise_type = random.choice(["multiplication", "division"])
|
||||
# Déterminer le type d'exercice
|
||||
if multiplication_only:
|
||||
exercise_type = "multiplication"
|
||||
else:
|
||||
# Choisir aléatoirement le type d'exercice (seulement multiplication ou division)
|
||||
exercise_type = random.choice(["multiplication", "division"])
|
||||
|
||||
if exercise_type == "multiplication":
|
||||
# Exercice de multiplication
|
||||
@@ -202,7 +207,7 @@ def generate_exercises(
|
||||
exercise = f"{a} · {b} = ____"
|
||||
exercises.append(exercise)
|
||||
used_operations.add(operation_key)
|
||||
else: # division
|
||||
elif not multiplication_only: # division
|
||||
# Exercice de division
|
||||
divisor = random.choice([a, b])
|
||||
operation_key = f"div_{result}_{divisor}" # Clé unique pour cette opération
|
||||
@@ -221,14 +226,21 @@ def generate_exercises(
|
||||
b = random.randint(min_table, max_table)
|
||||
result = a * b
|
||||
|
||||
# Choisir aléatoirement le type d'exercice
|
||||
exercise_type = random.choice(["multiplication", "division"])
|
||||
# Déterminer le type d'exercice
|
||||
if multiplication_only:
|
||||
exercise_type = "multiplication"
|
||||
else:
|
||||
# Choisir aléatoirement le type d'exercice
|
||||
exercise_type = random.choice(["multiplication", "division"])
|
||||
|
||||
if exercise_type == "multiplication":
|
||||
exercise = f"{a} · {b} = ____"
|
||||
else: # division
|
||||
elif not multiplication_only: # division
|
||||
divisor = random.choice([a, b])
|
||||
exercise = f"{result} : {divisor} = ____"
|
||||
else:
|
||||
# Fallback to multiplication if multiplication_only is True
|
||||
exercise = f"{a} · {b} = ____"
|
||||
|
||||
exercises.append(exercise)
|
||||
|
||||
@@ -236,7 +248,7 @@ def generate_exercises(
|
||||
|
||||
|
||||
def create_math_exercises_pdf(
|
||||
min_table: int, max_table: int, num_exercises: int = 15
|
||||
min_table: int, max_table: int, num_exercises: int = 15, multiplication_only: bool = False
|
||||
) -> str:
|
||||
"""Crée un fichier PDF avec des exercices de mathématiques mélangés en 3 colonnes et l'upload sur S3"""
|
||||
import datetime
|
||||
@@ -245,14 +257,24 @@ def create_math_exercises_pdf(
|
||||
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
|
||||
# Ajouter des informations sur la plage de tables
|
||||
if min_table == max_table:
|
||||
table_info = f"Tables de multiplication et division pour {min_table}"
|
||||
pdf_filename = f"exercices_mathematiques_table_{min_table}_{num_exercises}_exercices_{timestamp}.pdf"
|
||||
if multiplication_only:
|
||||
if min_table == max_table:
|
||||
table_info = f"Tables de multiplication seulement pour {min_table}"
|
||||
pdf_filename = f"exercices_multiplication_seulement_table_{min_table}_{num_exercises}_exercices_{timestamp}.pdf"
|
||||
else:
|
||||
table_info = (
|
||||
f"Tables de multiplication seulement de {min_table} à {max_table}"
|
||||
)
|
||||
pdf_filename = f"exercices_multiplication_seulement_tables_{min_table}_a_{max_table}_{num_exercises}_exercices_{timestamp}.pdf"
|
||||
else:
|
||||
table_info = (
|
||||
f"Tables de multiplication et division de {min_table} à {max_table}"
|
||||
)
|
||||
pdf_filename = f"exercices_mathematiques_tables_{min_table}_a_{max_table}_{num_exercises}_exercices_{timestamp}.pdf"
|
||||
if min_table == max_table:
|
||||
table_info = f"Tables de multiplication et division pour {min_table}"
|
||||
pdf_filename = f"exercices_mathematiques_table_{min_table}_{num_exercises}_exercices_{timestamp}.pdf"
|
||||
else:
|
||||
table_info = (
|
||||
f"Tables de multiplication et division de {min_table} à {max_table}"
|
||||
)
|
||||
pdf_filename = f"exercices_mathematiques_tables_{min_table}_a_{max_table}_{num_exercises}_exercices_{timestamp}.pdf"
|
||||
|
||||
pdf = MathExercisesPDF()
|
||||
pdf.add_page()
|
||||
@@ -262,7 +284,7 @@ def create_math_exercises_pdf(
|
||||
pdf.ln(5)
|
||||
|
||||
# Générer les exercices
|
||||
exercises = generate_exercises(min_table, max_table, num_exercises)
|
||||
exercises = generate_exercises(min_table, max_table, num_exercises, multiplication_only)
|
||||
|
||||
# Pas d'en-têtes de colonnes
|
||||
|
||||
@@ -354,7 +376,7 @@ async def generate_exercises_endpoint(request: ExerciseRequest):
|
||||
return {"error": "Le nombre d'exercices doit être supérieur à 0"}
|
||||
|
||||
pdf_filename = create_math_exercises_pdf(
|
||||
request.min_table, request.max_table, request.num_exercises
|
||||
request.min_table, request.max_table, request.num_exercises, request.multiplication_only
|
||||
)
|
||||
|
||||
# Return redirect to automatically download the file
|
||||
|
||||
Reference in New Issue
Block a user