Spaces:
Runtime error
Runtime error
mrcryptsie commited on
Commit ·
aadd23b
1
Parent(s): 5f6db28
New
Browse files- README.md +18 -9
- app.py +162 -0
- coefficients.py +9 -0
- data.py +212 -0
- debouche.py +14 -0
- etablissement.py +11 -0
- filiere.py +23 -0
- main.py +48 -0
- student.py +23 -0
- universite.py +12 -0
- utils.py +62 -0
README.md
CHANGED
|
@@ -1,14 +1,23 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
-
sdk:
|
| 7 |
-
sdk_version:
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
-
license: mit
|
| 11 |
-
short_description: Algorithme de recommandation
|
| 12 |
---
|
| 13 |
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: ALGORITHME DE RECOMMANDATION
|
| 3 |
+
emoji: 🎓
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: "1.22.0"
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
|
|
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# ALGORITHME DE RECOMMANDATION
|
| 13 |
+
|
| 14 |
+
## Fonctionnalités
|
| 15 |
+
|
| 16 |
+
- **Gestion des étudiants** : Stocke les informations des étudiants (nom, prénom, série, résultats scolaires).
|
| 17 |
+
- **Calcul des moyennes** : Calcule les moyennes des étudiants par matière et par année.
|
| 18 |
+
- **Sélection des meilleures matières** : Identifie les matières où l'étudiant excelle.
|
| 19 |
+
- **Proposition de filières** : Propose des filières d'études en fonction des meilleures matières de l'étudiant.
|
| 20 |
+
- **Visualisation des débouchés** : Affiche les débouchés professionnels associés à chaque filière.
|
| 21 |
+
|
| 22 |
+
---
|
| 23 |
+
|
app.py
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
from data import coefficients_C, coefficients_D, filieres, students
|
| 3 |
+
from utils import (
|
| 4 |
+
get_student_by_id,
|
| 5 |
+
calculer_moyennes,
|
| 6 |
+
calculer_scores_selection,
|
| 7 |
+
selectionner_meilleures_matieres,
|
| 8 |
+
compter_occurrences_meilleures_matieres,
|
| 9 |
+
selectionner_top_matieres,
|
| 10 |
+
proposer_filieres
|
| 11 |
+
)
|
| 12 |
+
|
| 13 |
+
def analyser_etudiant(student_id):
|
| 14 |
+
# Vérifier si l'étudiant existe
|
| 15 |
+
student = get_student_by_id(students, student_id)
|
| 16 |
+
if not student:
|
| 17 |
+
return ["Étudiant introuvable"] + [""] * 14 # Retourner 15 valeurs vides si l'étudiant n'est pas trouvé
|
| 18 |
+
|
| 19 |
+
# Définir les coefficients et les biais
|
| 20 |
+
coefficients = coefficients_C if student.serie == "C" else coefficients_D
|
| 21 |
+
biais = {
|
| 22 |
+
"Mathématiques": 5,
|
| 23 |
+
"Physique-Chimie": 4,
|
| 24 |
+
"Informatique": 3,
|
| 25 |
+
"Français": 2,
|
| 26 |
+
"Philosophie": 1,
|
| 27 |
+
"Anglais": 2
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
# Étape 1 : Calcul des moyennes (hors Baccalauréat)
|
| 31 |
+
moyennes = calculer_moyennes(student.resultats)
|
| 32 |
+
moyennes_seconde = "\n".join([f"- {matiere}: {moyenne}" for matiere, moyenne in moyennes["Seconde"].items()])
|
| 33 |
+
moyennes_premiere = "\n".join([f"- {matiere}: {moyenne}" for matiere, moyenne in moyennes["Première"].items()])
|
| 34 |
+
moyennes_terminale = "\n".join([f"- {matiere}: {moyenne}" for matiere, moyenne in moyennes["Terminale"].items()])
|
| 35 |
+
|
| 36 |
+
# Étape 2 : Calcul des scores (hors Baccalauréat)
|
| 37 |
+
scores = calculer_scores_selection(moyennes, coefficients, biais)
|
| 38 |
+
scores_seconde = "\n".join([f"- {matiere}: {score}" for matiere, score in scores["Seconde"].items()])
|
| 39 |
+
scores_premiere = "\n".join([f"- {matiere}: {score}" for matiere, score in scores["Première"].items()])
|
| 40 |
+
scores_terminale = "\n".join([f"- {matiere}: {score}" for matiere, score in scores["Terminale"].items()])
|
| 41 |
+
|
| 42 |
+
# Étape 3 : Calcul des scores pour le Baccalauréat
|
| 43 |
+
scores_bac = {}
|
| 44 |
+
for matiere, note in student.resultats["Baccalauréat"].items():
|
| 45 |
+
coef = coefficients.get_coefficient(matiere)
|
| 46 |
+
score_bac = (note * coef) + note + biais.get(matiere, 0)
|
| 47 |
+
scores_bac[matiere] = score_bac
|
| 48 |
+
|
| 49 |
+
# Ajout des scores du Baccalauréat aux scores globaux
|
| 50 |
+
scores["Baccalauréat"] = scores_bac
|
| 51 |
+
scores_bac_str = "\n".join([f"- {matiere}: {score}" for matiere, score in scores_bac.items()])
|
| 52 |
+
|
| 53 |
+
# Étape 4 : Sélection des meilleures matières par année (y compris Baccalauréat)
|
| 54 |
+
meilleures_matieres = selectionner_meilleures_matieres(scores)
|
| 55 |
+
meilleures_seconde = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Seconde", [])])
|
| 56 |
+
meilleures_premiere = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Première", [])])
|
| 57 |
+
meilleures_terminale = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Terminale", [])])
|
| 58 |
+
meilleures_bac = "\n".join([f"- {matiere}" for matiere in meilleures_matieres.get("Baccalauréat", [])])
|
| 59 |
+
|
| 60 |
+
# Étape 5 : Comptage des occurrences des meilleures matières
|
| 61 |
+
occurrences = compter_occurrences_meilleures_matieres(meilleures_matieres)
|
| 62 |
+
occurrences_str = "\n".join([f"- {matiere}: {count}" for matiere, count in occurrences.items()])
|
| 63 |
+
|
| 64 |
+
# Étape 6 : Sélection des quatre meilleures matières
|
| 65 |
+
top_matieres = selectionner_top_matieres(occurrences, biais)
|
| 66 |
+
top_matieres_str = "\n".join([f"- {matiere}" for matiere in top_matieres])
|
| 67 |
+
|
| 68 |
+
# Étape 7 : Proposition des filières
|
| 69 |
+
propositions = proposer_filieres(top_matieres, filieres, student.serie)
|
| 70 |
+
propositions_str = "\n".join([f"- {filiere.nom}" for filiere in propositions])
|
| 71 |
+
|
| 72 |
+
# Retourner toutes les étapes (15 valeurs)
|
| 73 |
+
return [
|
| 74 |
+
f"Étudiant : {student.nom}", # Informations étudiant
|
| 75 |
+
moyennes_seconde, moyennes_premiere, moyennes_terminale, # Moyennes par année
|
| 76 |
+
scores_seconde, scores_premiere, scores_terminale, # Scores par année
|
| 77 |
+
scores_bac_str, # Scores du Baccalauréat
|
| 78 |
+
meilleures_seconde, meilleures_premiere, meilleures_terminale, meilleures_bac, # Meilleures matières par année
|
| 79 |
+
occurrences_str, # Occurrences des meilleures matières
|
| 80 |
+
top_matieres_str, # Quatre meilleures matières
|
| 81 |
+
propositions_str # Filières proposées
|
| 82 |
+
]
|
| 83 |
+
# Interface Gradio stylisée avec années séparées
|
| 84 |
+
with gr.Blocks(theme=gr.themes.Soft()) as interface:
|
| 85 |
+
gr.Markdown("# 🎓 Analyse des Étudiants et Suggestions de Filières 🎓")
|
| 86 |
+
gr.Markdown("Cette application analyse les résultats scolaires d'un étudiant et propose des filières adaptées en fonction de ses performances.")
|
| 87 |
+
|
| 88 |
+
with gr.Row():
|
| 89 |
+
with gr.Column():
|
| 90 |
+
student_id_input = gr.Textbox(label="🔍 Identifiant Étudiant", placeholder="E001", lines=1)
|
| 91 |
+
analyze_button = gr.Button("🚀 Analyser", variant="primary")
|
| 92 |
+
|
| 93 |
+
with gr.Column():
|
| 94 |
+
student_info = gr.Textbox(label="👤 Informations Étudiant", interactive=False)
|
| 95 |
+
|
| 96 |
+
with gr.Tab("📊 Moyennes et Scores"):
|
| 97 |
+
with gr.Row():
|
| 98 |
+
with gr.Column():
|
| 99 |
+
gr.Markdown("### 📈 Moyennes par Année")
|
| 100 |
+
with gr.Group():
|
| 101 |
+
gr.Markdown("#### Seconde")
|
| 102 |
+
moyennes_seconde = gr.Textbox(label="", interactive=False, lines=4)
|
| 103 |
+
gr.Markdown("#### Première")
|
| 104 |
+
moyennes_premiere = gr.Textbox(label="", interactive=False, lines=4)
|
| 105 |
+
gr.Markdown("#### Terminale")
|
| 106 |
+
moyennes_terminale = gr.Textbox(label="", interactive=False, lines=4)
|
| 107 |
+
with gr.Column():
|
| 108 |
+
gr.Markdown("### 📊 Scores par Année")
|
| 109 |
+
with gr.Group():
|
| 110 |
+
gr.Markdown("#### Seconde")
|
| 111 |
+
scores_seconde = gr.Textbox(label="", interactive=False, lines=4)
|
| 112 |
+
gr.Markdown("#### Première")
|
| 113 |
+
scores_premiere = gr.Textbox(label="", interactive=False, lines=4)
|
| 114 |
+
gr.Markdown("#### Terminale")
|
| 115 |
+
scores_terminale = gr.Textbox(label="", interactive=False, lines=4)
|
| 116 |
+
with gr.Column():
|
| 117 |
+
gr.Markdown("### 🏆 Scores du Baccalauréat")
|
| 118 |
+
scores_bac_output = gr.Textbox(label="", interactive=False, lines=6)
|
| 119 |
+
|
| 120 |
+
with gr.Tab("🏅 Meilleures Matières"):
|
| 121 |
+
with gr.Row():
|
| 122 |
+
with gr.Column():
|
| 123 |
+
gr.Markdown("### 🥇 Meilleures Matières par Année")
|
| 124 |
+
with gr.Group():
|
| 125 |
+
gr.Markdown("#### Seconde")
|
| 126 |
+
meilleures_seconde = gr.Textbox(label="", interactive=False, lines=3)
|
| 127 |
+
gr.Markdown("#### Première")
|
| 128 |
+
meilleures_premiere = gr.Textbox(label="", interactive=False, lines=3)
|
| 129 |
+
gr.Markdown("#### Terminale")
|
| 130 |
+
meilleures_terminale = gr.Textbox(label="", interactive=False, lines=3)
|
| 131 |
+
gr.Markdown("#### Baccalauréat")
|
| 132 |
+
meilleures_bac = gr.Textbox(label="", interactive=False, lines=3)
|
| 133 |
+
with gr.Column():
|
| 134 |
+
gr.Markdown("### 🔢 Occurrences des Meilleures Matières")
|
| 135 |
+
occurrences_output = gr.Textbox(label="", interactive=False, lines=6)
|
| 136 |
+
with gr.Column():
|
| 137 |
+
gr.Markdown("### 🏅 Quatre Meilleures Matières")
|
| 138 |
+
top_matieres_output = gr.Textbox(label="", interactive=False, lines=4)
|
| 139 |
+
|
| 140 |
+
with gr.Tab("🎓 Filières Proposées"):
|
| 141 |
+
gr.Markdown("### 📚 Filières Proposées")
|
| 142 |
+
propositions_output = gr.Textbox(label="", interactive=False, lines=6)
|
| 143 |
+
|
| 144 |
+
# Lier le bouton à la fonction
|
| 145 |
+
analyze_button.click(
|
| 146 |
+
analyser_etudiant,
|
| 147 |
+
inputs=[student_id_input],
|
| 148 |
+
outputs=[
|
| 149 |
+
student_info,
|
| 150 |
+
moyennes_seconde, moyennes_premiere, moyennes_terminale,
|
| 151 |
+
scores_seconde, scores_premiere, scores_terminale,
|
| 152 |
+
scores_bac_output,
|
| 153 |
+
meilleures_seconde, meilleures_premiere, meilleures_terminale, meilleures_bac,
|
| 154 |
+
occurrences_output,
|
| 155 |
+
top_matieres_output,
|
| 156 |
+
propositions_output
|
| 157 |
+
]
|
| 158 |
+
)
|
| 159 |
+
|
| 160 |
+
# Lancer l'application
|
| 161 |
+
if __name__ == "__main__":
|
| 162 |
+
interface.launch()
|
coefficients.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Coefficients:
|
| 2 |
+
def __init__(self, serie, matieres):
|
| 3 |
+
self.serie = serie
|
| 4 |
+
self.matieres = matieres
|
| 5 |
+
|
| 6 |
+
def get_coefficient(self, matiere):
|
| 7 |
+
if matiere not in self.matieres:
|
| 8 |
+
raise ValueError(f"Matière '{matiere}' non trouvée dans les coefficients pour la série {self.serie}.")
|
| 9 |
+
return self.matieres.get(matiere, 1)
|
data.py
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from coefficients import Coefficients
|
| 2 |
+
from debouche import Debouche
|
| 3 |
+
from filiere import Filiere
|
| 4 |
+
from etablissement import Etablissement
|
| 5 |
+
from universite import Universite
|
| 6 |
+
from student import Student
|
| 7 |
+
|
| 8 |
+
# Coefficients pour chaque série
|
| 9 |
+
coefficients_C = Coefficients("C", {
|
| 10 |
+
"Mathématiques": 4,
|
| 11 |
+
"Physique-Chimie": 3,
|
| 12 |
+
"Informatique": 2,
|
| 13 |
+
"Français": 2,
|
| 14 |
+
"Philosophie": 1,
|
| 15 |
+
"Anglais": 2
|
| 16 |
+
})
|
| 17 |
+
|
| 18 |
+
coefficients_D = Coefficients("D", {
|
| 19 |
+
"Mathématiques": 4,
|
| 20 |
+
"SVT": 3,
|
| 21 |
+
"Informatique": 2,
|
| 22 |
+
"Français": 2,
|
| 23 |
+
"Philosophie": 1,
|
| 24 |
+
"Anglais": 2
|
| 25 |
+
})
|
| 26 |
+
|
| 27 |
+
# Simulation des débouchés (40 débouchés)
|
| 28 |
+
debouches_informatique = [
|
| 29 |
+
Debouche("Développeur Web", "Informatique", 45000, 95, "Très bonnes"),
|
| 30 |
+
Debouche("Data Scientist", "Informatique", 60000, 90, "Excellentes"),
|
| 31 |
+
Debouche("Ingénieur Logiciel", "Informatique", 55000, 92, "Très bonnes"),
|
| 32 |
+
Debouche("Administrateur Système", "Informatique", 50000, 88, "Bonnes"),
|
| 33 |
+
Debouche("Analyste Cybersécurité", "Informatique", 65000, 94, "Excellentes"),
|
| 34 |
+
Debouche("Concepteur UI/UX", "Informatique", 48000, 89, "Bonnes"),
|
| 35 |
+
Debouche("Architecte Cloud", "Informatique", 70000, 93, "Excellentes"),
|
| 36 |
+
Debouche("Ingénieur DevOps", "Informatique", 68000, 91, "Très bonnes"),
|
| 37 |
+
Debouche("Développeur Mobile", "Informatique", 52000, 87, "Bonnes"),
|
| 38 |
+
Debouche("Ingénieur Réseaux", "Informatique", 58000, 90, "Très bonnes")
|
| 39 |
+
]
|
| 40 |
+
|
| 41 |
+
debouches_medecine = [
|
| 42 |
+
Debouche("Médecin Généraliste", "Santé", 75000, 98, "Bonnes"),
|
| 43 |
+
Debouche("Chirurgien", "Santé", 120000, 99, "Excellentes"),
|
| 44 |
+
Debouche("Dentiste", "Santé", 90000, 97, "Bonnes"),
|
| 45 |
+
Debouche("Pharmacien", "Santé", 85000, 96, "Bonnes"),
|
| 46 |
+
Debouche("Infirmier", "Santé", 50000, 95, "Bonnes"),
|
| 47 |
+
Debouche("Radiologue", "Santé", 110000, 98, "Excellentes"),
|
| 48 |
+
Debouche("Pédiatre", "Santé", 95000, 97, "Bonnes"),
|
| 49 |
+
Debouche("Cardiologue", "Santé", 130000, 99, "Excellentes"),
|
| 50 |
+
Debouche("Psychiatre", "Santé", 100000, 96, "Bonnes"),
|
| 51 |
+
Debouche("Vétérinaire", "Santé", 80000, 95, "Bonnes")
|
| 52 |
+
]
|
| 53 |
+
|
| 54 |
+
debouches_ingenierie = [
|
| 55 |
+
Debouche("Ingénieur Civil", "Ingénierie", 70000, 92, "Très bonnes"),
|
| 56 |
+
Debouche("Ingénieur Mécanique", "Ingénierie", 72000, 91, "Très bonnes"),
|
| 57 |
+
Debouche("Ingénieur Électrique", "Ingénierie", 75000, 93, "Excellentes"),
|
| 58 |
+
Debouche("Ingénieur Chimiste", "Ingénierie", 68000, 90, "Bonnes"),
|
| 59 |
+
Debouche("Ingénieur Aérospatial", "Ingénierie", 85000, 94, "Excellentes"),
|
| 60 |
+
Debouche("Ingénieur Environnemental", "Ingénierie", 65000, 89, "Bonnes"),
|
| 61 |
+
Debouche("Ingénieur Industriel", "Ingénierie", 70000, 91, "Très bonnes"),
|
| 62 |
+
Debouche("Ingénieur Matériaux", "Ingénierie", 73000, 92, "Très bonnes"),
|
| 63 |
+
Debouche("Ingénieur Robotique", "Ingénierie", 78000, 93, "Excellentes"),
|
| 64 |
+
Debouche("Ingénieur Biomédical", "Ingénierie", 76000, 92, "Très bonnes")
|
| 65 |
+
]
|
| 66 |
+
|
| 67 |
+
debouches_commerce = [
|
| 68 |
+
Debouche("Analyste Financier", "Commerce", 60000, 90, "Très bonnes"),
|
| 69 |
+
Debouche("Responsable Marketing", "Commerce", 58000, 89, "Bonnes"),
|
| 70 |
+
Debouche("Chef de Projet", "Commerce", 65000, 91, "Très bonnes"),
|
| 71 |
+
Debouche("Consultant en Gestion", "Commerce", 70000, 92, "Très bonnes"),
|
| 72 |
+
Debouche("Directeur des Ventes", "Commerce", 80000, 93, "Excellentes"),
|
| 73 |
+
Debouche("Analyste Commercial", "Commerce", 55000, 88, "Bonnes"),
|
| 74 |
+
Debouche("Responsable RH", "Commerce", 62000, 90, "Très bonnes"),
|
| 75 |
+
Debouche("Entrepreneur", "Commerce", 75000, 92, "Très bonnes"),
|
| 76 |
+
Debouche("Analyste de Données", "Commerce", 68000, 91, "Très bonnes"),
|
| 77 |
+
Debouche("Responsable Logistique", "Commerce", 60000, 89, "Bonnes")
|
| 78 |
+
]
|
| 79 |
+
|
| 80 |
+
# Simulation des filières (15 filières)
|
| 81 |
+
filieres = [
|
| 82 |
+
Filiere("F001", "Informatique", "Université A", "École des Sciences Informatiques", "C", ["Mathématiques", "Informatique", "Anglais"], debouches_informatique),
|
| 83 |
+
Filiere("F002", "Génie Logiciel", "Université A", "École des Sciences Informatiques", "C", ["Mathématiques", "Informatique", "Physique-Chimie"], debouches_informatique),
|
| 84 |
+
Filiere("F003", "Médecine", "Université B", "Faculté de Médecine", "D", ["Biologie", "Physique", "Chimie"], debouches_medecine),
|
| 85 |
+
Filiere("F004", "Génie Civil", "Université B", "École d'Ingénierie", "D", ["Mathématiques", "Physique", "Chimie"], debouches_ingenierie),
|
| 86 |
+
Filiere("F005", "Pharmacie", "Université B", "Faculté de Médecine", "D", ["Biologie", "Chimie", "Physique"], debouches_medecine),
|
| 87 |
+
Filiere("F006", "Ingénierie Mécanique", "Université C", "École d'Ingénierie", "C", ["Mathématiques", "Physique", "Informatique"], debouches_ingenierie),
|
| 88 |
+
Filiere("F007", "Ingénierie Électrique", "Université C", "École d'Ingénierie", "C", ["Mathématiques", "Physique", "Informatique"], debouches_ingenierie),
|
| 89 |
+
Filiere("F008", "Commerce International", "Université D", "École de Commerce", "D", ["Mathématiques", "Anglais", "Français"], debouches_commerce),
|
| 90 |
+
Filiere("F009", "Marketing", "Université D", "École de Commerce", "D", ["Mathématiques", "Anglais", "Français"], debouches_commerce),
|
| 91 |
+
Filiere("F010", "Biologie Moléculaire", "Université E", "Faculté des Sciences", "D", ["Biologie", "Chimie", "Physique"], debouches_medecine),
|
| 92 |
+
Filiere("F011", "Chimie Industrielle", "Université E", "Faculté des Sciences", "C", ["Chimie", "Physique", "Mathématiques"], debouches_ingenierie),
|
| 93 |
+
Filiere("F012", "Physique Appliquée", "Université F", "Faculté des Sciences", "C", ["Physique", "Mathématiques", "Informatique"], debouches_ingenierie),
|
| 94 |
+
Filiere("F013", "Mathématiques Appliquées", "Université F", "Faculté des Sciences", "C", ["Mathématiques", "Informatique", "Physique"], debouches_informatique),
|
| 95 |
+
Filiere("F014", "Économie", "Université G", "École de Commerce", "D", ["Mathématiques", "Français", "Anglais"], debouches_commerce),
|
| 96 |
+
Filiere("F015", "Gestion des Entreprises", "Université G", "École de Commerce", "D", ["Mathématiques", "Français", "Anglais"], debouches_commerce)
|
| 97 |
+
]
|
| 98 |
+
|
| 99 |
+
# Simulation des établissements
|
| 100 |
+
etablissements = [
|
| 101 |
+
Etablissement("École des Sciences Informatiques", "École", [filieres[0], filieres[1]]),
|
| 102 |
+
Etablissement("Faculté de Médecine", "Faculté", [filieres[2], filieres[4]]),
|
| 103 |
+
Etablissement("École d'Ingénierie", "École", [filieres[3], filieres[5], filieres[6]]),
|
| 104 |
+
Etablissement("École de Commerce", "École", [filieres[7], filieres[8], filieres[13], filieres[14]]),
|
| 105 |
+
Etablissement("Faculté des Sciences", "Faculté", [filieres[9], filieres[10], filieres[11], filieres[12]])
|
| 106 |
+
]
|
| 107 |
+
|
| 108 |
+
# Simulation des universités
|
| 109 |
+
universites = [
|
| 110 |
+
Universite("Université A", [etablissements[0]]),
|
| 111 |
+
Universite("Université B", [etablissements[1], etablissements[2]]),
|
| 112 |
+
Universite("Université C", [etablissements[2]]),
|
| 113 |
+
Universite("Université D", [etablissements[3]]),
|
| 114 |
+
Universite("Université E", [etablissements[4]]),
|
| 115 |
+
Universite("Université F", [etablissements[4]]),
|
| 116 |
+
Universite("Université G", [etablissements[3]])
|
| 117 |
+
]
|
| 118 |
+
|
| 119 |
+
# Simulation des étudiants (10 étudiants)
|
| 120 |
+
students = [
|
| 121 |
+
Student("E001", "John", "Doe", "C", {
|
| 122 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 12, "Semestre 2": 8}, "Physique-Chimie": {"Semestre 1": 10, "Semestre 2": 13},
|
| 123 |
+
"Informatique": {"Semestre 1": 16, "Semestre 2": 17}, "Français": {"Semestre 1": 8, "Semestre 2": 13.5},
|
| 124 |
+
"Philosophie": {"Semestre 1": 11, "Semestre 2": 12}, "Anglais": {"Semestre 1": 15, "Semestre 2": 14}},
|
| 125 |
+
"Première": {"Mathématiques": {"Semestre 1": 14, "Semestre 2": 5}, "Physique-Chimie": {"Semestre 1": 20, "Semestre 2": 14},
|
| 126 |
+
"Informatique": {"Semestre 1": 10, "Semestre 2": 18}, "Français": {"Semestre 1": 15, "Semestre 2": 14},
|
| 127 |
+
"Philosophie": {"Semestre 1": 15, "Semestre 2": 14}, "Anglais": {"Semestre 1": 16, "Semestre 2": 15}},
|
| 128 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 10, "Semestre 2": 16}, "Physique-Chimie": {"Semestre 1": 14, "Semestre 2": 15},
|
| 129 |
+
"Informatique": {"Semestre 1": 10, "Semestre 2": 19}, "Français": {"Semestre 1": 16, "Semestre 2": 15},
|
| 130 |
+
"Philosophie": {"Semestre 1": 10, "Semestre 2": 15}, "Anglais": {"Semestre 1": 18, "Semestre 2": 18}},
|
| 131 |
+
"Baccalauréat": {"Mathématiques": 10, "Physique-Chimie": 19, "Informatique": 12, "Français": 20, "Philosophie": 19, "Anglais": 20}}),
|
| 132 |
+
|
| 133 |
+
Student("E002", "Alice", "Smith", "D", {
|
| 134 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 14.5, "Semestre 2": 15.5}, "SVT": {"Semestre 1": 13.5, "Semestre 2": 14.5},
|
| 135 |
+
"Informatique": {"Semestre 1": 16, "Semestre 2": 16.5}, "Français": {"Semestre 1": 12, "Semestre 2": 13},
|
| 136 |
+
"Philosophie": {"Semestre 1": 10.5, "Semestre 2": 11}, "Anglais": {"Semestre 1": 14, "Semestre 2": 15}},
|
| 137 |
+
"Première": {"Mathématiques": {"Semestre 1": 14, "Semestre 2": 15}, "SVT": {"Semestre 1": 13, "Semestre 2": 14},
|
| 138 |
+
"Informatique": {"Semestre 1": 15, "Semestre 2": 16}, "Français": {"Semestre 1": 13, "Semestre 2": 14},
|
| 139 |
+
"Philosophie": {"Semestre 1": 12, "Semestre 2": 13}, "Anglais": {"Semestre 1": 15, "Semestre 2": 16}},
|
| 140 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 15, "Semestre 2": 16}, "SVT": {"Semestre 1": 14.5, "Semestre 2": 15.5},
|
| 141 |
+
"Informatique": {"Semestre 1": 17, "Semestre 2": 18}, "Français": {"Semestre 1": 14, "Semestre 2": 15},
|
| 142 |
+
"Philosophie": {"Semestre 1": 13, "Semestre 2": 14}, "Anglais": {"Semestre 1": 16, "Semestre 2": 17}},
|
| 143 |
+
"Baccalauréat": {"Mathématiques": 16, "SVT": 15, "Informatique": 17, "Français": 15, "Philosophie": 13, "Anglais": 16}}),
|
| 144 |
+
|
| 145 |
+
Student("E003", "John", "Doe", "D", {
|
| 146 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 13, "Semestre 2": 14}, "SVT": {"Semestre 1": 12.5, "Semestre 2": 13.5},
|
| 147 |
+
"Informatique": {"Semestre 1": 15.5, "Semestre 2": 16}, "Français": {"Semestre 1": 11.5, "Semestre 2": 12.5},
|
| 148 |
+
"Philosophie": {"Semestre 1": 10, "Semestre 2": 11}, "Anglais": {"Semestre 1": 13.5, "Semestre 2": 14}},
|
| 149 |
+
"Première": {"Mathématiques": {"Semestre 1": 14.5, "Semestre 2": 15.5}, "SVT": {"Semestre 1": 13, "Semestre 2": 14},
|
| 150 |
+
"Informatique": {"Semestre 1": 16, "Semestre 2": 16.5}, "Français": {"Semestre 1": 13, "Semestre 2": 14},
|
| 151 |
+
"Philosophie": {"Semestre 1": 11.5, "Semestre 2": 12.5}, "Anglais": {"Semestre 1": 14.5, "Semestre 2": 15}},
|
| 152 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 16, "Semestre 2": 17}, "SVT": {"Semestre 1": 14.5, "Semestre 2": 15.5},
|
| 153 |
+
"Informatique": {"Semestre 1": 17.5, "Semestre 2": 18}, "Français": {"Semestre 1": 14, "Semestre 2": 15},
|
| 154 |
+
"Philosophie": {"Semestre 1": 12, "Semestre 2": 13}, "Anglais": {"Semestre 1": 15.5, "Semestre 2": 16}},
|
| 155 |
+
"Baccalauréat": {"Mathématiques": 17, "SVT": 15.5, "Informatique": 18, "Français": 15, "Philosophie": 12.5, "Anglais": 16.5}}),
|
| 156 |
+
|
| 157 |
+
Student("E004", "Emma", "Johnson", "D", {
|
| 158 |
+
|
| 159 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 10.5, "Semestre 2": 11}, "SVT": {"Semestre 1": 12, "Semestre 2": 13},
|
| 160 |
+
"Informatique": {"Semestre 1": 13, "Semestre 2": 13.5}, "Français": {"Semestre 1": 14, "Semestre 2": 15},
|
| 161 |
+
"Philosophie": {"Semestre 1": 13.5, "Semestre 2": 14}, "Anglais": {"Semestre 1": 15, "Semestre 2": 16}},
|
| 162 |
+
|
| 163 |
+
"Première": {"Mathématiques": {"Semestre 1": 11, "Semestre 2": 12}, "SVT": {"Semestre 1": 13, "Semestre 2": 14},
|
| 164 |
+
"Informatique": {"Semestre 1": 14, "Semestre 2": 14.5}, "Français": {"Semestre 1": 15, "Semestre 2": 16},
|
| 165 |
+
"Philosophie": {"Semestre 1": 14.5, "Semestre 2": 15}, "Anglais": {"Semestre 1": 16, "Semestre 2": 17}},
|
| 166 |
+
|
| 167 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 12, "Semestre 2": 12.5}, "SVT": {"Semestre 1": 14, "Semestre 2": 15},
|
| 168 |
+
"Informatique": {"Semestre 1": 15, "Semestre 2": 15.5}, "Français": {"Semestre 1": 16, "Semestre 2": 17},
|
| 169 |
+
"Philosophie": {"Semestre 1": 15.5, "Semestre 2": 16}, "Anglais": {"Semestre 1": 17, "Semestre 2": 17.5}},
|
| 170 |
+
"Baccalauréat": {"Mathématiques": 12.5, "SVT": 15, "Informatique": 15.5, "Français": 17, "Philosophie": 16, "Anglais": 17}}),
|
| 171 |
+
|
| 172 |
+
Student("E005", "Liam", "Brown", "D", {
|
| 173 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 12.5, "Semestre 2": 13}, "SVT": {"Semestre 1": 14, "Semestre 2": 14.5},
|
| 174 |
+
"Informatique": {"Semestre 1": 16, "Semestre 2": 16.5}, "Français": {"Semestre 1": 11.5, "Semestre 2": 12},
|
| 175 |
+
"Philosophie": {"Semestre 1": 10, "Semestre 2": 10.5}, "Anglais": {"Semestre 1": 13, "Semestre 2": 14}},
|
| 176 |
+
"Première": {"Mathématiques": {"Semestre 1": 14, "Semestre 2": 14.5}, "SVT": {"Semestre 1": 15, "Semestre 2": 15.5},
|
| 177 |
+
"Informatique": {"Semestre 1": 17, "Semestre 2": 17.5}, "Français": {"Semestre 1": 12, "Semestre 2": 13},
|
| 178 |
+
"Philosophie": {"Semestre 1": 11, "Semestre 2": 11.5}, "Anglais": {"Semestre 1": 14.5, "Semestre 2": 15}},
|
| 179 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 15.5, "Semestre 2": 16}, "SVT": {"Semestre 1": 16, "Semestre 2": 16.5},
|
| 180 |
+
"Informatique": {"Semestre 1": 18, "Semestre 2": 18.5}, "Français": {"Semestre 1": 14, "Semestre 2": 15},
|
| 181 |
+
"Philosophie": {"Semestre 1": 12, "Semestre 2": 12.5}, "Anglais": {"Semestre 1": 15.5, "Semestre 2": 16}},
|
| 182 |
+
"Baccalauréat": {"Mathématiques": 16, "SVT": 16.5, "Informatique": 18.5, "Français": 15, "Philosophie": 12.5, "Anglais": 16}}),
|
| 183 |
+
|
| 184 |
+
Student("E006", "Olivia", "Davis", "D", {
|
| 185 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 11, "Semestre 2": 11.5}, "SVT": {"Semestre 1": 13.5, "Semestre 2": 14},
|
| 186 |
+
"Informatique": {"Semestre 1": 14.5, "Semestre 2": 15}, "Français": {"Semestre 1": 14, "Semestre 2": 15},
|
| 187 |
+
"Philosophie": {"Semestre 1": 12.5, "Semestre 2": 13}, "Anglais": {"Semestre 1": 14.5, "Semestre 2": 15.5}},
|
| 188 |
+
"Première": {"Mathématiques": {"Semestre 1": 12.5, "Semestre 2": 13}, "SVT": {"Semestre 1": 14.5, "Semestre 2": 15},
|
| 189 |
+
"Informatique": {"Semestre 1": 15.5, "Semestre 2": 16}, "Français": {"Semestre 1": 15, "Semestre 2": 16},
|
| 190 |
+
"Philosophie": {"Semestre 1": 13, "Semestre 2": 13.5}, "Anglais": {"Semestre 1": 16, "Semestre 2": 17}},
|
| 191 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 13, "Semestre 2": 14}, "SVT": {"Semestre 1": 15, "Semestre 2": 15.5},
|
| 192 |
+
"Informatique": {"Semestre 1": 16.5, "Semestre 2": 17}, "Français": {"Semestre 1": 16.5, "Semestre 2": 17},
|
| 193 |
+
"Philosophie": {"Semestre 1": 14, "Semestre 2": 14.5}, "Anglais": {"Semestre 1": 17.5, "Semestre 2": 18}},
|
| 194 |
+
"Baccalauréat": {"Mathématiques": 14, "SVT": 15.5, "Informatique": 17, "Français": 17, "Philosophie": 14.5, "Anglais": 18}}),
|
| 195 |
+
|
| 196 |
+
Student("E007", "Sophia", "Miller", "D", {
|
| 197 |
+
"Seconde": {"Mathématiques": {"Semestre 1": 12, "Semestre 2": 13}, "SVT": {"Semestre 1": 14, "Semestre 2": 14.5},
|
| 198 |
+
"Informatique": {"Semestre 1": 15, "Semestre 2": 15.5}, "Français": {"Semestre 1": 13, "Semestre 2": 13.5},
|
| 199 |
+
"Philosophie": {"Semestre 1": 12, "Semestre 2": 12.5}, "Anglais": {"Semestre 1": 14.5, "Semestre 2": 15}},
|
| 200 |
+
"Première": {"Mathématiques": {"Semestre 1": 14, "Semestre 2": 14.5}, "SVT": {"Semestre 1": 15, "Semestre 2": 15.5},
|
| 201 |
+
"Informatique": {"Semestre 1": 16, "Semestre 2": 16.5}, "Français": {"Semestre 1": 14, "Semestre 2": 15},
|
| 202 |
+
"Philosophie": {"Semestre 1": 13, "Semestre 2": 13.5}, "Anglais": {"Semestre 1": 15.5, "Semestre 2": 16}},
|
| 203 |
+
"Terminale": {"Mathématiques": {"Semestre 1": 15, "Semestre 2": 15.5}, "SVT": {"Semestre 1": 16, "Semestre 2": 16.5},
|
| 204 |
+
"Informatique": {"Semestre 1": 17, "Semestre 2": 17.5}, "Français": {"Semestre 1": 15, "Semestre 2": 15.5},
|
| 205 |
+
"Philosophie": {"Semestre 1": 14, "Semestre 2": 14.5}, "Anglais": {"Semestre 1": 16.5, "Semestre 2": 17}},
|
| 206 |
+
"Baccalauréat": {"Mathématiques": 15.5, "SVT": 16.5, "Informatique": 17.5, "Français": 15.5, "Philosophie": 14.5, "Anglais": 17}}),
|
| 207 |
+
|
| 208 |
+
|
| 209 |
+
# Ajoutez 8 autres étudiants ici...
|
| 210 |
+
]
|
| 211 |
+
|
| 212 |
+
# Ajoutez les 8 autres étudiants avec des résultats variés...
|
debouche.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Debouche:
|
| 2 |
+
def __init__(self, nom, marche_emploi, salaire_moyen, taux_emploi, perspectives_croissance):
|
| 3 |
+
self.nom = nom
|
| 4 |
+
self.marche_emploi = marche_emploi
|
| 5 |
+
self.salaire_moyen = salaire_moyen
|
| 6 |
+
self.taux_emploi = taux_emploi
|
| 7 |
+
self.perspectives_croissance = perspectives_croissance
|
| 8 |
+
|
| 9 |
+
def afficher_info(self):
|
| 10 |
+
return (f"Débouché: {self.nom}\n"
|
| 11 |
+
f" Marché de l'emploi: {self.marche_emploi}\n"
|
| 12 |
+
f" Salaire moyen: {self.salaire_moyen} €/an\n"
|
| 13 |
+
f" Taux d'emploi: {self.taux_emploi}%\n"
|
| 14 |
+
f" Perspectives de croissance: {self.perspectives_croissance}\n")
|
etablissement.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Etablissement:
|
| 2 |
+
def __init__(self, nom, type, filieres):
|
| 3 |
+
self.nom = nom
|
| 4 |
+
self.type = type
|
| 5 |
+
self.filieres = filieres
|
| 6 |
+
|
| 7 |
+
def afficher_filieres(self):
|
| 8 |
+
filieres_str = f"Établissement: {self.nom} ({self.type})\n"
|
| 9 |
+
for filiere in self.filieres:
|
| 10 |
+
filieres_str += f" - {filiere.nom}\n"
|
| 11 |
+
return filieres_str
|
filiere.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from debouche import Debouche
|
| 2 |
+
|
| 3 |
+
class Filiere:
|
| 4 |
+
def __init__(self, id, nom, universite, etablissement, serie, matieres, debouches):
|
| 5 |
+
self.id = id
|
| 6 |
+
self.nom = nom
|
| 7 |
+
self.universite = universite
|
| 8 |
+
self.etablissement = etablissement
|
| 9 |
+
self.serie = serie
|
| 10 |
+
self.matieres = matieres
|
| 11 |
+
self.debouches = debouches
|
| 12 |
+
|
| 13 |
+
def afficher_info(self):
|
| 14 |
+
info = (f"Filière: {self.nom}\n"
|
| 15 |
+
f" Identifiant de la filière: {self.id}\n"
|
| 16 |
+
f" Université: {self.universite}\n"
|
| 17 |
+
f" Établissement: {self.etablissement} ({'École' if 'École' in self.etablissement else 'Faculté'})\n"
|
| 18 |
+
f" Série correspondante: {self.serie}\n"
|
| 19 |
+
f" Matières : {', '.join(self.matieres)}\n"
|
| 20 |
+
f" Débouchés :\n")
|
| 21 |
+
for debouche in self.debouches:
|
| 22 |
+
info += debouche.afficher_info()
|
| 23 |
+
return info
|
main.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# main.py
|
| 2 |
+
|
| 3 |
+
from data import coefficients_C, coefficients_D, filieres, students
|
| 4 |
+
from utils import get_student_by_id, calculer_moyennes, calculer_scores_selection, selectionner_meilleures_matieres, afficher_meilleures_matieres, compter_occurrences_meilleures_matieres, selectionner_top_matieres, proposer_filieres
|
| 5 |
+
|
| 6 |
+
# Définir les coefficients et les biais
|
| 7 |
+
coefficients = coefficients_C if students[0].serie == "C" else coefficients_D
|
| 8 |
+
biais = {
|
| 9 |
+
"Mathématiques": 5,
|
| 10 |
+
"Physique-Chimie": 4,
|
| 11 |
+
"Informatique": 3,
|
| 12 |
+
"Français": 2,
|
| 13 |
+
"Philosophie": 1,
|
| 14 |
+
"Anglais": 2
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
# Exemple d'utilisation
|
| 18 |
+
student_id = "E001"
|
| 19 |
+
student = get_student_by_id(students, student_id)
|
| 20 |
+
|
| 21 |
+
# Calculer les moyennes des notes pour chaque matière (hors Baccalauréat)
|
| 22 |
+
moyennes = calculer_moyennes(student.resultats)
|
| 23 |
+
|
| 24 |
+
# Calculer les scores de sélection pour chaque matière
|
| 25 |
+
scores = calculer_scores_selection(moyennes, coefficients, biais)
|
| 26 |
+
|
| 27 |
+
# Sélectionner les trois meilleures matières pour chaque classe
|
| 28 |
+
meilleures_matieres = selectionner_meilleures_matieres(scores)
|
| 29 |
+
|
| 30 |
+
# Afficher les trois meilleures matières pour chaque classe et le Baccalauréat
|
| 31 |
+
afficher_meilleures_matieres(meilleures_matieres, student.resultats["Baccalauréat"])
|
| 32 |
+
|
| 33 |
+
# Sélectionner les quatre meilleures matières
|
| 34 |
+
occurrences = compter_occurrences_meilleures_matieres(meilleures_matieres)
|
| 35 |
+
top_matieres = selectionner_top_matieres(occurrences, biais)
|
| 36 |
+
|
| 37 |
+
# Afficher les quatre meilleures matières
|
| 38 |
+
print("Les quatre meilleures matières durant tout le parcours :")
|
| 39 |
+
for matiere in top_matieres:
|
| 40 |
+
print(f"- {matiere}")
|
| 41 |
+
|
| 42 |
+
# Proposer des filières en fonction des meilleures matières
|
| 43 |
+
propositions = proposer_filieres(top_matieres, filieres, student.serie)
|
| 44 |
+
|
| 45 |
+
# Afficher les propositions de filières
|
| 46 |
+
print("Propositions de filières :")
|
| 47 |
+
for filiere in propositions:
|
| 48 |
+
filiere.afficher_info()
|
student.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class Student:
|
| 2 |
+
def __init__(self, educmaster, prenom, nom, serie, resultats):
|
| 3 |
+
self.educmaster = educmaster
|
| 4 |
+
self.prenom = prenom
|
| 5 |
+
self.nom = nom
|
| 6 |
+
self.serie = serie
|
| 7 |
+
self.resultats = resultats
|
| 8 |
+
|
| 9 |
+
def afficher_moyennes_par_annee(self, coefficients):
|
| 10 |
+
resultats_str = f"Résultats pour {self.prenom} {self.nom} (ID: {self.educmaster}) en Série {self.serie} :\n"
|
| 11 |
+
for annee, matieres in self.resultats.items():
|
| 12 |
+
resultats_str += f"\nAnnée: {annee}\n"
|
| 13 |
+
if annee == "Baccalauréat":
|
| 14 |
+
for matiere, note in matieres.items():
|
| 15 |
+
coef = coefficients.get_coefficient(matiere)
|
| 16 |
+
resultats_str += f"- {matiere} (Coef {coef}): {note}\n"
|
| 17 |
+
else:
|
| 18 |
+
for matiere, moyennes in matieres.items():
|
| 19 |
+
moy_sem1 = moyennes["Semestre 1"]
|
| 20 |
+
moy_sem2 = moyennes["Semestre 2"]
|
| 21 |
+
coef = coefficients.get_coefficient(matiere)
|
| 22 |
+
resultats_str += f"- {matiere} (Coef {coef}): Semestre 1: {moy_sem1}, Semestre 2: {moy_sem2}\n"
|
| 23 |
+
return resultats_str
|
universite.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from etablissement import Etablissement
|
| 2 |
+
|
| 3 |
+
class Universite:
|
| 4 |
+
def __init__(self, nom, etablissements):
|
| 5 |
+
self.nom = nom
|
| 6 |
+
self.etablissements = etablissements
|
| 7 |
+
|
| 8 |
+
def afficher_filieres(self):
|
| 9 |
+
filieres_str = f"Université: {self.nom}\n"
|
| 10 |
+
for etablissement in self.etablissements:
|
| 11 |
+
filieres_str += etablissement.afficher_filieres()
|
| 12 |
+
return filieres_str
|
utils.py
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
def get_student_by_id(students, student_id):
|
| 2 |
+
for student in students:
|
| 3 |
+
if student.educmaster == student_id:
|
| 4 |
+
return student
|
| 5 |
+
return None
|
| 6 |
+
|
| 7 |
+
def calculer_moyennes(resultats):
|
| 8 |
+
moyennes = {}
|
| 9 |
+
for annee, matieres in resultats.items():
|
| 10 |
+
if annee != "Baccalauréat":
|
| 11 |
+
moyennes[annee] = {}
|
| 12 |
+
for matiere, notes in matieres.items():
|
| 13 |
+
moyenne = (notes["Semestre 1"] + notes["Semestre 2"]) / 2
|
| 14 |
+
moyennes[annee][matiere] = moyenne
|
| 15 |
+
return moyennes
|
| 16 |
+
|
| 17 |
+
def calculer_scores_selection(moyennes, coefficients, biais):
|
| 18 |
+
scores = {}
|
| 19 |
+
for annee, matieres in moyennes.items():
|
| 20 |
+
scores[annee] = {}
|
| 21 |
+
for matiere, moyenne in matieres.items():
|
| 22 |
+
coef = coefficients.get_coefficient(matiere)
|
| 23 |
+
score = (moyenne * coef) + moyenne + biais.get(matiere, 0)
|
| 24 |
+
scores[annee][matiere] = score
|
| 25 |
+
return scores
|
| 26 |
+
|
| 27 |
+
def selectionner_meilleures_matieres(scores):
|
| 28 |
+
"""
|
| 29 |
+
Sélectionne les trois meilleures matières pour chaque année, y compris le Baccalauréat.
|
| 30 |
+
|
| 31 |
+
:param scores: Les scores des matières par année.
|
| 32 |
+
:return: Un dictionnaire des meilleures matières par année.
|
| 33 |
+
"""
|
| 34 |
+
meilleures_matieres = {}
|
| 35 |
+
for annee, matieres in scores.items():
|
| 36 |
+
sorted_matieres = sorted(matieres.items(), key=lambda x: x[1], reverse=True)
|
| 37 |
+
meilleures_matieres[annee] = [matiere for matiere, score in sorted_matieres[:3]]
|
| 38 |
+
return meilleures_matieres
|
| 39 |
+
|
| 40 |
+
def compter_occurrences_meilleures_matieres(meilleures_matieres):
|
| 41 |
+
occurrences = {}
|
| 42 |
+
for annee, matieres in meilleures_matieres.items():
|
| 43 |
+
for matiere in matieres:
|
| 44 |
+
if matiere in occurrences:
|
| 45 |
+
occurrences[matiere] += 1
|
| 46 |
+
else:
|
| 47 |
+
occurrences[matiere] = 1
|
| 48 |
+
return occurrences
|
| 49 |
+
|
| 50 |
+
def selectionner_top_matieres(occurrences, biais):
|
| 51 |
+
sorted_occurrences = sorted(occurrences.items(), key=lambda x: (x[1], biais.get(x[0], 0)), reverse=True)
|
| 52 |
+
return [matiere for matiere, count in sorted_occurrences[:4]]
|
| 53 |
+
|
| 54 |
+
def proposer_filieres(top_matieres, filieres, serie):
|
| 55 |
+
propositions = []
|
| 56 |
+
for filiere in filieres:
|
| 57 |
+
if filiere.serie == serie:
|
| 58 |
+
count_best_matieres = sum(1 for matiere in top_matieres if matiere in filiere.matieres)
|
| 59 |
+
propositions.append((filiere, count_best_matieres))
|
| 60 |
+
|
| 61 |
+
propositions_triees = sorted(propositions, key=lambda x: x[1], reverse=True)
|
| 62 |
+
return [filiere for filiere, count in propositions_triees]
|