Spaces:
Sleeping
Sleeping
def get_student_by_id(students, student_id): | |
for student in students: | |
if student.educmaster == student_id: | |
return student | |
return None | |
def calculer_moyennes(resultats): | |
moyennes = {} | |
for annee, matieres in resultats.items(): | |
if annee != "Baccalauréat": | |
moyennes[annee] = {} | |
for matiere, notes in matieres.items(): | |
moyenne = (notes["Semestre 1"] + notes["Semestre 2"]) / 2 | |
moyennes[annee][matiere] = moyenne | |
return moyennes | |
def calculer_scores_selection(moyennes, coefficients, biais): | |
scores = {} | |
for annee, matieres in moyennes.items(): | |
scores[annee] = {} | |
for matiere, moyenne in matieres.items(): | |
coef = coefficients.get_coefficient(matiere) | |
score = (moyenne * coef) + moyenne + biais.get(matiere, 0) | |
scores[annee][matiere] = score | |
return scores | |
def selectionner_meilleures_matieres(scores): | |
""" | |
Sélectionne les trois meilleures matières pour chaque année, y compris le Baccalauréat. | |
:param scores: Les scores des matières par année. | |
:return: Un dictionnaire des meilleures matières par année. | |
""" | |
meilleures_matieres = {} | |
for annee, matieres in scores.items(): | |
sorted_matieres = sorted(matieres.items(), key=lambda x: x[1], reverse=True) | |
meilleures_matieres[annee] = [matiere for matiere, score in sorted_matieres[:3]] | |
return meilleures_matieres | |
def compter_occurrences_meilleures_matieres(meilleures_matieres): | |
occurrences = {} | |
for annee, matieres in meilleures_matieres.items(): | |
for matiere in matieres: | |
if matiere in occurrences: | |
occurrences[matiere] += 1 | |
else: | |
occurrences[matiere] = 1 | |
return occurrences | |
def selectionner_top_matieres(occurrences, biais): | |
sorted_occurrences = sorted(occurrences.items(), key=lambda x: (x[1], biais.get(x[0], 0)), reverse=True) | |
return [matiere for matiere, count in sorted_occurrences[:4]] | |
def proposer_filieres(top_matieres, filieres, serie): | |
propositions = [] | |
for filiere in filieres: | |
if filiere.serie == serie: | |
count_best_matieres = sum(1 for matiere in top_matieres if matiere in filiere.matieres) | |
propositions.append((filiere, count_best_matieres)) | |
propositions_triees = sorted(propositions, key=lambda x: x[1], reverse=True) | |
return [filiere for filiere, count in propositions_triees] |