Skip to content
Extraits de code Groupes Projets
Valider 193ce865 rédigé par Adrien Payen's avatar Adrien Payen
Parcourir les fichiers

ajout de mes codes

parent b49383c4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
import random
import pandas as pd
import os
import statistics
import re
file_path = '/content/Data_Base.xlsx'
data = pd.read_excel(file_path)
page_excel = 'exporter_les_noms.xlsx'
menu = []
Name_pattern = re.compile(r'^[A-Za-zéèêëàâäôöûüçÉÈÊËÀÂÄÔÖÛÜÇ][A-Za-zéèêëàâäôöûüçÉÈÊËÀÂÄÔÖÛÜÇ\'\-]*$')
Date_pattern = re.compile(r'^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{4}$')
Place_of_birth_pattern = re.compile(r'^[A-Za-zÀ-ÖØ-öø-ÿ\s]+$')
Address_pattern = re.compile(r'^[A-Za-z\s]+ \d+, [A-Za-z\s]+$')
Telephone_pattern = re.compile(r'^\d{3}/\d{2}\.\d{2}\.\d{2}$')
Email_pattern = re.compile(r'^[a-zA-Z0-9._%+-]+@student\.uclouvain\.be$')
Genre_pattern = re.compile(r'^[MFO]$')
Academic_year_pattern = re.compile(r'^(BAC[123]|MA[12])$')
Campus_pattern = re.compile(r'^(Louvain-la-Neuve|Mons)$', re.IGNORECASE)
# REGISTER
def enregistrer_eleve(data) :
# mise en place des patterns a respecter pour rentrer les informations
while True:
Name = input("Quel est son nom ? ") # Demander le nom à l'utilisateur
if Name_pattern.match(Name): # Vérifier si le nom correspond au format spécifié
print("Le nom est valide.")
break # Sortir de la boucle si le nom est valide
else:
print("Le nom n'est pas valide. Assurez-vous de suivre le format spécifié.")
while True: # Demander le prénom à l'utilisateur
Surname = input("Quel est son prénom ? ") # Vérifier si le prénom correspond au format spécifié
if Name_pattern.match(Surname):
print("Le prénom est valide.")
break # Sortir de la boucle si le prénom est valide
else:
print("Le prénom n'est pas valide. Assurez-vous de suivre le format spécifié.")
while True:
Date_of_birth = input("Veuillez entrer une date au format jj/mm/yyyy : ")
if Date_pattern.match(Date_of_birth):
print("La date est valide.")
break # Sortir de la boucle si la date est valide
else:
print("La date n'est pas valide. Assurez-vous de suivre le format jj/mm/yyyy.")
while True:
Place_of_birth = input("Quelle est la ville de naissance ? ")
if Place_of_birth_pattern.match(Place_of_birth):
print("La ville de naissance est valide.")
break # Sortir de la boucle si la ville de naissance est valide
else:
print("La ville de naissance n'est pas valide. Assurez-vous d'utiliser uniquement des lettres et des espaces.")
while True:
Address = input("Veuillez entrer une adresse au format 'rue numéro, ville' : ")
if Address_pattern.match(Address):
print("L'adresse est valide.")
break # Sortir de la boucle si l'adresse est valide
else:
print("L'adresse n'est pas valide. Assurez-vous de suivre le format 'rue numéro, ville'.")
while True:
Telephone = input("Quel est son numéro de téléphone ? (à mettre au format 000/00.00.00) ")
if Telephone_pattern.match(Telephone):
print("Le numéro de téléphone est valide.")
break # Sortir de la boucle si le numéro de téléphone est valide
else:
print("Le numéro de téléphone n'est pas valide. Assurez-vous de suivre le format demandé.")
while True:
Email = input("Entrez l'email de l'université (@student.uclouvain.be) : ")
if Email_pattern.match(Email):
print("L'email est valide.")
break # Sortir de la boucle si l'email est valide
else:
print("L'email n'est pas valide. Assurez-vous de suivre le format demandé.")
while True:
Genre = input("Quel est votre sexe ? (Pour Homme entrez M, pour Femme entrez F, et pour un autre type entrez O) : ")
if Genre_pattern.match(Genre):
print("Le genre est valide.")
break # Sortir de la boucle si le genre est valide
else:
print("Le genre n'est pas valide. Assurez-vous de suivre le format demandé.")
while True:
Academic_year = input("Quelle est votre année académique ? (BAC1/BAC2/BAC3/MA1/MA2) : ")
if Academic_year_pattern.match(Academic_year):
print("L'année académique est valide.")
break # Sortir de la boucle si l'année académique est valide
else:
print("L'année académique n'est pas valide. Assurez-vous de suivre le format demandé.")
Courses_and_grade = {}
if Academic_year == 'MA2':
for cours in coursBAC1 + coursBAC2 + coursBAC3 + coursMA1 + coursMA2 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'MA1':
for cours in coursBAC1 + coursBAC2 + coursBAC3 + coursMA1 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'BAC3':
for cours in coursBAC1 + coursBAC2 + coursBAC3 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'BAC2':
for cours in coursBAC1 + coursBAC2 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'BAC1':
for cours in coursBAC1 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
while True:
Campus = input("Entrez 'Louvain-la-Neuve' ou 'Mons' en fonction du campus : ")
if Campus_pattern.match(Campus):
print("Le choix du campus est valide.")
break # Sortir de la boucle si le choix du campus est valide
else:
print("Le choix du campus n'est pas valide. Assurez-vous de suivre le format demandé.")
enregistrer(data,Name, Surname, Date_of_birth, Place_of_birth, Address, Telephone, Email, Genre, Academic_year, Courses_and_grade, Campus)
def enregistrer(data, Name, Surname, Date_of_Birth, Place_of_Birth, Address, Telephone, Email, Genre, Academic_year, Courses_and_grade, Campus):
Matricule = generer_matricule(Name, Surname, Date_of_Birth)
etudiant = {
"Name": Name,
"Surname": Surname,
"Date of Birth": Date_of_Birth,
"Place of Birth": Place_of_Birth,
"Address": Address,
"Telephone": Telephone,
"Email": Email,
"Genre": Genre,
"Academic Year": Academic_year,
"Campus": Campus,
"Matricule": Matricule
}
for cours, note in Courses_and_grade.items():
etudiant[cours] = note
data = pd.concat([data, etudiant], ignore_index=True)
data.to_excel(file_path, index=False)
print('La personne a été enregistrée.\n')
return
def generer_matricule(Name, Surname, Date_of_birth) :
consonnes_nom = ''.join([c for c in Name if c.lower() not in 'aeiouy'])[:3]
consonnes_prenom = ''.join([c for c in Surname if c.lower() not in 'aeiouy'])[:2]
derniere_consonne_nom = ''.join([c for c in Surname if c.lower() not in 'aeiouy']).lower()[-1] # ne sait pas si c'est la consonne du prénom ou du nom
annee_naissance_str = str(Date_of_birth)[-2:]
entier_aleatoire = random.randint(0, 10)
matricule_e = f"{consonnes_nom}{consonnes_prenom}{derniere_consonne_nom}{annee_naissance_str}{entier_aleatoire}"
matricule_e = matricule_e.lower()
return matricule_e
# MODIFY
def modifier(data) : # il faudrait pouvoir modifier plusieurs champs sans soucis et ne pas remttre le matricule une fois rentrer
# matricule ne peut être modifié, il est unique donc je me base sur cela.
while True :
data_to_modify = input("Entrez le matricule de l'étudiant que vous souhaitez modifier (ou 'q pour quitter) : ")
if data_to_modify.lower() == 'q' :
print("Opération annulée.")
break
student_index = data[data['Matricule'] == data_to_modify.lower()].index.tolist()
if not student_index :
print("Aucun étudiant n'a été trouvé avec le matricule que vous avez spécifié.")
return
student_index = student_index[0]
print(f"\nModification de l'étudiant avec le matricule {data_to_modify} :\n")
print("1. Name")
print("2. Surname")
print("3. Date of Birth")
print("4. Place of Birth")
print("5. Address")
print("6. Telephone")
print("7. Email")
print("8. Sex (M | F | O)")
print("9. Academic Year")
print("10. Curriculum")
print("11. Courses already passed and their grade")
print("12. Campus")
field_to_modify = int(input("Entrez le numéro du champ que vous souhaitez modifier : "))
field_name_to_modify = field_mapping.get(field_to_modify, None)
print(f"Vous modifiez le champ : {field_name_to_modify}")
if field_to_modify == 1: # Si le champ à modifier est le nom (Name)
while True:
Name = input("Quel est le nom que vous voulez modifier ? ")
if Name_pattern.match(Name):
print("Le nom est valide.")
# Ajoutez ici le code pour mettre à jour le champ dans vos données
break # Sortir de la boucle si le nom est valide
else:
print("Le nom n'est pas valide. Assurez-vous de suivre le format spécifié.")
elif field_to_modify == 2:
while True: # Demander le prénom à l'utilisateur
Surname = input("Quel est son prénom ? ") # Vérifier si le prénom correspond au format spécifié
if Name_pattern.match(Surname):
print("Le prénom est valide.")
break # Sortir de la boucle si le prénom est valide
else:
print("Le prénom n'est pas valide. Assurez-vous de suivre le format spécifié.")
elif field_to_modify == 3 :
while True:
Date_of_birth = input("Veuillez entrer une date au format jj/mm/yyyy : ")
if Date_pattern.match(Date_of_birth):
print("La date est valide.")
break # Sortir de la boucle si la date est valide
else:
print("La date n'est pas valide. Assurez-vous de suivre le format jj/mm/yyyy.")
elif field_to_modify == 4 :
while True:
Place_of_birth = input("Quelle est la ville de naissance ? ")
if Place_of_birth_pattern.match(Place_of_birth):
print("La ville de naissance est valide.")
break # Sortir de la boucle si la ville de naissance est valide
else:
print("La ville de naissance n'est pas valide. Assurez-vous d'utiliser uniquement des lettres et des espaces.")
elif field_to_modify == 5 :
while True:
Address = input("Veuillez entrer une adresse au format 'rue numéro, ville' : ")
if Address_pattern.match(Address):
print("L'adresse est valide.")
break # Sortir de la boucle si l'adresse est valide
else:
print("L'adresse n'est pas valide. Assurez-vous de suivre le format 'rue numéro, ville'.")
elif field_to_modify == 6 :
while True:
Telephone = input("Quel est son numéro de téléphone ? (à mettre au format 000/00.00.00) ")
if Telephone_pattern.match(Telephone):
print("Le numéro de téléphone est valide.")
break # Sortir de la boucle si le numéro de téléphone est valide
else:
print("Le numéro de téléphone n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 7 :
while True:
Email = input("Entrez l'email de l'université (@student.uclouvain.be) : ")
if Email_pattern.match(Email):
print("L'email est valide.")
break # Sortir de la boucle si l'email est valide
else:
print("L'email n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 8 :
while True:
Genre = input("Quel est votre sexe ? (Pour Homme entrez M, pour Femme entrez F, et pour un autre type entrez O) : ")
if Genre_pattern.match(Genre):
print("Le genre est valide.")
break # Sortir de la boucle si le genre est valide
else:
print("Le genre n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 9 :
while True:
Academic_year = input("Quelle est votre année académique ? (BAC1/BAC2/BAC3/MA1/MA2) : ")
if Academic_year_pattern.match(Academic_year):
print("L'année académique est valide.")
break # Sortir de la boucle si l'année académique est valide
else:
print("L'année académique n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 11: # Courses and grades
print("Courses already passed and their grade:\n")
for course, grade in data.iloc[student_index].items():
if course not in field_mapping.values():
print(f"{course}: {grade}")
while True:
course_to_modify = input("Entrez le cours que vous souhaitez modifier : ")
if course_to_modify in data.columns: # Le cours a été trouvé, vous pouvez continuer avec le reste de votre code
print("Le cours spécifié a été trouvé.") # Ajoutez ici le reste de votre code pour traiter le cours
break # Sortir de la boucle puisque le cours a été trouvé
else:
print("Le cours spécifié n'a pas été trouvé. Veuillez en sélectionner un nouveau.")
new_grade = input(f"Entrez la nouvelle note pour {course_to_modify} : ")
while not new_grade.isdigit() or int(new_grade) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
new_grade = input(f"Entrez la nouvelle note pour {course_to_modify} : ")
# Update the grade
data.at[student_index, course_to_modify] = int(new_grade)
elif field_to_modify == 12 :
while True:
Campus = input("Entrez 'Louvain-la-Neuve' ou 'Mons' en fonction du campus : ")
if Campus_pattern.match(Campus):
print("Le choix du campus est valide.")
break # Sortir de la boucle si le choix du campus est valide
else:
print("Le choix du campus n'est pas valide. Assurez-vous de suivre le format demandé.")
else:
new_value = input(f"Entrez la nouvelle valeur pour le champ sélectionné : ")
data.at[student_index, field_mapping[field_to_modify]] = new_value
# Save the modified data to the Excel file
data.to_excel(file_path, index=False)
print("Modification effectuée avec succès.")
# Mapping for field names to DataFrame column names
field_mapping = {
1: 'Name',
2: 'Surname',
3: 'Date of Birth',
4: 'Place of Birth',
5: 'Address',
6: 'Telephone',
7: 'Email',
8: 'Genre',
9: 'Academic Year',
10: 'Curriculum',
12: 'Campus'
}
# DELETE
def supprimer(data):
matricule_to_delete = input("Entrez le matricule de l'étudiant que vous souhaitez supprimer : ")
student_index = data[data['Matricule'] == matricule_to_delete.lower()].index.tolist()
if not student_index:
print("Aucun étudiant n'a été trouvé avec le matricule que vous avez spécifié.")
return
student_index = student_index[0]
print(f"\nSuppression de l'étudiant avec le matricule {matricule_to_delete} :\n")
# Afficher les détails de l'étudiant avant la suppression
print("Détails de l'étudiant avant suppression :")
print(data.iloc[student_index])
confirmation = input("Voulez-vous vraiment supprimer cet étudiant ? (OUI/NON) ").upper()
if confirmation == "OUI":
# Supprimer l'étudiant
data = data.drop(index=student_index)
# Sauvegarder les données modifiées dans le fichier Excel
data.to_excel(file_path, index=False)
print("Suppression effectuée avec succès.")
else:
print("Suppression annulée.")
# FIND
def trouver_etudiant(data):
critere_recherche = input("Entrez le critère de recherche (Nom/Prénom/Matricule) : ").capitalize()
if critere_recherche == "Nom":
nom_recherche = input("Entrez le nom de l'étudiant : ")
resultats = data[data['Name'].str.contains(nom_recherche, case=False, na=False)]
elif critere_recherche == "Prénom":
prenom_recherche = input("Entrez le prénom de l'étudiant : ")
resultats = data[data['Surname'].str.contains(prenom_recherche, case=False, na=False)]
elif critere_recherche == "Matricule":
matricule_recherche = input("Entrez le matricule de l'étudiant : ")
resultats = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
else:
print("Critère de recherche invalide.")
return
if resultats.empty:
print("Aucun étudiant trouvé avec les critères spécifiés.")
else:
print("Étudiant(s) trouvé(s) :")
for index, row in resultats.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
# SHOW
def filtrer(data):
if data.empty:
print("La liste des étudiants est vide.")
else:
print("\nListe des étudiants :")
for index, row in data.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
# Utilisation de la fonction exporter_liste_etudiants_filtree_excel
# exporter_liste_etudiants_filtree_excel(data, 'liste_etudiants_filtree.xlsx')
"""
print('Pour Filtrer les élèves, entrez SCREEN')
print('Pour exporter la liste en document excel, entrez EXPORT')
print('Pour lire la liste, entrez READ')
montre = input("")
if montre == "SCREEN" :
filtrer(data)
elif montre == "EXPORT" :
exporter(data)
elif montre == "READ" :
lire(data)
"""
def show(data):
a = input("Voulez-vous voir la liste des étudiants ? OUI/NON")
if a == "OUI" :
for index, row in data.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
b = input("Voulez-vous exporter la liste ? OUI/NON")
if b == "OUI" :
try:
data.to_excel(page_excel, index=False)
print(f"La liste des étudiants a été exportée avec succès vers {page_excel}.")
except Exception as e:
print(f"Erreur lors de l'exportation vers Excel : {e}")
c = input("Voulez-vous lire la liste exportée ? OUI/NON")
if c == "OUI" :
try:
os.system(f"start excel {page_excel}")
except Exception as e:
print(f"Erreur lors de l'ouverture du fichier Excel : {e}")
return ouvrir_excel(page_excel)
return
return
return
def ouvrir_excel(page_excel):
try:
os.system(f"start excel {page_excel}")
except Exception as e:
print(f"Erreur lors de l'ouverture du fichier Excel : {e}")
# SORTING
def trier(data) :
print('1. Trier par ordre alphabétique croissant')
print('2. Trier par ordre alphabétique décroissant')
print('3. Trier par date de naissance')
print('4. Trier par age')
print('5. Trier par matricule')
print('6. Trier par année académique')
print('7. Obtenir toutes les personnes qui ont réussi un cours')
print('8. Obtenir toutes les personnes qui ont raté le cours')
print('9. Obtenir tous les étudiants de bachelier')
print('10. Obtenir tous les étudiants de master')
sorting = input("")
if sorting == "1" :
tri_asc(data)
elif sorting == "2" :
tri_desc(data)
elif sorting == "3" :
tri_date(data)
elif sorting == "4" :
tri_age(data)
elif sorting == "5" :
tri_matricule(data)
elif sorting == "6" :
tri_annee(data)
elif sorting == "7" :
tri_reussi(data)
elif sorting == "8" :
tri_rate(data)
elif sorting == "9" :
tri_bac(data)
elif sorting == "10" :
tri_master(data)
return
def tri_asc(data):
if 'Name' not in data.columns:
print("La colonne 'Name' n'existe pas dans le DataFrame.")
return
# Trier le DataFrame par la colonne 'Name'
data_trie = data.sort_values(by='Name', ascending=True)
# Afficher la liste triée
print("\nListe des étudiants triée par ordre alphabétique (croissant) :")
for index, row in data_trie.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
# Exemple d'utilisation
# Remplacez 'data' par le nom de votre DataFrame
#STATS
def stats(data):
print('1. Avoir les statistiques de bases')
print('2. Avoir toutes les notes des étudiants')
print('3. Avoir toutes les notes des étudiants dans un cours')
print('4. Exporter toutes les statistiques')
while True:
stats = input("Entrez le numéro de ce que vous voulez faire : ") # Vérifier si la commande est un entier
if stats.isdigit(): # Convertir la commande en entier
stats_int = int(stats) # Vérifier si la commande est entre 1 et 8
if 1 <= stats_int <= 8:
print("La commande est valide.")
break # Sortir de la boucle si la commande est valide
else:
print("La commande doit être comprise dans celles proposées.")
if stats == "1" :
stats_base(data)
elif stats == "2" :
stats_grade(data)
elif stats == "3" :
stats_cours(data)
elif stats == "4" :
stats_export(data)
def stats_base(data):
critere_recherche = input("Entrez le critère de recherche des statistiques de l'étudiant (Nom/Prénom/Matricule) : ").capitalize()
if critere_recherche == "Nom":
nom_recherche = input("Entrez le nom de l'étudiant : ")
resultats = data[data['Name'].str.contains(nom_recherche, case=False, na=False)]
elif critere_recherche == "Prénom":
prenom_recherche = input("Entrez le prénom de l'étudiant : ")
resultats = data[data['Surname'].str.contains(prenom_recherche, case=False, na=False)]
elif critere_recherche == "Matricule":
matricule_recherche = input("Entrez le matricule de l'étudiant : ")
resultats = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
else:
print("Critère de recherche invalide.")
return
notes_columns = resultats.select_dtypes(include=['number']).columns
for index, row in resultats.iterrows():
student_name = f"{row['Name']} {row['Surname']}"
student_notes = [row[column] for column in notes_columns if not pd.isnull(row[column])]
if student_notes:
lowest_grade = min(student_notes)
highest_grade = max(student_notes)
average_grade = statistics.mean(student_notes)
median_grade = statistics.median(student_notes)
std_deviation = statistics.stdev(student_notes)
print(f"\nStatistiques pour l'étudiant {student_name}:")
print(f"Note la plus basse : {lowest_grade}")
print(f"Note la plus élevée : {highest_grade}")
print(f"Moyenne des notes : {average_grade}")
print(f"Médiane des notes : {median_grade}")
print(f"Écart-type des notes : {std_deviation}")
else:
print(f"\nAucune note trouvée pour l'étudiant {student_name}.")
def stats_grade(data):
critere_recherche = input("Entrez le critère de recherche des statistiques de l'étudiant (Nom/Prénom/Matricule) : ").capitalize()
if critere_recherche == "Nom":
nom_recherche = input("Entrez le nom de l'étudiant : ")
resultats = data[data['Name'].str.contains(nom_recherche, case=False, na=False)]
elif critere_recherche == "Prénom":
prenom_recherche = input("Entrez le prénom de l'étudiant : ")
resultats = data[data['Surname'].str.contains(prenom_recherche, case=False, na=False)]
elif critere_recherche == "Matricule":
matricule_recherche = input("Entrez le matricule de l'étudiant : ")
resultats = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
else:
print("Critère de recherche invalide.")
return
etudiant = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
if etudiant.empty:
print(f"Aucun étudiant trouvé avec le matricule {matricule_recherche}.")
return
# Sélection des colonnes contenant les notes
colonnes_notes = etudiant.select_dtypes(include=['number']).columns
# Affichage des notes de l'étudiant
print(f"Notes de l'étudiant avec le matricule {matricule_recherche} :")
for colonne in colonnes_notes:
if not pd.isnull(etudiant[colonne].values[0]):
print(f"{colonne}: {etudiant[colonne].values[0]}")
def stats_cours(data):
colonnes_numeriques = data.select_dtypes(include=['number']).columns.tolist()
print("Voici la liste des cours : ")
for colonne in colonnes_numeriques:
print(colonne)
# Vérifier si le cours existe dans les colonnes du DataFrame
nom_cours = input(print("Pour quel cours voulez-vous afficher les notes ?"))
if nom_cours not in data.columns:
print(f"Le cours spécifié ({nom_cours}) n'a pas été trouvé.")
return
# Filtrer les étudiants qui ont participé à ce cours (note non nulle)
etudiants_cours = data[data[nom_cours].notnull()]
if etudiants_cours.empty:
print(f"Aucun étudiant n'a participé au cours {nom_cours}.")
return
# Afficher les notes des étudiants pour le cours spécifié
print(f"Notes des étudiants pour le cours {nom_cours} :")
for index, row in etudiants_cours.iterrows():
print(f"Matricule: {row['Matricule']}, Note: {row[nom_cours]}")
def stats_export(data) :
return
# Exemple d'utilisation
# Assurez-vous que vous avez déjà défini et chargé votre DataFrame 'data' avant d'appeler cette fonction
# Remplacez 'Nom_du_Cours' par le nom réel du cours que vous recherchez
# afficher_notes_cours(data, 'Nom_du_Cours')
# Action
def action() :
print("Que voulez-vous faire ?\n Ci-dessous, vous trouverez ce qu'il est possible de faire suivi des commandes à taper.\n")
print("1. Inscrire un étudiant")
print("2. Modifier un ou plusieurs champs")
print("3. Supprimer un élève")
print("4. Trouver un élève")
print("5. Voir")
print("6. Trier, montrer ou exporter la liste")
print("7. Voir les statistiques")
print("8. Arreter le programme")
while True:
commande = input("Entrez le numéro de ce que vous voulez faire : ") # Vérifier si la commande est un entier
if commande.isdigit(): # Convertir la commande en entier
commande_int = int(commande) # Vérifier si la commande est entre 1 et 8
if 1 <= commande_int <= 8:
print("La commande est valide.")
break # Sortir de la boucle si la commande est valide
else:
print("La commande doit être comprise dans celles proposées.")
if commande == "1" :
enregistrer_eleve(data)
elif commande == "2" :
modifier(data)
elif commande == "3" :
supprimer(data)
elif commande == "4" :
trouver_etudiant(data)
elif commande == "5" :
show(data)
elif commande == "6" :
trier(data)
elif commande == "7" :
stats(data)
elif commande == "8" :
return False
menu = []
while True:
rep = action()
if rep is False:
break
else:
if rep == True:
menu = []
else:
menu.append(rep)
import pandas as pd
import random
# Liste de noms et prénoms
noms = ['Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor',
'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson',
'Clark', 'Rodriguez', 'Lewis', 'Lee', 'Walker', 'Hall', 'Allen', 'Young', 'Hernandez', 'King',
'Wright', 'Lopez', 'Hill', 'Scott', 'Green', 'Adams', 'Baker', 'Gonzalez', 'Nelson', 'Carter',
'Mitchell', 'Perez', 'Roberts', 'Turner', 'Phillips', 'Campbell', 'Parker', 'Evans', 'Edwards', 'Collins',
'Stewart', 'Sanchez', 'Morris', 'Rogers', 'Reed', 'Cook', 'Morgan', 'Bell', 'Murphy', 'Bailey',
'Rivera', 'Cooper', 'Richardson', 'Cox', 'Howard', 'Ward', 'Torres', 'Peterson', 'Gray', 'Ramirez',
'James', 'Watson', 'Brooks', 'Kelly', 'Sanders', 'Price', 'Bennett', 'Wood', 'Barnes', 'Ross',
'Henderson', 'Coleman', 'Jenkins', 'Perry', 'Powell', 'Long', 'Patterson', 'Hughes', 'Flores', 'Washington',
'Butler', 'Simmons', 'Foster', 'Gonzales', 'Bryant', 'Alexander', 'Russell', 'Griffin', 'Diaz', 'Hayes',
'Myers', 'Ford', 'Hamilton', 'Graham', 'Sullivan', 'Wallace', 'Woods', 'Cole', 'West', 'Jordan',
'Owens', 'Reynolds', 'Fisher', 'Ellis', 'Harrison', 'Gibson', 'McDonald', 'Cruz', 'Marshall', 'Ortiz',
'Gomez', 'Murray', 'Freeman', 'Wells', 'Webb', 'Simpson', 'Stevens', 'Tucker', 'Porter', 'Hunter',
'Hicks', 'Crawford', 'Henry', 'Boyd', 'Mason', 'Morales', 'Kennedy', 'Warren', 'Dixon', 'Ramos',
'Reyes', 'Burns', 'Gordon', 'Shaw', 'Holmes', 'Rice', 'Robertson', 'Hunt', 'Black', 'Daniels',
'Palmer', 'Mills', 'Nichols', 'Grant', 'Knight', 'Ferguson', 'Rose', 'Stone', 'Hawkins', 'Dunn',
'Perkins', 'Hudson', 'Spencer', 'Gardner', 'Stephens', 'Payne', 'Pierce', 'Berry', 'Matthews', 'Arnold',
'Wagner', 'Willis', 'Ray', 'Watkins', 'Olson', 'Carroll', 'Duncan', 'Snyder', 'Hart', 'Cunningham',
'Bradley', 'Lane', 'Andrews', 'Ruiz', 'Harper', 'Fox', 'Riley', 'Armstrong', 'Carpenter', 'Weaver',
'Greene', 'Lawrence', 'Elliott', 'Chavez', 'Sims', 'Austin', 'Peters', 'Kelley', 'Franklin', 'Lawson',
'Fields', 'Gutierrez', 'Ryan', 'Schmidt', 'Carr', 'Vasquez', 'Castillo', 'Wheeler', 'Chapman', 'Oliver',
'Montgomery', 'Richards', 'Williamson', 'Johnston', 'Banks', 'Meyer', 'Bishop', 'McCoy', 'Howell', 'Alvarez',
'Morrison', 'Hansen', 'Fernandez', 'Garza', 'Harvey', 'Little', 'Burton', 'Stanley', 'Nguyen', 'George',
'Jacobs', 'Reid', 'Kim', 'Fuller', 'Lynch', 'Dean', 'Gilbert', 'Garrett', 'Romero', 'Welch']
prenoms = ['Emma', 'Liam', 'Olivia', 'Noah', 'Ava', 'Isabella', 'Sophia', 'Jackson', 'Mia', 'Lucas',
'Aiden', 'Ethan', 'Luna', 'Mason', 'Harper', 'Evelyn', 'Oliver', 'Aria', 'Amelia', 'Caden',
'Grayson', 'Charlotte', 'Chloe', 'Ella', 'Sebastian', 'Carter', 'Abigail', 'Scarlett', 'Madison',
'Lily', 'Avery', 'Ella', 'Aubrey', 'Mila', 'Layla', 'Riley', 'Zoe', 'Sofia', 'Jackson', 'Liam',
'Leah', 'Zoe', 'Henry', 'Gabriel', 'Grace', 'Hannah', 'Mila', 'Alexa', 'Eva', 'Liam', 'Mia',
'Logan', 'Benjamin', 'Emily', 'Nora', 'Elijah', 'Lucy', 'Owen', 'Elizabeth', 'Stella', 'Levi',
'William', 'Lily', 'Zoey', 'Parker', 'Brooklyn', 'Samuel', 'Luke', 'Madelyn', 'Eleanor', 'Nathan',
'Isaac', 'Ryan', 'Ariana', 'Addison', 'Scarlett', 'Julian', 'Natalie', 'Victoria', 'Adam', 'Alexis',
'Aaron', 'Aaliyah', 'Robert', 'Samantha', 'Christopher', 'Hazel', 'Serenity', 'Jordan', 'Leah', 'Chase',
'Lillian', 'Liam', 'Skylar', 'Bella', 'Zachary', 'Caleb', 'Tyler', 'Connor', 'Eli', 'Aaliyah',
'Ezekiel', 'Eva', 'Landon', 'Grace', 'Makayla', 'Nicholas', 'Natalie', 'Nathan', 'Avery', 'Cameron',
'Hudson', 'Violet', 'Claire', 'Gavin', 'Eva', 'Zachary', 'Alexa', 'Brooklyn', 'Kylie', 'Peyton',
'Emma', 'John', 'Aubrey', 'Carter', 'Mila', 'Elena', 'Paisley', 'Grayson', 'Hailey', 'Elijah',
'Ellie', 'Julian', 'Adrian', 'Aria', 'Liliana', 'Bentley', 'Kinsley', 'Savannah', 'Eliana', 'Sofia',
'Liam', 'Ella', 'Evelyn', 'Avery', 'Austin', 'Scarlett', 'Leah', 'Aiden', 'Audrey', 'Amelie',
'Julian', 'Mila', 'Olivia', 'Anthony', 'Caleb', 'Zoe', 'Autumn', 'Samantha', 'Aria', 'Cooper',
'Eva', 'Charlie', 'Madison', 'Landon', 'Penelope', 'Kaylee', 'Lily', 'Ryder', 'Hannah', 'Maya',
'Christopher', 'Eleanor', 'Levi', 'Aubree', 'Emma', 'Sofia', 'Evan', 'Ella', 'Gabriel', 'Zachary',
'Taylor', 'Liam', 'Makayla', 'Zoe', 'Oliver', 'Isaiah', 'Brooklyn', 'Lily', 'Victoria', 'Cameron',
'Madison', 'Eva', 'Gabriel', 'Zoe', 'Brooklyn', 'Sophie', 'Ella', 'Logan', 'Madison', 'Julian',
'Alexis', 'Landon', 'Grace', 'Lucas', 'Aria', 'Aaliyah', 'Adrian', 'Riley', 'Nora', 'Isabella',
'Eva', 'Layla', 'Aiden', 'Amelia', 'Chloe', 'Levi', 'Lillian', 'Liam', 'Zoey', 'Hazel', 'Carter',
'Grace', 'Peyton', 'Julian', 'Eliana', 'Eva', 'Harper', 'Henry', 'Olivia', 'Lily', 'Liam', 'Abigail']
annees = ['BAC1', 'BAC2', 'BAC3', 'MA1', 'MA2']
place_of_birth = ['Mons', 'Charleroi', 'Tournai', 'La Louvière', 'Namur', 'Nivelles', 'Wavre', "Braine-l'Alleud", 'Waterloo', 'Louvain-la-Neuve',
'Soignies', 'Thuin', 'Binche', 'Ath', 'Enghien', 'Jodoigne', 'Gembloux', 'Fleurus', 'Sambreville', 'Châtelet',
'Marche-en-Famenne', 'Dinant', 'Ciney', 'Philippeville', 'Huy', 'Andenne', 'Ottignies-Louvain-la-Neuve', 'Hannut', 'Waremme', 'Fosses-la-Ville',
'Tubize', 'Nivelles', 'Genappe', 'Jodoigne', 'Ottignies', 'La Hulpe', 'Court-Saint-Étienne', 'Rebecq', 'Wavre', 'Waterloo',
'Lasne', 'Rixensart', 'Rosières', 'Ittre', 'Braine-le-Château', 'Chaumont-Gistoux', 'Walhain', 'Mont-Saint-Guibert', 'Beauvechain', 'Hélécine']
noms_rues = ['Rue de la Liberté', 'Avenue des Roses', 'Chaussée de Bruxelles', 'Rue du Commerce', 'Avenue du Parc', 'Rue Saint-Pierre', 'Chemin des Cerisiers', 'Boulevard des Étoiles', 'Avenue de la Gare', 'Rue des Champs',
'Chaussée de Namur', 'Rue de la Paix', 'Avenue des Lilas', 'Rue de la Fontaine', 'Chemin du Moulin', 'Boulevard des Arts', 'Avenue des Mésanges', 'Rue des Orangers', 'Chaussée de Liège', 'Rue de l\'Église',
'Avenue du Lac', 'Rue des Violettes', 'Chemin des Peupliers', 'Boulevard de la Mer', 'Rue des Platanes', 'Avenue des Acacias', 'Chaussée de Mons', 'Rue de la Rivière', 'Avenue du Soleil', 'Rue des Écoles',
'Chemin des Pommiers', 'Boulevard des Montagnes', 'Rue des Trois Fontaines', 'Avenue des Cèdres', 'Chaussée de Charleroi', 'Rue du Théâtre', 'Boulevard des Papillons', 'Rue des Primevères', 'Avenue des Charmes', 'Chemin des Saules',
'Rue du Palais', 'Avenue de la Plage', 'Chaussée de Waterloo', 'Rue des Amandiers', 'Boulevard du Jardin', 'Avenue des Coquelicots', 'Rue des Moulins', 'Chemin des Roses', 'Boulevard de la Forêt', 'Rue des Iris']
genre = ['M', 'F', 'O']
campus_loc = ["Louvain-la-Neuve", "Mons"]
coursBAC1 = ("Anglais 1", "Fondements du droit public", "Fondements du droit de l'entreprise", "Economie", "Espagnol 1", "Comptabilité", "Informatique de gestion", "Mathématiques de gestion 1", "Statistiques et probabilités", "Pilosophie", "Psychologie", "Sociologie", "Séminaire de travail universitaire en gestion")
coursBAC2 = ("Anglais 2", "Droit de l'entreprise", "Macroéconomie", "Microéconomie", "Espagnol 2", "Marketing", "Production", "Informatique et algorithmique", "Finance", "Inférences statistiques", "Mathématiques de gestion 2", "Technologies industrielles")
coursBAC3 = ("Anglais 3", "Economie industrielle", "Espagnol 3", "Séminaire : organisations et transformation digitale", "Management humain", "Projet entrepreneurial", "Comptabilité et contrôle de gestion", "Gestion de données", "Coding project", "Econométrie", "Recherche opérationnelle", "Optimization", "Séminaire : organisation et mutations sociales", "Questions de sciences religieuses")
coursMA1 = ("Advanced English 1", "Español avanzado 1", "Data analytics", "Projet quantitatif et gestion de projet", "Data Mining", "Nouvelles technologies et pratiques émergentes", "Web mining", "Machine learning", "Quantitative Decision Making", "Recommender Systems", "Pilotage stratégique de l'entreprise", "Séminaire on Current Managerial Issues")
coursMA2 = ("Advanced English 2", "Español avanzado 1", "Responsabilité sociétale de l'entreprise","Integrated Information Systems", "Mémoire", "Séminaire d'accompagnement du mémoire")
# Générer des combinaisons aléatoires de noms et prénoms pour plus de 1000 personnes
donnees = []
for _ in range(100): # générer des données
# nom de la personnes
nom = random.choice(noms)
# prenom de la personnes
prenom = random.choice(prenoms)
# année de cours
annee = random.choice(annees)
# ville de naissance de la personne
ville_naissance = random.choice(place_of_birth)
# attribuer un numero de téléphone à la personne
numero_tel = []
n = f"{random.randint(10000000, 99999999):08d}"
if n not in numero_tel :
numero_tel.append(n)
numero = f"0{n[:2]}/{n[2:4]}.{n[4:6]}.{n[6:]}"
# endroit où habite la personne
commune = random.choice(place_of_birth)
rue = random.choice(noms_rues)
numero_maison = random.randint(1, 200)
adresse = f"{rue} {numero_maison}, {commune}"
#attribution du sexe d'une personne
genre_de_personne = random.choice(genre)
#email de la personne
email = f"{nom}{'.'}{prenom}{'@student.uclouvain.be'}"
email_format = email.lower()
#attribution des campus aux élèves
campus = random.choice(campus_loc)
# date de naissance sachant que l'on est en 2023 donc qqn de 17 ans ne peut pas se trouver en master
if annee == 'BAC1':
annee_naiss = 2005
elif annee == 'BAC2':
annee_naiss = 2004
elif annee == 'BAC3':
annee_naiss = 2003
elif annee == 'MA1':
annee_naiss = 2002
else:
annee_naiss = 2001
mois_naiss = random.randint(1, 12)
jour_naiss = random.randint(1, 28)
annee_de_naissance = f"{jour_naiss}/{mois_naiss}/{annee_naiss}"
# attribution du matricule
consonnes_nom = ''.join([c for c in nom if c.lower() not in 'aeiou'])[:3]
consonnes_prenom = ''.join([c for c in prenom if c.lower() not in 'aeiou'])[:2]
derniere_consonne_nom = ''.join([c for c in prenom if c.lower() not in 'aeiou']).lower()[-1] # ne sait pas si c'est la consonne du prénom ou du nom
annee_naissance_str = str(annee_naiss)[-2:]
entier_aleatoire = random.randint(0, 10)
matricule = f"{consonnes_nom}{consonnes_prenom}{derniere_consonne_nom}{annee_naissance_str}{entier_aleatoire}"
matricule = matricule.lower()
#attribution des notes aléatoirement
notes = {}
if annee == 'MA2':
for cours in coursBAC1 + coursBAC2 + coursBAC3 + coursMA1:
notes[cours] = random.randint(10, 20) # l'éléve a dû réussir ces cours pour pouvoir avoir acces en MA2
for cours in coursMA2 :
notes[cours] = random.randint(0, 20) # l'éléve pourrait avoir eu entre 0 et 20
elif annee == 'MA1':
for cours in coursBAC1 + coursBAC2 + coursBAC3 :
notes[cours] = random.randint(10, 20)
for cours in coursMA1 :
notes[cours] = random.randint(0, 20)
elif annee == 'BAC3':
for cours in coursBAC1 + coursBAC2 :
notes[cours] = random.randint(10, 20)
for cours in coursBAC3 :
notes[cours] = random.randint(0, 20)
elif annee == 'BAC2':
for cours in coursBAC1 :
notes[cours] = random.randint(10, 20)
for cours in coursBAC2 :
notes[cours] = random.randint(0, 20)
else:
for cours in coursBAC1:
notes[cours] = random.randint(0, 20)
donnees.append({"Name": nom, "Surname": prenom, "Academic Year" : annee, "Place of Birth" : ville_naissance, "Telephone": numero, "Address": adresse, "Genre" : genre_de_personne, "Email" : email_format, "Campus" : campus, "Date of Birth" : annee_de_naissance, "Matricule" : matricule, **notes})
# génération de données qui ne peuvent pas se ressembler
# Créer un DataFrame pandas
df = pd.DataFrame(donnees)
# Enregistrer le DataFrame dans un fichier Excel
df.to_excel("Data_Base.xlsx", index=False)
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter