From b40df15de82825bbdedf8b3a5ff9ab4a78ac4a91 Mon Sep 17 00:00:00 2001
From: Dahmane Lynda <lynda.dahmane.etu@118p28.fil.univ-lille.fr>
Date: Wed, 7 Feb 2024 09:03:38 +0100
Subject: [PATCH] pour_tous

---
 Tp4/etudiants.zip              | Bin 0 -> 13011 bytes
 Tp4/etudiants/apl1test.py      |  89 +++++
 Tp4/etudiants/date.py          | 204 +++++++++++
 Tp4/etudiants/etudiant.py      |  84 +++++
 Tp4/etudiants/etudiants.csv    | 604 +++++++++++++++++++++++++++++++++
 Tp4/gestion_promo_etudiants.py | 334 ++++++++++++++++++
 6 files changed, 1315 insertions(+)
 create mode 100644 Tp4/etudiants.zip
 create mode 100644 Tp4/etudiants/apl1test.py
 create mode 100644 Tp4/etudiants/date.py
 create mode 100644 Tp4/etudiants/etudiant.py
 create mode 100644 Tp4/etudiants/etudiants.csv
 create mode 100644 Tp4/gestion_promo_etudiants.py

diff --git a/Tp4/etudiants.zip b/Tp4/etudiants.zip
new file mode 100644
index 0000000000000000000000000000000000000000..c2821fc239a613e1ae4ea9daad741d3e1e9498f6
GIT binary patch
literal 13011
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
T1_~h-1{MYnMh1pbLl6%DT7>2#

literal 0
HcmV?d00001

diff --git a/Tp4/etudiants/apl1test.py b/Tp4/etudiants/apl1test.py
new file mode 100644
index 0000000..8533cca
--- /dev/null
+++ b/Tp4/etudiants/apl1test.py
@@ -0,0 +1,89 @@
+import thonnycontrib
+from thonnycontrib.backend.evaluator import Evaluator
+import thonnycontrib.backend.l1test_backend
+from thonny.plugins.cpython_backend.cp_back import MainCPythonBackend
+import thonnycontrib.backend.doctest_parser 
+from thonnycontrib.backend.doctest_parser import ExampleWithExpected, ExampleWithoutExpected
+import thonnycontrib.backend.ast_parser
+from thonnycontrib.backend.ast_parser import L1DocTest
+import thonnycontrib.backend.verdicts
+from thonnycontrib.backend.verdicts.ExceptionVerdict import ExceptionVerdict 
+
+import inspect
+import tempfile
+import os
+import sys
+        
+class MockBackend(MainCPythonBackend):
+    """
+    Fake backend.
+    """
+    def __init__(self):
+        ...
+
+    def send_message(self, msg) -> None:
+        ...
+
+# register backend
+thonnycontrib.backend.l1test_backend.BACKEND = MockBackend()
+
+def l1test_to_org(filename: str, source: str=""):
+    """
+    Return an org abstract of the tests presents in `filename` file.
+    """
+    abstract = {'total': 0,
+                'success': 0,
+                'failures': 0,
+                'errors': 0,
+                'empty': 0}
+
+    if source == "":
+        with open(filename, 'rt') as fin:
+            source = fin.read()
+    evaluator = Evaluator(filename=filename,
+                          source=source)
+    tests = evaluator.evaluate()
+    n = len(tests)
+    abstract['total'] = n
+    res = ""
+    for test in tests:
+        examples = test.get_examples()
+        res_examples = ""
+        nb_test, nb_test_ok = 0, 0
+        empty = True
+        for example in examples:
+            verdict = test.get_verdict_from_example(example)
+            if isinstance(example, ExampleWithExpected):
+                nb_test += 1
+                if verdict.isSuccess():
+                    nb_test_ok += 1
+                    abstract['success'] += 1
+                else:
+                    abstract['failures'] += 1
+                empty = False
+            if isinstance(verdict, ExceptionVerdict):
+                abstract['errors'] += 1
+                empty = False
+            res_examples += f"** {verdict}\n\n"
+            if not verdict.isSuccess():
+                res_examples += f"   {verdict.get_details()}\n\n"
+        if not empty: 
+            res += f"* {test.get_name()} ~ {nb_test_ok}/{nb_test} réussis\n\n"
+        else:
+            abstract['empty'] += 1
+            res += f"* {test.get_name()}\n\n Aucun test trouvé !\n\n"
+        res += res_examples
+    res = f"Tests exécutés : {abstract['total']}\nSuccès: {abstract['success']}, \
+Echecs: {abstract['failures']}, Erreurs: {abstract['errors']}, \
+Vide: {abstract['empty']}\n\n" + res
+    return res
+
+
+def testmod(modulename: str):
+    """
+    mimic the doctest.testmod function
+    for `modulename` module
+    """
+    print(l1test_to_org(modulename))
+
+
diff --git a/Tp4/etudiants/date.py b/Tp4/etudiants/date.py
new file mode 100644
index 0000000..01410c8
--- /dev/null
+++ b/Tp4/etudiants/date.py
@@ -0,0 +1,204 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+"""
+:mod:`date` module :  a  module for date
+
+:author: `FIL - Faculté des Sciences et Technologies - 
+          Univ. Lille <http://portail.fil.univ-lille1.fr>`_
+
+:date: 2024, january. Last revision: 2024, january
+
+Date are objects
+
+"""
+
+NOM_MOIS = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet',
+            'août', 'septembre', 'octobre', 'novembre', 'décembre']
+DUREE_MOIS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
+
+
+def est_bissextile(annee: int) -> bool:
+    """
+    Renvoie True si et seulement si annee est bissextile.
+
+    précondition: annee >= 1582.
+
+    $$$ est_bissextile(2024)
+    True
+    $$$ est_bissextile(2000)
+    True
+    $$$ est_bissextile(2100)
+    False
+    """
+    return annee % 4 == 0 and (annee % 100 != 0 or annee % 400 == 0)
+
+
+def nombre_de_jour_dans_mois(mois: int, annee: int) -> int:
+    """
+    Renvoie le nombre de jour dans le mois `mois` de l'année `année`.
+
+    précondition : 0 <= mois < 12 et annee >= 1582.
+    """
+    duree_mois = DUREE_MOIS[mois - 1]
+    if est_bissextile(annee) and mois == 2:
+        return duree_mois + 1
+    return duree_mois
+
+
+def nom_mois(mois) -> str:
+    """Renvoie le nom du mois en français."""
+    return NOM_MOIS[mois - 1]
+
+
+class Date:
+    """
+    une classe permettant de représenter des dates
+    """
+    
+    def __init__(self, jour: int, mois: int, annee: int):
+        """
+        initialise une nouvelle date
+
+        précondition : jour/mois/annee est une date valide
+
+        exemples :
+
+        $$$ adate = Date(4, 6, 2024)
+        $$$ type(adate) == Date
+        True
+        """
+        self.jour = jour
+        self.mois = mois
+        self.annee = annee
+
+    
+    def __str__(self) -> str:
+        """
+        Renvoie une châine représentant la date.
+
+        $$$ adate = Date(23, 1, 2024)
+        $$$ str(adate)
+        '23 janvier 2024'
+        """
+        return f"{self.jour} {nom_mois(self.mois)} {self.annee}"
+
+    def __eq__(self, other: 'Date') -> bool:
+        """
+        Renvoie True si, et seulement si, deux dates sont égales.
+
+        exemples :
+
+        $$$ adate1 = Date(23, 1, 2024)
+        $$$ adate2 = Date(23, 1, 2024)
+        $$$ id(adate1) == id(adate2)
+        False
+        $$$ adate1 == adate2
+        True
+        """
+        return self.jour == other.jour and \
+            self.mois == other.mois and \
+            self.annee == other.annee
+    
+    def __lt__(self, other: 'Date') -> bool:
+        """
+        Renvoie True si, et seulement si, la date représentée par
+        self est avant celle représentée par other.
+
+        exemples :
+
+        $$$ adate1 = Date(23, 1, 2024)
+        $$$ adate2 = Date(25, 1, 2024)
+        $$$ adate1 < adate2
+        True
+        $$$ adate2 < adate1
+        False
+        $$$ adate1 < Date(23, 1, 2024)
+        False
+        """
+        if self.annee == other.annee:
+            if self.mois == other.mois:
+                res = self.jour < other.jour                    
+            else:
+                res = self.mois < other.mois    
+        else:
+            res = self.annee < other.annee
+        return res
+
+    def __le__(self, other: 'Date') -> bool:
+        """
+        Renvoie True si, et seulement si, la date représentée par
+        self est avant ou egale à celle représentée par other.
+
+        exemples :
+
+        $$$ adate1 = Date(23, 1, 2024)
+        $$$ adate2 = Date(25, 1, 2024)
+        $$$ adate1 <= adate2
+        True
+        $$$ adate2 <= adate1
+        False
+        $$$ adate1 <= Date(23, 1, 2024)
+        True
+        """
+        return self < other or self == other
+
+    def tomorrow(self) -> 'Date':
+        """
+        renvoie la date du lendemain.
+
+        $$$ Date(31, 12, 2023).tomorrow() == Date(1, 1, 2024)
+        True
+        $$$ Date(31, 1, 2024).tomorrow() == Date(1, 2, 2024)
+        True
+        $$$ Date(24, 1, 2024).tomorrow() == Date(25, 1, 2024)
+        True
+        """
+        annee = self.annee
+        mois = self.mois
+        jour = self.jour
+
+        if jour == nombre_de_jour_dans_mois(mois, annee):
+            jour = 1
+            if mois == 12:
+                annee = annee + 1
+                mois = 1
+            else:
+                mois = mois + 1
+        else:
+            jour = jour + 1
+        return Date(jour, mois, annee)
+
+    def __add__(self, njour: int) -> 'Date':
+        """
+        ajoute un nombre de jour à une date.
+
+        $$$ Date(31, 1, 24) + 7
+        Date(7, 2, 24)
+        """
+        res = self
+        for _ in range(njour):
+            res = res.tomorrow()
+        return res
+
+    def __sub__(self, other: 'Date') -> int:
+        """
+        Renvoie le nombre de jour entre deux dates.
+
+        $$$ Date(7, 2, 24) - Date(31, 1, 24)
+        7
+        """
+        if self <= other:
+            start, ending = self, other
+        else:
+            start, ending = other, self
+        res = 0
+        while start != ending:
+            start = start.tomorrow()
+            res = res + 1
+        return res
+
+
+if (__name__ == '__main__'):
+    import apl1test
+    apl1test.testmod('date.py')
diff --git a/Tp4/etudiants/etudiant.py b/Tp4/etudiants/etudiant.py
new file mode 100644
index 0000000..d647fa8
--- /dev/null
+++ b/Tp4/etudiants/etudiant.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+"""
+:author: FIL - FST - Univ. Lille.fr <http://portail.fil.univ-lille.fr>_
+:date: janvier 2019
+:last revised: 
+:Fournit :
+"""
+from date import Date
+
+
+class Etudiant:
+    """
+    une classe représentant des étudiants.
+
+    $$$ etu = Etudiant(314159, 'Oléon', 'Tim', Date(7,11,2004), 'MI', '15')
+    $$$ str(etu)
+    'Tim Oléon'
+    $$$ repr(etu)
+    '314159 : Tim OLÉON'
+    $$$ etu.prenom
+    'Tim'
+    $$$ etu.nip
+    314159
+    $$$ etu.nom
+    'Oléon'
+    $$$ etu.formation
+    'MI'
+    $$$ etu.groupe
+    '15'
+    $$$ etu2 = Etudiant(314159, 'Oléon', 'Tim', Date(7,11,2004), 'MI', '15')
+    $$$ etu == etu2
+    True
+    $$$ etu3 = Etudiant(141442, 'Oléon', 'Tim', Date(7,11,2004), 'MI', '15')
+    $$$ etu == etu3
+    False
+    $$$ etu4 = Etudiant(141442, 'Calbuth', 'Raymond', Date(2,1,2005), 'MI', '11')
+    $$$ etu < etu4
+    True
+    $$$ isinstance(etu.naissance, Date)
+    True
+    """
+    def __init__(self, nip: int, nom: str, prenom: str,
+                 naissance: Date, formation: str, groupe: str):
+        """
+        initialise un nouvel étudiant à partir de son nip, son nom, son
+        prénom, sa formation et son groupe.
+
+        précondition : le nip, le nom et le prénom ne peuvent être nuls ou vides.
+        """
+        ...
+
+    def __eq__(self, other) -> bool:
+        """
+        Renvoie True ssi other est un étudiant ayant :
+        - même nip,
+        - même nom et
+        - même prénom que `self`,
+        et False sinon.
+        """
+        ...
+
+    def __lt__(self, other) -> bool:
+        """
+        Renvoie True si self est né avant other
+        """
+        ...
+
+    def __str__(self) -> str:
+        """
+        Renvoie une représentation textuelle de self.
+        """
+        ...
+
+    def __repr__(self) -> str:
+        """
+        Renvoie une représentation textuelle interne de self pour le shell.
+        """
+        ...
+
+if (__name__ == "__main__"):
+    import apl1test
+    apl1test.testmod('etudiant.py')
diff --git a/Tp4/etudiants/etudiants.csv b/Tp4/etudiants/etudiants.csv
new file mode 100644
index 0000000..1502a36
--- /dev/null
+++ b/Tp4/etudiants/etudiants.csv
@@ -0,0 +1,604 @@
+nip;nom;prenom;formation;groupe
+49734124;Cordier;Eugène;2003-10-04;MIASHS;11
+48031156;Voisin;Josette;2005-08-22;MI;11
+48898866;Georges;Benoît;2005-11-28;MI;11
+48210311;Pinto;David;2005-05-29;MIASHS;11
+48340330;Traore;Andrée;2005-08-14;MI;11
+49105978;Pereira;Cécile;2005-12-31;PEIP;11
+48271883;Chauvin;Christiane;2005-12-09;MI;11
+49688675;Buisson;David;2003-07-24;MI;11
+48566946;Descamps;Paul;2005-07-17;MI;11
+48192226;Bernier;Anne;2003-02-16;LICAM;12
+48949140;Morvan;Patricia;2006-01-16;MI;12
+49134744;Roger;Marcel;2003-02-22;MI;12
+49452026;Sanchez;Laetitia;2005-08-19;MI;12
+49931926;Guilbert;Mathilde;2005-06-11;MI;12
+48684943;Camus;Marc;2004-10-27;MI;12
+49052632;Lejeune;Patricia;2005-03-11;MI;13
+48023510;Guillet;Maurice;2003-05-06;MI;13
+49601133;Hebert;Daniel;2004-12-02;MI;13
+48325354;Bègue;Nath;2003-07-18;MI;13
+49907945;Charrier;Matthieu;2004-12-15;MI;13
+48844461;Diallo;Paul;2003-08-01;MI;14
+48926711;Schmitt;Nathalie;2004-04-27;MI;14
+49316362;Lemaire;Catherine;2005-05-11;MI;14
+48293146;Gilbert;David;2005-02-18;MI;14
+49286644;Lesage;Raymond;2003-10-06;MI;14
+49247948;Charles;David;2005-09-15;MI;14
+49020225;Lesage;Patrick;2004-07-01;MI;14
+49682364;Gonzalez;Marie;2005-10-19;MI;14
+49253372;Marin;Maurice;2003-06-01;MI;14
+48608081;Chartier;Laetitia;2004-09-01;MI;14
+49127541;Chrétien;Marie;2004-04-24;MI;14
+49550241;Humbert;Matthieu;2003-11-10;MI;15
+48993947;Simon;Nathalie;2005-06-05;MI;15
+49628386;Julien;Margaud;2005-07-19;MI;15
+48071104;Munoz;Martine;2005-07-20;MI;15
+49334956;Pottier;Patrick;2003-03-08;MI;15
+49532314;Ruiz;Martine;2003-05-03;MI;15
+48124483;Hamel;Marine;2003-10-27;MI;21
+48090779;Gautier;Marc;2005-01-19;MI;21
+48772409;Jean;Patrick;2004-02-17;MI;21
+48535786;Jourdan;Marcel;2003-06-30;MI;21
+49323570;Duval;Martine;2003-03-25;MI;21
+49389310;Diaz;Marianne;2005-05-17;MI;21
+48036711;Reynaud;Margot;2005-12-29;MI;22
+49236792;Pinto;Paul;2004-12-15;MI;22
+49105986;Boucher;Martin;2003-05-04;MI;22
+49449182;Diaz;Danielle;2005-10-29;MI;22
+49694608;Seguin;Martine;2004-03-25;MI;22
+48025609;Laurent;Laurence;2004-09-10;MI;22
+48002358;Benoit;Valérie;2005-01-26;MI;22
+48209995;Valette;Margot;2003-07-18;MI;22
+49816612;Breton;Nath;2004-10-24;MI;22
+49869349;Cohen;Paul;2003-12-10;MI;23
+48752422;Lefebvre;Margot;2005-08-19;MI;23
+48733295;Colin;Caroline;2004-07-20;MI;23
+48645537;Dumas;Gabrielle;2005-12-18;MI;23
+48855861;Bonneau;Gabriel;2004-12-08;MI;23
+49823938;Sanchez;Camille;2005-08-01;MI;23
+48848853;Lemonnier;Marc;2003-04-21;MI;24
+48752722;Letellier;Sabine;2004-04-28;MI;24
+48839656;Besson;Margot;2004-11-23;MI;24
+48848148;Deschamps;Manon;2003-04-19;MI;24
+49485052;Toussaint;Margot;2003-12-20;MI;24
+48530211;Lemaître;Jacques;2003-04-24;MI;24
+49906684;Fouquet;Raymond;2003-12-25;MI;24
+49360748;Leclerc;Marie;2005-03-08;MI;24
+48834305;Roux;Marcelle;2004-04-21;PEIP;1
+49340030;Blanchet;Valentine;2003-04-24;PEIP;1
+49819299;Thomas;Margaret;2005-11-24;PEIP;1
+49582670;Blanchard;Nath;2003-11-30;PEIP;1
+49443847;Martin;Laurent;2005-10-30;PEIP;1
+49050418;Pasquier;Daniel;2003-12-28;PEIP;2
+49027106;Henry;Marthe;2004-11-06;PEIP;2
+48929853;Marques;Gabrielle;2004-07-21;PEIP;2
+48488768;Becker;Xavier;2004-02-08;PEIP;3
+48156692;Samson;Marie;2004-06-18;PEIP;3
+49298374;Rolland;Martin;2005-04-05;PEIP;3
+49886756;Chevallier;David;2003-09-15;PEIP;3
+49361472;Leclerc;Nath;2005-11-22;PEIP;3
+49814672;Martineau;Nath;2005-05-27;PEIP;3
+48367411;Duval;Margaux;2004-08-08;PEIP;3
+48972267;Schneider;Maryse;2005-07-18;PEIP;3
+48724344;Grégoire;Xavier;2005-09-20;MIASHS;1
+49579268;Turpin;Caroline;2004-11-03;MIASHS;1
+48515216;Moulin;Marc;2005-12-26;MIASHS;1
+48729307;Guillou;Raymond;2004-05-02;MIASHS;1
+49459349;Boulanger;Madeleine;2004-02-05;MIASHS;1
+49923186;Cousin;David;2003-02-14;MIASHS;1
+49058420;Brunel;Gabriel;2003-02-13;MIASHS;2
+49722979;Collin;Margaret;2004-07-03;MIASHS;2
+48244173;Garnier;Jacqueline;2004-10-10;MIASHS;2
+48372548;Maréchal;Margaret;2005-04-19;MIASHS;2
+48323083;Baron;Patricia;2005-04-17;MIASHS;2
+48092669;Peltier;Madeleine;2003-04-28;MIASHS;3
+48868613;Bouvet;Margot;2003-04-23;MIASHS;3
+49563852;Parent;Paulette;2005-10-27;MIASHS;3
+49295358;Olivier;Maryse;2005-12-06;MIASHS;3
+48007778;Lemoine;Pauline;2005-10-07;MIASHS;3
+49572023;Diallo;Jacques;2005-09-13;MIASHS;3
+49203686;Baudry;Marie;2005-08-22;MIASHS;3
+49423558;Rocher;Marcel;2005-12-30;MIASHS;3
+49848686;Poirier;Margot;2005-09-01;MIASHS;4
+49298228;Poirier;Pauline;2004-08-09;MIASHS;4
+49638934;Gillet;Martin;2003-12-20;MIASHS;4
+49607465;Briand;Marthe;2005-03-23;MIASHS;4
+48582935;Jacques;Daniel;2004-09-05;MIASHS;4
+49863128;Da Silva;Manon;2005-12-02;MIASHS;4
+49799114;Colas;Raymond;2006-01-23;MIASHS;4
+48267195;Bonnet;Martine;2003-08-28;MIASHS;5
+49037647;Leconte;Gabrielle;2005-03-18;MIASHS;5
+48571509;Gosselin;Margaret;2003-02-23;MIASHS;5
+48228771;Vasseur;Patricia;2004-12-19;MIASHS;6
+48489867;Fournier;Marcel;2005-04-16;MIASHS;6
+49191965;Bruneau;Margot;2006-02-01;MIASHS;7
+48360824;Fernandez;Caroline;2004-07-28;MIASHS;7
+48599916;Martinez;Matthieu;2004-03-26;MIASHS;7
+48072870;De Sousa;Manon;2004-04-19;MIASHS;7
+48719910;Bodin;Marc;2004-02-24;MIASHS;7
+49242065;Lévy;Margot;2005-08-17;MIASHS;7
+49062809;Boulay;Marcel;2004-12-17;MIASHS;7
+48065010;Gaillard;Valentine;2004-10-07;MIASHS;7
+49021462;Lebrun;Camille;2004-11-09;LICAM;1
+48007615;Mary;Jacques;2005-01-26;LICAM;1
+48217536;Le Gall;Jacqueline;2005-01-31;LICAM;1
+49397241;Foucher;Caroline;2004-08-09;LICAM;1
+49739698;Louis;Marcel;2005-07-27;LICAM;1
+49024680;Humbert;Jacques;2003-03-07;LICAM;1
+49539083;Chauvin;Océane;2004-05-06;MIASHS;2
+48058735;Lacroix;Océane;2003-10-19;MIASHS;7
+49312748;Lemaître;Océane;2004-02-21;LICAM;1
+49417115;Vincent;Adrien;2004-10-24;MI;12
+49658312;Valette;Édouard;2003-09-22;MI;13
+49211845;Leroy;Adrien;2005-04-28;MI;13
+49082743;Dupont;Adèle;2004-08-12;MI;14
+48115483;Hebert;Édouard;2005-08-27;MI;15
+49846736;Pelletier;Adélaïde;2003-04-10;MI;21
+48333415;Perret;Adèle;2003-06-07;MI;22
+48304876;Lemoine;Adèle;2004-09-19;MI;22
+48013351;Ledoux;Adélaïde;2005-04-16;MI;23
+49449283;Colas;Adélaïde;2005-09-29;MI;23
+49021326;Bruneau;Odette;2005-10-10;MI;24
+49925606;Jacques;Adèle;2003-05-19;PEIP;3
+49288666;Maillet;Adélaïde;2003-08-23;MIASHS;1
+49685407;Lebon;Adélaïde;2004-10-05;MIASHS;2
+49433211;Lambert;Adrien;2004-11-18;MIASHS;2
+49741841;Hervé;Édouard;2005-04-16;MIASHS;5
+49721572;Brunel;Adèle;2005-02-03;MIASHS;6
+48249671;Toussaint;Adrienne;2003-05-12;MIASHS;6
+49980450;Letellier;Odette;2003-08-03;MIASHS;6
+49053077;Bernier;Édith;2005-05-24;LICAM;1
+49189180;Bernard;Bernadette;2004-09-13;MI;11
+48152927;Chevalier;Denis;2003-12-12;MI;11
+49728615;Lévêque;Denise;2004-12-18;MI;11
+49056284;Humbert;René;2004-05-13;MI;12
+48247523;Godard;Bernard;2003-03-30;MI;12
+49932218;Costa;Henriette;2006-01-14;MI;13
+49190835;Rossi;Jean;2004-02-29;MI;13
+49025599;Peltier;Bernadette;2005-02-03;MI;13
+49426949;Weber;Georges;2004-08-28;MI;13
+48232140;Guillet;Denise;2005-06-08;MI;14
+48218300;Hamel;Denis;2004-09-11;MI;14
+48662142;Leconte;Denise;2004-07-18;MI;15
+48566496;Lopes;Bernadette;2004-01-20;MI;15
+49488918;Prévost;Benjamin;2005-10-02;MI;21
+49284323;Bodin;René;2003-07-12;MI;21
+49994796;Jean;Jean;2003-07-22;MI;21
+48397553;Delahaye;Bertrand;2005-11-17;MI;22
+48730740;Sauvage;Henri;2004-11-10;MI;23
+48970826;Leleu;Henriette;2003-09-13;MI;23
+48190285;Rossi;Denise;2004-02-10;MI;23
+49032060;Gaudin;Georges;2003-09-07;MI;23
+49915977;Bourdon;Benjamin;2003-02-10;MI;24
+48448951;Duval;Jeanne;2004-04-10;MI;24
+49087375;Pereira;Georges;2004-07-20;MI;24
+48954152;Wagner;Bernard;2004-10-22;MI;24
+49406265;Coulon;Jean;2005-03-05;PEIP;1
+48853611;Chauveau;Denise;2003-07-20;PEIP;1
+48495650;Lefort;Benjamin;2005-10-11;PEIP;1
+49216685;Muller;Georges;2004-08-12;PEIP;1
+49026325;Gautier;Bernadette;2005-10-28;PEIP;3
+48000371;Boucher;Jean;2003-12-25;MIASHS;1
+49907917;Masse;Henri;2005-07-23;MIASHS;1
+48751991;Gauthier;René;2006-01-05;MIASHS;2
+49708032;Maréchal;Bertrand;2005-03-29;MIASHS;2
+49786808;Gautier;Benjamin;2004-11-24;MIASHS;2
+48035774;Leconte;Denise;2003-11-30;MIASHS;2
+49372998;Marchand;Denise;2003-05-12;MIASHS;3
+49609047;Nguyen;Renée;2004-05-27;MIASHS;3
+49943147;Rousset;Bertrand;2003-02-13;MIASHS;3
+48713440;Vaillant;Jean;2005-03-25;MIASHS;3
+49502170;Arnaud;Denise;2004-06-15;MIASHS;3
+48900179;Vasseur;Henriette;2004-09-17;MIASHS;4
+49676398;Techer;Denis;2005-02-21;MIASHS;4
+48541435;Baudry;René;2005-08-29;MIASHS;5
+48500876;Brunel;Georges;2004-12-14;MIASHS;5
+49290334;Da Silva;Benjamin;2005-08-15;MIASHS;5
+49409128;Potier;Jean;2005-11-09;MIASHS;6
+48596222;Lecomte;Bernadette;2004-12-11;MIASHS;6
+49448516;Rousseau;Benjamin;2003-02-13;MIASHS;6
+48442291;Arnaud;Bertrand;2003-08-18;MIASHS;7
+48381478;Briand;Bertrand;2003-03-21;MIASHS;7
+49039629;Jean;Benjamin;2003-05-10;MIASHS;7
+49979858;Benoit;Jeannine;2004-09-02;LICAM;1
+49261959;Gonzalez;Agathe;2003-04-26;MI;12
+48117170;Daniel;Agnès;2004-05-17;MI;23
+49055702;Moreau;Agathe;2003-08-22;PEIP;1
+49194610;Bourgeois;Agathe;2004-01-30;MIASHS;6
+49785470;Morvan;Philippine;2004-11-14;MI;11
+48865644;Legrand;Philippe;2003-08-21;MI;11
+48160496;Leblanc;Théodore;2005-07-03;MI;11
+49772637;Lecoq;Philippine;2004-01-07;MI;11
+49430510;Guilbert;Théodore;2005-07-18;MI;12
+49670457;Didier;Philippine;2005-05-01;MI;12
+49741568;Fernandes;Christiane;2004-09-16;MI;12
+49447196;Lucas;Théophile;2003-12-05;MI;12
+48830867;Leclerc;Théodore;2005-03-23;MI;12
+49554614;Guillaume;Chantal;2004-12-14;MI;13
+49019548;Da Costa;Théodore;2005-11-19;MI;13
+48081529;Charrier;Christelle;2005-10-24;MI;13
+48878604;Breton;Thibaut;2003-12-26;MI;14
+48080188;Dupré;Charlotte;2004-09-02;MI;14
+49438591;Perez;Thomas;2003-05-19;MI;14
+49486455;Ramos;Théodore;2005-07-03;MI;14
+48813193;Pruvost;Thierry;2003-04-26;MI;15
+49001947;Bouvet;Théophile;2003-08-06;MI;15
+49730708;Moreau;Thierry;2003-07-27;MI;22
+48829568;Gonzalez;Philippine;2003-12-08;MI;22
+49412385;Payet;Christophe;2004-02-29;MI;22
+48794681;Gonzalez;Philippine;2004-04-25;MI;22
+49888259;Tanguy;Christine;2003-09-29;MI;23
+49901712;Leblanc;Thierry;2005-06-27;PEIP;1
+49374022;Hamel;Philippine;2003-11-06;PEIP;1
+48786826;Roche;Charlotte;2005-01-14;PEIP;3
+49349106;Barbier;Thibaut;2005-06-07;PEIP;3
+49188132;Diaz;Christelle;2005-01-31;PEIP;3
+49402837;Guillet;Théodore;2003-03-09;MIASHS;1
+48571639;Bonnet;Thibault;2005-05-25;MIASHS;1
+48367626;Antoine;Thierry;2003-03-21;MIASHS;1
+48756911;Mahe;Christophe;2004-08-27;MIASHS;2
+48513659;Bouchet;Thomas;2003-09-15;MIASHS;2
+49489871;Lebon;Christophe;2005-02-03;MIASHS;2
+48269138;Picard;Thomas;2003-03-23;MIASHS;2
+49719607;Barbe;Thomas;2005-10-06;MIASHS;3
+48008911;Pascal;Thierry;2004-06-15;MIASHS;3
+48508845;Pascal;Théophile;2003-07-11;MIASHS;4
+48264785;Duval;Thierry;2003-04-22;MIASHS;4
+48054742;Chauvet;Thibaut;2005-12-11;MIASHS;4
+48106240;Le Goff;Charlotte;2004-12-28;MIASHS;5
+49102843;Bègue;Christine;2003-08-09;MIASHS;5
+48452689;Sanchez;Thierry;2003-10-31;MIASHS;5
+49881643;Da Costa;Théophile;2006-01-13;MIASHS;6
+48484914;Adam;Théodore;2003-08-10;MIASHS;6
+49390446;Lévêque;Théodore;2004-02-08;MIASHS;7
+49830129;Marques;Christine;2004-04-24;LICAM;1
+48653028;Pruvost;Pierre;2004-05-27;MI;11
+48106856;Boulay;Aimé;2003-03-05;MI;11
+48773384;Hernandez;Michel;2003-10-25;MI;12
+49370157;Benard;William;2003-09-21;MI;12
+48736257;Philippe;Michel;2004-10-17;MI;12
+48876600;Texier;Michelle;2004-06-28;MI;13
+49056299;Wagner;Gilles;2005-05-10;MI;13
+49905381;Rousset;Aimé;2004-10-22;MI;13
+49807206;François;Pierre;2005-01-20;MI;13
+49016048;Fouquet;Aimée;2005-08-04;MI;13
+48507125;Bonnin;Richard;2004-05-04;MI;14
+48320231;Blin;Michel;2005-11-07;MI;14
+48484735;Reynaud;Diane;2003-03-16;MI;14
+48276290;Martinez;Nicole;2003-08-13;MI;14
+48924152;Pasquier;Victoire;2005-11-09;MI;15
+49954213;Foucher;Michelle;2003-07-17;MI;15
+48138371;Hervé;Diane;2005-11-23;MI;21
+49866886;Bonnin;Gilles;2004-11-19;MI;21
+49757344;Lecomte;Nicole;2003-08-08;MI;21
+49853214;Delorme;Aimé;2004-07-29;MI;21
+48211548;Thibault;Timothée;2006-01-26;MI;21
+49745427;Gauthier;Nicolas;2005-10-24;MI;22
+49260291;Bouchet;Virginie;2005-06-24;MI;22
+49976658;Vallet;Victor;2005-09-02;MI;22
+49956366;Parent;William;2003-08-27;MI;23
+49568088;Marchal;Michelle;2004-06-30;MI;23
+49437729;Huet;Timothée;2005-10-24;MI;23
+49711645;Lebrun;William;2004-05-23;MI;23
+49238341;Brunet;Nicole;2005-06-01;MI;24
+48196327;Martel;Aimée;2003-07-16;MI;24
+48795538;Antoine;Michel;2004-08-26;PEIP;1
+48688355;Gilbert;Victoire;2004-06-27;PEIP;2
+49733203;Roy;Gilbert;2004-11-13;PEIP;2
+49803870;Navarro;Michèle;2005-12-07;PEIP;3
+48731149;Klein;Aimé;2005-01-21;PEIP;3
+48165677;Joseph;Nicolas;2004-05-23;MIASHS;1
+49119990;Evrard;Pierre;2003-03-17;MIASHS;1
+48330645;Lemonnier;Vincent;2003-07-11;MIASHS;1
+49288497;Julien;Victor;2003-04-05;MIASHS;1
+48899538;Lévy;Michel;2004-09-27;MIASHS;1
+48514748;Devaux;Richard;2005-01-28;MIASHS;1
+49738956;Gérard;Gilbert;2005-07-22;MIASHS;1
+49204742;Rémy;Vincent;2004-11-07;MIASHS;2
+48114676;Louis;Pierre;2003-04-29;MIASHS;2
+49584947;Baudry;Aimée;2003-09-10;MIASHS;2
+49600822;Thierry;Michelle;2005-09-22;MIASHS;3
+49868294;Blondel;Aimé;2005-12-11;MIASHS;3
+49580693;Godard;Michèle;2005-10-26;MIASHS;3
+49656342;Lemaître;Aimée;2005-02-12;MIASHS;4
+48090043;Pruvost;Michel;2005-03-25;MIASHS;4
+48578802;Julien;Vincent;2004-10-03;MIASHS;6
+49375918;Millet;Vincent;2004-12-26;MIASHS;6
+49580537;Nicolas;Nicolas;2003-09-24;MIASHS;7
+48634928;Riou;Michel;2004-01-24;MIASHS;7
+49954875;Bertin;Pierre;2004-11-14;MIASHS;7
+48602090;Rodrigues;Michelle;2004-09-07;MIASHS;7
+49452839;Poirier;Simone;2003-04-03;LICAM;1
+48972970;Blanchet;Victoire;2004-11-19;LICAM;1
+48773759;Bouvet;Olivie;2004-02-28;MI;11
+48268173;Carre;Élisabeth;2005-12-09;MI;11
+49144825;Garnier;Alexandre;2003-03-02;MI;11
+49383780;Noël;Élodie;2004-08-21;MI;11
+48647968;Vidal;Alexandrie;2004-06-27;MI;11
+48138421;Garcia;Alfred;2005-10-08;MI;12
+48511198;Chevallier;Alfred;2003-07-07;MI;13
+48303181;Le Roux;Élise;2004-12-31;MI;14
+49690399;Marques;Alphonse;2003-08-18;MI;14
+49328403;Blanchet;Alexandrie;2006-01-31;MI;14
+48973546;Martinez;Claude;2005-07-29;MI;15
+49587287;Letellier;Claude;2005-07-17;MI;15
+48566061;Thomas;Olivier;2006-01-07;MI;15
+48733086;Guillaume;Éléonore;2003-12-21;MI;21
+49646890;Ledoux;Élisabeth;2005-05-15;MI;21
+49611994;Leclercq;Alphonse;2003-10-16;MI;23
+49839766;Delaunay;Alphonse;2005-07-24;MI;23
+48813171;Dupuis;Alphonse;2005-07-17;MI;24
+48440787;Arnaud;Olivier;2005-12-13;MI;24
+49506193;Raymond;Alain;2005-05-27;MI;24
+48983656;Robert;Olivier;2004-10-08;PEIP;1
+48644844;Berger;Alfred;2003-11-11;PEIP;1
+49090195;Bonnin;Olivie;2004-08-04;PEIP;1
+48456426;Étienne;Olivier;2004-04-27;PEIP;2
+48759482;Lemonnier;Alexandria;2005-10-20;PEIP;2
+48693368;Potier;Olivier;2004-12-28;PEIP;2
+49714787;Thierry;Alphonse;2004-07-18;PEIP;2
+48965726;Perez;Alice;2003-05-26;PEIP;3
+49397669;Morel;Alex;2004-01-03;MIASHS;1
+48169889;Humbert;Élisabeth;2003-07-07;MIASHS;1
+49682513;Berthelot;Alexandrie;2004-02-13;MIASHS;1
+49705720;Moreno;Clémence;2004-08-20;MIASHS;2
+48236648;Besnard;Élisabeth;2004-03-29;MIASHS;2
+49473975;Roux;Élodie;2003-08-09;MIASHS;3
+48138122;Moreno;Olivier;2004-10-06;MIASHS;4
+48887738;Petitjean;Alexandria;2003-03-15;MIASHS;4
+49312553;Perret;Claude;2005-02-20;MIASHS;4
+49044547;Vidal;Alexandrie;2004-01-21;MIASHS;4
+49278701;Wagner;Élise;2004-09-11;MIASHS;5
+49855581;Maury;Alex;2004-02-14;MIASHS;5
+48560167;Delannoy;Alexandre;2003-04-08;MIASHS;5
+48754525;Maillard;Alexandre;2004-07-14;MIASHS;5
+49857754;Michaud;Alphonse;2004-12-13;MIASHS;6
+48956308;Lefort;Alphonse;2004-10-14;MIASHS;6
+49472347;Blot;Clémence;2005-01-30;MIASHS;7
+49026649;Hernandez;Élodie;2004-04-22;MIASHS;7
+48754496;Lambert;Alexandrie;2003-09-28;MIASHS;7
+48885656;Valentin;Alex;2004-01-16;LICAM;1
+49446369;Gros;Émile;2003-12-03;MI;11
+48683750;De Oliveira;Emmanuel;2006-01-02;MI;12
+48237719;Giraud;Émilie;2005-04-02;MI;13
+48290400;Meunier;Émile;2003-06-15;MI;13
+49984805;Imbert;Emmanuel;2004-08-16;MI;21
+49079305;Grondin;Emmanuel;2005-09-08;MI;21
+49799324;Cohen;Emmanuel;2005-11-29;MI;22
+49333027;Marin;Émile;2005-07-27;MI;22
+48876461;Lucas;Émilie;2005-10-09;MI;23
+48136097;Valentin;Émilie;2003-12-29;MI;24
+48714204;Dupré;Émilie;2005-11-28;MIASHS;1
+49596641;Duhamel;Émilie;2006-01-27;MIASHS;2
+48517805;Bertin;Emmanuelle;2005-03-28;MIASHS;3
+49207709;Thierry;Emmanuel;2004-06-22;MIASHS;5
+48990065;Payet;Emmanuelle;2004-02-02;MIASHS;5
+48046674;Fabre;Émile;2003-02-13;MIASHS;5
+49729750;Weiss;Émilie;2004-07-12;MIASHS;6
+48704994;Charrier;Andrée;2006-01-23;MI;12
+48216842;Gaillard;Anaïs;2005-05-23;MI;12
+48163705;Gilles;Anastasie;2004-02-28;MI;14
+48410459;Rolland;Andrée;2004-08-31;MI;14
+48495440;Foucher;Anne;2003-05-08;MI;15
+48752215;Briand;Anne;2003-08-28;MI;15
+48645123;Roger;André;2005-05-18;MI;15
+48183654;Rey;Anaïs;2004-09-08;MI;21
+48562276;Pons;Anastasie;2003-05-09;MI;21
+48905953;Antoine;Anastasie;2005-05-12;MI;23
+49781710;Marchand;André;2003-04-24;MI;23
+49678996;Hamel;Anouk;2006-01-16;MI;24
+48846569;Besson;Andrée;2006-01-05;MIASHS;2
+48388612;Gilbert;Anastasie;2003-07-22;MIASHS;3
+48554292;Joubert;Andrée;2003-02-09;MIASHS;5
+48379920;Turpin;André;2003-11-17;MIASHS;5
+48334622;Gérard;Anaïs;2003-04-24;MIASHS;6
+49937414;Bailly;Anaïs;2005-11-10;MIASHS;7
+49464849;Delaunay;André;2005-03-10;LICAM;1
+48401725;Valentin;Robert;2004-01-10;MI;11
+48216852;Alexandre;Roland;2003-08-09;MI;12
+49517652;Lefèvre;Lorraine;2004-06-09;MI;12
+49451039;Leclercq;Dorothée;2004-09-26;MI;12
+49399947;Hernandez;Lorraine;2004-09-30;MI;12
+48203700;Alves;Noël;2004-01-07;MI;13
+48589542;Thibault;Robert;2003-07-28;MI;13
+49955321;Parent;Monique;2004-08-14;MI;13
+49733429;Julien;Dorothée;2004-11-26;MI;13
+48641215;Hoareau;Roland;2004-09-01;MI;13
+48546831;Vidal;Noémi;2005-05-04;MI;15
+48051736;Lenoir;Lorraine;2003-06-17;MI;15
+48972507;Dubois;Louis;2003-07-25;MI;21
+48329429;Maury;Zoé;2005-06-08;MI;21
+49481031;Bonnet;Joséphine;2004-09-10;MI;21
+49493461;Gaillard;Lorraine;2003-04-14;MI;22
+48325676;Bernier;Constance;2004-08-15;MI;22
+49355649;Becker;Louis;2004-07-21;MI;22
+49613807;Lacroix;Louise;2004-01-05;MI;23
+49848413;Lacroix;Monique;2004-06-15;MI;23
+49513886;Roger;Louise;2005-07-04;MI;23
+49521136;Rousseau;Roger;2004-03-08;MI;23
+48207452;Gilles;Roland;2005-12-26;MI;23
+48448577;Blanchard;Joséphine;2003-09-02;MI;24
+49910238;Lombard;Robert;2004-01-23;MI;24
+48925513;Tanguy;Noël;2005-06-07;MI;24
+48058742;Hamon;Constance;2004-06-23;PEIP;1
+49358494;Fabre;Josette;2004-12-21;PEIP;1
+49469204;Vallet;Lorraine;2003-11-07;PEIP;1
+48972418;Lamy;Corinne;2004-10-04;PEIP;2
+48984615;Bigot;Constance;2004-01-17;PEIP;2
+49673558;Albert;Honoré;2006-01-28;PEIP;2
+48760318;Tanguy;Josette;2003-12-10;PEIP;2
+49178642;Mahe;Robert;2004-09-16;PEIP;2
+49182573;Lopes;Constance;2004-04-12;PEIP;2
+48548769;Hamon;Corinne;2004-01-15;PEIP;3
+48198023;Dumas;Josette;2003-04-21;PEIP;3
+48678486;Richard;Noël;2005-03-15;MIASHS;1
+48527516;Antoine;Sophie;2003-10-16;MIASHS;1
+48017314;Maillot;Noël;2005-08-03;MIASHS;2
+48086172;Goncalves;Roland;2004-05-18;MIASHS;3
+49602134;Boulay;Josette;2005-04-22;MIASHS;3
+49220080;Pires;Joséphine;2005-03-07;MIASHS;3
+48167617;Meunier;Joseph;2005-03-28;MIASHS;4
+48495939;Hoareau;Constance;2004-07-03;MIASHS;4
+49537843;Traore;Dominique;2004-08-26;MIASHS;4
+48544533;Hamon;Joséphine;2003-10-03;MIASHS;4
+49550107;Letellier;Roger;2005-08-10;MIASHS;4
+48977321;Weiss;Robert;2004-01-19;MIASHS;4
+49688464;Mace;Colette;2004-01-04;MIASHS;5
+49296543;Ribeiro;Roland;2004-12-18;MIASHS;5
+49588752;Diaz;Louise;2003-08-10;MIASHS;5
+49607397;Renaud;Robert;2004-01-14;MIASHS;5
+49984838;Antoine;Sophie;2005-02-23;MIASHS;5
+48965109;Muller;Roger;2004-03-06;MIASHS;6
+49656404;Diaz;Roger;2005-07-01;MIASHS;6
+49353257;Roche;Zoé;2003-09-16;MIASHS;7
+48990218;Adam;Robert;2004-04-30;MIASHS;7
+48480870;Philippe;Tristan;2003-10-20;MI;11
+49097773;Munoz;Frédérique;2005-11-04;MI;11
+49809460;Dos Santos;Françoise;2004-08-20;MI;11
+49646914;Delaunay;Franck;2003-06-23;MI;11
+48193127;Fernandez;Françoise;2003-07-01;MI;11
+48213012;Gimenez;Brigitte;2003-02-25;MI;12
+48120447;Traore;Grégoire;2004-09-17;MI;12
+49401676;Labbé;Arthur;2004-02-27;MI;13
+48843734;Barre;Franck;2004-01-12;MI;13
+49022042;Leclerc;Frédérique;2004-06-21;MI;14
+49629305;Seguin;Franck;2003-03-14;MI;14
+49137405;Diaz;Arthur;2004-10-07;MI;14
+49874487;Gautier;Éric;2004-04-10;MI;15
+49940759;Joubert;Frédéric;2003-12-17;MI;15
+49896940;Schmitt;Brigitte;2004-05-25;MI;21
+49605342;Weber;Éric;2004-11-11;MI;21
+49023523;Lagarde;Franck;2004-06-29;MI;22
+48482607;Rivière;Grégoire;2005-09-15;MI;23
+48416989;Dias;Frédérique;2003-04-28;MI;24
+49259885;Roger;Grégoire;2004-11-25;PEIP;1
+48719952;Fouquet;Françoise;2005-01-19;PEIP;1
+49999011;Lefèvre;Françoise;2005-08-28;PEIP;1
+49735897;Rossi;Grégoire;2005-08-27;PEIP;2
+49339317;Delmas;Tristan;2005-05-17;PEIP;2
+49687129;Mary;François;2005-01-12;PEIP;3
+49446489;Allard;Arnaude;2003-05-22;PEIP;3
+48404341;Fontaine;Tristan;2004-03-28;PEIP;3
+49187573;Fabre;Brigitte;2004-09-08;MIASHS;1
+48412120;Duhamel;Arnaude;2005-06-13;MIASHS;1
+49655877;Martinez;Brigitte;2004-10-14;MIASHS;2
+49460064;Roche;Arthur;2005-04-20;MIASHS;2
+48977383;Albert;Arthur;2005-11-15;MIASHS;2
+48280920;Mary;François;2003-08-02;MIASHS;3
+48729266;Guichard;Brigitte;2004-11-19;MIASHS;4
+48828718;Caron;Éric;2003-06-16;MIASHS;4
+49549884;Bonnin;Grégoire;2004-08-19;MIASHS;5
+49835650;Bernard;Brigitte;2003-09-03;MIASHS;5
+49257889;Roy;Brigitte;2005-07-04;MIASHS;5
+48393693;Masse;Arthur;2004-07-11;MIASHS;5
+49715433;Le Goff;Franck;2004-10-23;MIASHS;6
+49854376;Auger;Grégoire;2004-11-21;MIASHS;6
+49926416;Toussaint;Isabelle;2005-02-14;MI;13
+48567447;Joly;Astrid;2005-01-06;PEIP;3
+48334669;Masse;Isaac;2003-09-30;PEIP;3
+49003715;Bonnet;Isaac;2005-07-15;MIASHS;2
+49715181;Diaz;Astrid;2003-08-12;MIASHS;5
+48126757;Bigot;Astrid;2004-08-15;MIASHS;5
+48751255;Gillet;Astrid;2005-12-12;MIASHS;7
+49009208;Boulanger;Stéphanie;2003-02-15;MI;13
+49235646;Leconte;Stéphane;2005-01-20;MI;14
+48454012;Louis;Étienne;2003-11-24;MI;15
+49116483;Grégoire;Stéphanie;2006-01-08;MI;23
+48718614;Guérin;Stéphane;2003-03-02;PEIP;2
+48117116;Lemonnier;Étienne;2004-10-17;MIASHS;2
+49514207;Moreno;Stéphane;2003-08-30;MIASHS;2
+48074993;Dufour;Stéphane;2003-10-14;MIASHS;6
+48779996;Peltier;Aurélie;2003-09-23;MI;11
+49278361;Wagner;Julie;2004-01-19;MI;11
+48695445;Diallo;Auguste;2003-09-15;MI;12
+48632683;Julien;Hugues;2003-09-05;MI;12
+48190066;Le Roux;Auguste;2003-11-18;MI;12
+49764853;Dumas;Aurore;2003-08-11;MI;13
+48187625;Carpentier;Suzanne;2003-12-13;MI;13
+49495483;Renault;Julien;2003-06-05;MI;15
+48924794;Barbier;Audrey;2004-03-09;MI;15
+49230516;Bazin;Lucas;2003-09-12;MI;15
+48445904;Le Roux;Suzanne;2005-08-07;MI;15
+49982535;Leblanc;Jules;2003-10-11;MI;15
+48286930;Lucas;Guy;2005-07-06;MI;15
+49044399;Toussaint;Augustin;2005-09-07;MI;21
+49882211;Maillard;Guy;2003-06-02;MI;21
+48811280;Chrétien;Luc;2003-04-13;MI;21
+49146923;Allard;Luc;2005-07-25;MI;21
+49530349;Benoit;Eugène;2003-02-12;MI;21
+48853558;Marion;Lucy;2005-12-17;MI;21
+48919005;Dupré;Auguste;2004-10-26;MI;22
+49933607;Valentin;Luce;2005-08-26;MI;23
+49285225;Legros;Lucy;2004-08-15;MI;24
+48643661;Duval;Aurélie;2004-02-06;MI;24
+48701623;Barbier;Lucie;2004-11-02;PEIP;1
+49712369;Letellier;Lucie;2004-01-16;PEIP;2
+49272640;Mahe;Aurore;2004-11-18;PEIP;2
+48017714;Mercier;Jules;2003-09-25;PEIP;2
+48079428;Reynaud;Auguste;2004-05-15;PEIP;2
+49612689;Renaud;Julie;2004-07-28;PEIP;2
+49463251;Picard;Julien;2006-01-02;PEIP;3
+49067436;Fournier;Guy;2004-10-19;MIASHS;1
+48850683;Blanc;Susan;2005-03-28;MIASHS;1
+49143725;Rey;Suzanne;2005-10-05;MIASHS;1
+48815148;Munoz;Susanne;2005-09-12;MIASHS;1
+49531171;Charrier;Juliette;2003-02-20;MIASHS;2
+48423154;Bonnin;Susanne;2005-04-21;MIASHS;2
+49933240;Picard;Hugues;2004-05-09;MIASHS;2
+48946225;Lacroix;Luc;2003-05-11;MIASHS;3
+49132618;Dubois;Auguste;2005-09-17;MIASHS;3
+49261750;Hebert;Luc;2004-02-29;MIASHS;3
+49921271;Ollivier;Julie;2005-03-14;MIASHS;4
+49752648;Torres;Luce;2003-06-06;MIASHS;4
+48233515;Garcia;Auguste;2004-12-14;MIASHS;5
+48832931;Rey;Julie;2004-03-02;MIASHS;6
+49577568;Charpentier;Julie;2006-01-15;MIASHS;6
+48157967;Bigot;Guy;2004-09-28;MIASHS;6
+48591138;Guérin;Hugues;2005-06-13;MIASHS;6
+48727488;Leroux;Lucy;2003-07-23;MIASHS;6
+49673077;Blanchet;Jules;2006-01-18;MIASHS;6
+48874005;Fernandez;Aurélie;2005-12-24;MIASHS;6
+49010638;Fischer;Eugène;2004-04-10;MIASHS;7
+49408983;Guillot;Suzanne;2006-01-03;LICAM;1
+49623451;Roussel;Luc;2004-10-02;LICAM;1
+49148527;Carlier;Hugues;2003-11-29;LICAM;1
+49385357;Lucas;Yves;2005-02-27;MI;11
+49065414;Adam;Yves;2005-10-31;MIASHS;4
+48002201;Normand;Sylvie;2003-07-31;PEIP;2
+48007966;Couturier;Hélène;2004-09-08;MI;11
+48968324;Rocher;Léon;2004-05-22;MI;11
+48557658;Pruvost;Rémy;2005-12-31;MI;13
+49712300;Laurent;Céline;2003-05-11;MI;13
+49746104;Jacquet;Gérard;2003-05-31;MI;13
+49701987;Tanguy;Hélène;2005-12-01;MI;14
+48045826;Durand;Rémy;2003-10-23;MI;14
+49682295;Moreno;Hélène;2005-06-07;MI;15
+49413769;Pierre;Jérôme;2004-03-10;MI;15
+49284203;Diaz;Rémy;2003-06-04;MI;22
+49920415;De Sousa;Véronique;2004-03-20;MI;22
+49057431;Pichon;Rémy;2004-05-15;MI;22
+48523096;Colin;Jérôme;2003-02-27;MI;22
+49433804;Marchal;Cécile;2005-11-11;MI;24
+48016098;Royer;Célina;2004-02-20;MI;24
+49659861;Besson;Véronique;2003-05-03;MI;24
+48181180;Fournier;Léon;2005-10-16;MI;24
+49167660;Wagner;Hélène;2004-06-03;MI;24
+48868012;Julien;Jérôme;2005-01-11;MI;24
+48368117;Regnier;Véronique;2003-08-12;PEIP;1
+48563541;Guillou;Rémy;2004-01-04;PEIP;2
+48955432;Robin;Jérôme;2004-04-05;PEIP;2
+48560966;Ollivier;Rémy;2003-07-08;PEIP;3
+48119390;Chrétien;Léon;2005-08-19;MIASHS;2
+48711761;Le Gall;Jérôme;2004-10-12;MIASHS;2
+48793413;Bernier;Jérôme;2004-10-15;MIASHS;2
+49206351;Moulin;Gérard;2005-08-03;MIASHS;3
+49552005;Royer;Gérard;2006-01-28;MIASHS;3
+49908105;Le Roux;Céline;2004-12-22;MIASHS;3
+48413490;Raymond;Sébastien;2004-12-16;MIASHS;4
+49566201;Delattre;Cécile;2003-03-18;MIASHS;5
+49860184;Perret;Léon;2003-09-28;MIASHS;7
+48288849;Moreau;Hélène;2004-03-28;MIASHS;7
+48012571;Hamon;Pénélope;2004-05-09;MIASHS;7
+48141131;Perrot;Cécile;2003-12-15;LICAM;1
+48907549;Tanguy;Gérard;2006-01-09;LICAM;1
diff --git a/Tp4/gestion_promo_etudiants.py b/Tp4/gestion_promo_etudiants.py
new file mode 100644
index 0000000..547ada8
--- /dev/null
+++ b/Tp4/gestion_promo_etudiants.py
@@ -0,0 +1,334 @@
+#nom:
+#prenom:
+#groupe:
+#date:
+
+
+def pour_tous(seq_bool: list[bool]) -> bool:
+    """
+    Renvoie True ssi `seq_bool` ne contient pas False
+
+    Exemples:
+
+    $$$ pour_tous([])
+    True
+    $$$ pour_tous((True, True, True))
+    True
+    $$$ pour_tous((True, False, True))
+    False
+    """
+
+    for element in seq_bool:
+        if not element:
+            return False
+    return True
+      
+            
+            
+def il_existe(seq_bool: list[bool]) -> bool:
+    """
+
+    Renvoie True si seq_bool contient au moins une valeur True, False sinon
+
+    Exemples:
+
+    $$$ il_existe([])
+    False
+    $$$ il_existe([False, True, False])
+    True
+    $$$ il_existe([False, False])
+    False
+    """
+    for element in seq_bool:
+        if element:
+            return True
+    return False
+                 
+            
+            
+            
+            
+            
+            
+            
+        
+        
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-- 
GitLab