Informations sur la validation France-IOI: Difference between revisions

From Wiki Cours
Jump to navigation Jump to search
Line 14: Line 14:


<source lang=python>
<source lang=python>
==========================================================
============================================================
NOM Prénom                 | %exo | Niv1 | Niv2 |  Note |
NOM Prénom                   | %exo | Niv1 | Niv2 |  Note |
==========================================================
============================================================
BREBAN Arthur              | 0.28 | 0.87 | 0.00 |  8.67 |
ADA SIMA MARIE JOELLE DOLIANA | 0.05 | 0.07 | 0.00 |  0.67 |
BOUDRIES Fahem              | 0.24 | 0.27 | 0.00 |  2.67 |
BEN HAMOUDA Wassim            | 0.11 | 0.07 | 0.00 |  0.67 |
CAILLAS Augustin            | 0.12 | 0.73 | 0.00 |  7.33 |
BOUDRIES Fahem                | 0.39 | 0.73 | 0.00 |  7.33 |
DE GRANDSAIGNES Hervé      | 0.09 | 0.67 | 0.00 | 6.67 |
BOUFFETIER victorien          | 0.18 | 1.00 | 0.00 | 10.00 |
EID Doris                   | 0.62 | 0.67 | 0.56 | 12.29 |
BREBAN Arthur                | 0.38 | 1.00 | 0.38 | 13.75 |
COQUIDÉ Erwan              | 0.11 | 0.80 | 0.00 |  8.00 |
BRETEL Rémi                   | 0.50 | 0.73 | 0.00 | 7.33 |
JOIE Mathieu                | 0.63 | 1.00 | 0.00 | 10.00 |
BRILLOUET Pierre              | 0.59 | 0.87 | 0.00 |  8.67 |
FLORES GALICIA Fatima      | 0.27 | 0.47 | 0.00 | 4.67 |
CAILLAS Augustin              | 0.19 | 1.00 | 0.25 | 12.50 |
LIÉNARD--MAYOR Théo        | 0.44 | 0.80 | 0.00 |  8.00 |
CASTELAIN Maxime              | 0.34 | 1.00 | 0.50 | 15.00 |
DEFOORT Grégoire            | 0.33 | 0.60 | 0.00 |  6.00 |
COQUIDÉ Erwan                | 0.11 | 0.80 | 0.00 |  8.00 |
LOUIS DE CANONVILLE Cyprien | 0.10 | 0.73 | 0.00 |  7.33 |
DE GRANDSAIGNES Hervé        | 0.09 | 0.67 | 0.00 |  6.67 |
VIDALOT Jeoffray           | 0.49 | 0.67 | 0.00 |  6.67 |
DEFOORT Grégoire              | 0.40 | 0.73 | 0.00 |  7.33 |
MARENA Kéba                | 0.12 | 0.07 | 0.00 | 0.67 |
DEPONTAILLER Lucie           | 0.56 | 0.80 | 0.00 |  8.00 |
DEPONTAILLER Lucie          | 0.49 | 0.73 | 0.00 7.33 |
DIAF Mohamed                  | 0.71 | 0.93 | 0.12 | 10.58 |
LIANG chenmeijing          | 0.14 | 0.13 | 0.00 |  1.33 |
EID Doris                    | 0.55 | 0.80 | 0.19 9.88 |
LIM kyungtak                | 0.99 | 1.00 | 1.00 | 20.00 |
FLORES GALICIA Fatima        | 0.27 | 0.47 | 0.00 |  4.67 |
LIU Shu                    | 0.51 | 0.73 | 0.00 |  7.33 |
GUERFA Driffa                | 0.72 | 0.93 | 0.44 | 13.71 |
LI Ying                    | 0.55 | 0.73 | 0.00 |  7.33 |
HU Xu                        | 0.60 | 0.93 | 0.00 |  9.33 |
GUERFA Driffa              | 0.55 | 0.87 | 0.00 | 8.67 |
JALAL Yassine                | 0.33 | 0.67 | 0.00 |  6.67 |
DIAF Mohamed               | 0.57 | 0.67 | 0.00 |  6.67 |
JOIE Mathieu                  | 0.80 | 1.00 | 0.44 | 14.38 |
NOUR-EDDINE Imam            | 0.14 | 0.13 | 0.00 |  1.33 |
JULIEN Claveau               | 0.00 | 0.00 | 0.00 |  0.00 |
LEFEBVRE corentin           | 0.39 | 0.60 | 0.50 | 11.00 |
KUMAR ritesh                  | 0.12 | 0.13 | 0.00 |  1.33 |
BRILLOUET Pierre            | 0.51 | 0.73 | 0.00 |  7.33 |
LEFEBVRE corentin             | 0.40 | 0.80 | 0.19 | 9.88 |
REZARD Quentin              | 0.23 | 0.27 | 0.00 |  2.67 |
LI Ying                      | 0.61 | 0.93 | 0.00 |  9.33 |
BRETEL Rémi                | 0.34 | 0.47 | 0.00 | 4.67 |
LIANG chenmeijing            | 0.17 | 0.13 | 0.00 |  1.33 |
KUMAR ritesh                | 0.12 | 0.13 | 0.00 | 1.33 |
LIM kyungtak                  | 1.00 | 1.00 | 1.00 | 20.00 |
SUREAU Robin                | 0.30 | 0.27 | 0.00 2.67 |
LIU Shu                      | 0.63 | 1.00 | 0.00 | 10.00 |
SAMB cheikh                | 0.16 | 0.27 | 0.00 |  2.67 |
LIÉNARD--MAYOR Théo          | 0.48 | 1.00 | 0.00 | 10.00 |
SIMON Stéphane             | 0.23 | 0.27 | 0.00 |  2.67 |
LOUIS DE CANONVILLE Cyprien  | 0.13 | 0.80 | 0.12 9.25 |
CASTELAIN Maxime            | 0.23 | 0.73 | 0.00 |  7.33 |
MARENA Kéba                  | 0.15 | 0.07 | 0.00 |  0.67 |
HU Xu                      | 0.50 | 0.73 | 0.00 |  7.33 |
NOUR-EDDINE Imam             | 0.14 | 0.13 | 0.00 |  1.33 |
VANDERMAESEN Tiphaine      | 0.32 | 0.87 | 0.00 |  8.67 |
REZARD Quentin                | 0.23 | 0.27 | 0.00 |  2.67 |
BOUFFETIER victorien        | 0.15 | 0.73 | 0.00 |  7.33 |
SAMB cheikh                  | 0.25 | 0.67 | 0.00 |  6.67 |
BEN HAMOUDA Wassim          | 0.11 | 0.07 | 0.00 | 0.67 |
SIMON Stéphane                | 0.31 | 0.47 | 0.00 |  4.67 |
JALAL Yassine              | 0.11 | 0.27 | 0.00 2.67 |
SUREAU Robin                  | 0.42 | 0.60 | 0.00 |  6.00 |
ZHOU YUANZHE               | 0.04 | 0.07 | 0.00 |  0.67 |
VANDERMAESEN Tiphaine        | 0.35 | 1.00 | 0.00 | 10.00 |
==========================================================
VIDALOT Jeoffray              | 0.54 | 0.80 | 0.19 9.88 |
ZHOU YUANZHE                 | 0.04 | 0.07 | 0.00 |  0.67 |
============================================================
</source>
</source>


Elles sont générées avec le script suivant:
Elles sont générées avec le script suivant:
<source lang=python>
<source lang=python>
"""                                                                                                              
"""                                                                                                            
   Un script qui analyse les résultats d'une classe sur http://www.france-ioi.org                                
   Un script qui analyse les résultats d'une classe sur http://www.france-ioi.org                              
   et qui produit un tableau de la validation des élèves.                                                        
   et qui produit un tableau de la validation des élèves.                                                      
   écrit le 5/10/16 par Guillaume Roux (Université Paris Sud)                                                    
   écrit par Guillaume Roux (Université Paris Sud)                                                              
   merci de me rapporter les bugs.                                                                                
   merci de me rapporter les bugs.                                                                              
                                                                                                               
  Utilisation sous Linux:                                                                                     
      python3 validation-france-ioi.py                                                                         
                                                                                                               
  ToDo list:                                                                                                   
  * recuperer le fichier depuis internet via le numero de groupe ou un lien                                   
  * eliminer les superviseurs des membres                                                                     
  * verifier automatiquement qu'il n'y a pas d'anomalies dans les dates de resolution (triche)                 
  * faire afficher les moyennes et la date de validation                                                       
  * export vers tableau Excell ou OpenOffice                                                                   
"""
"""
from html.parser import HTMLParser
from html.parser import HTMLParser
exercises = []
jumped = ["c'est plus, c'est moins",": mélange explosif"]
niveau1 = ["Dans le fourré","Vendanges","Course avec les enfants","Construction d'une pyramide","La Grande Brade\
rie","Socles pour statues","Le plus beau Karva","Concours de tir à la corde","Mot de passe du village","Planning\
de la journée","Le juste prix","Casernes de pompiers","Zones de couleurs","Département d'architecture : constru\
ction d'une pyramide","Département de chimie"]
niveau2 = ["Augmentation des taxes","Achat de livres","Une belle récolte","La roue de la fortune","Visite de la \
mine","Banquet municipal","Choix des emplacements","Une ligne sur deux ","Lire ou ne pas lire, telle est la ques\
tion","Analyse de fréquence","Écriture en miroir","La bataille","Analyse d’une langue","Sans espaces","Formes cr\
euses","Convertisseur d'unités"]


class Member(object):
class Member(object):


     def __init__(self,name,num):
     def __init__(self,name,num):
        self.name = name
self.name = name
        tmp = name.split()
tmp = name.split()
         self.nicename = " ".join(tmp[:-2]).upper()+" "+tmp[-2]
         self.nicename = " ".join(tmp[:-2]).upper()+" "+tmp[-2]
         self.number = num
         self.number = num
        self.note = 0
         self.results = dict()
         self.results = dict()
        self.note_niveau1 = 0
        self.note_niveau2 = 0


jumped = ["c'est plus, c'est moins",": mélange explosif"]
    def note(self,exos=[]):
niveau1 = ["Dans le fourré","Vendanges","Course avec les enfants","Construction d'une pyramide","La Grande Braderi\
        if exos: return sum([self.results[e] for e in exos])/len(exos)
e","Socles pour statues","Le plus beau Karva","Concours de tir à la corde","Mot de passe du village","Planning de \
        else: return 0.0
la journée","Le juste prix","Casernes de pompiers","Zones de couleurs","Département d'architecture : construction \
 
d'une pyramide","Département de chimie"]
    def showResults(self):
niveau2 = ["Augmentation des taxes","Achat de livres","Une belle récolte","La roue de la fortune","Visite de la mi\
        note = 0
ne","Banquet municipal","Choix des emplacements","Une ligne sur deux ","Lire ou ne pas lire, telle est la question\
        for exo in exercises:
","Analyse de fréquence","Écriture en miroir","La bataille","Analyse d’une langue","Sans espaces","Formes creuses"\
            note += self.results[exo]
,"Convertisseur d'unités"]
            print("\t",exo,":",self.results[exo])
niveau1max = len(niveau1)
niveau2max = len(niveau2)


# create a subclass and override the handler methods                                                             
class Parser(HTMLParser):
class Parser(HTMLParser):
     def __init__(self):
     def __init__(self):
         HTMLParser.__init__(self)
         HTMLParser.__init__(self)
Line 97: Line 115:
         self.exotype = False
         self.exotype = False
         self.members = []
         self.members = []
        self.exercises = []
         self.curexo = ""
         self.curexo = ""
         self.mcount = 0
         self.mcount = 0
Line 105: Line 122:


     def handle_starttag(self, tag, attrs):
     def handle_starttag(self, tag, attrs):
        #print( "Encountered a start tag:", tag, attrs)                                                           
         self.inlycee = self.exotype = False
         self.inlycee = self.exotype = False
         for attr in attrs[:1]:
         for attr in attrs[:1]:
Line 122: Line 138:
                     self.members.append(Member(data,self.mcount))
                     self.members.append(Member(data,self.mcount))
                     self.mcount += 1
                     self.mcount += 1
             if self.curexo in self.exercises and self.count<len(self.members):
             if self.curexo in exercises and self.count<len(self.members):
self.members[self.count].results[self.curexo] = self.solved
                self.members[self.count].results[self.curexo] = self.solved
                self.members[self.count].note += self.solved
                if self.curexo in niveau1:
                    self.members[self.count].note_niveau1 += self.solved
                if self.curexo in niveau2:
                    self.members[self.count].note_niveau2 += self.solved
                 self.count += 1
                 self.count += 1
         if self.exotype and len(data)>=3:
         if self.exotype and len(data)>=3:
             if "«" in data: data = data[:24]
             if "«" in data: data = data[:24]
             if not data in jumped:
             if not data in jumped:
self.curexo = data
                self.curexo = data
                 self.count = 0
                 self.count = 0
                 if (not data in self.exercises) and self.exocount<114:
                 if (not data in exercises) and self.exocount<114:
                     self.exocount += 1
                     self.exocount += 1
                     self.exercises.append(data)
                     exercises.append(data)


     def showMembers(self):
     def showMembers(self):
        totalexo = len(self.exercises)
#       print("Found",len(self.members),"members")                                                            
        #print("Found",len(self.members),"members")                                                              
         maxlenname = max([len(m.nicename) for m in self.members])
         maxlenname = max([len(m.nicename) for m in self.members])
         barre = "="*(maxlenname+31)
         barre = "="*(maxlenname+31)
         print(barre)
         print(barre)
print("NOM Prénom".ljust(maxlenname),"%exo","Niv1","Niv2","Note".rjust(5),sep=" | ",end=" |\n")
        print("NOM Prénom".ljust(maxlenname),"%exo","Niv1","Niv2","Note".rjust(5),sep=" | ",end=" |\n")
         print(barre)
         print(barre)
         for m in self.members:
         for m in sorted(self.members,key=lambda x: x.nicename):
             pexo = "{:.2f}".format(m.note/totalexo)
             pexo = "{:.2f}".format(m.note(exercises))
             pniv1 = "{:.2f}".format(m.note_niveau1/niveau1max)
             pniv1 = "{:.2f}".format(m.note(niveau1))
             pniv2 = "{:.2f}".format(m.note_niveau2/niveau2max)
             pniv2 = "{:.2f}".format(m.note(niveau2))
             nf = "{:.2f}".format((m.note_niveau1/niveau1max+m.note_niveau2/niveau2max)*10)
             nf = "{:.2f}".format((m.note(niveau1)+m.note(niveau2))*10)
             print(m.nicename.ljust(maxlenname),pexo,pniv1,pniv2,nf.rjust(5),sep=" | ",end=" |\n")
             print(m.nicename.ljust(maxlenname),pexo,pniv1,pniv2,nf.rjust(5),sep=" | ",end=" |\n")
         print(barre)
         print(barre)


     def showResults(self,number=None,verbose=False):
    def showExercises(self):
        print("Found",len(exercises),"exercises")
        for e in exercises: print(e)
 
     def showResults(self,number=None):
         if number is None: number = range(len(self.members))
         if number is None: number = range(len(self.members))
        if verbose:
            print("Found",len(self.exercises),"exercises")
            for e in self.exercises: print(e)
         print("__"*20)
         print("__"*20)
         for n in number:
         for n in number:
            note = 0
             print("Résultat de",self.members[n].nicename,"note :",\
             print("Résultat de",self.members[n].nicename,"note :",\
                   self.members[n].note)
                   self.members[n].note(exercises))
             if verbose:
             self.members[n].showResults()
                for exo in self.exercises:
                    note += self.members[n].results[exo]
                    print("\t",exo,":",self.members[n].results[exo])
                print( note )


# mettez ici le chemin vers votre fichier à analyser                                                              
# mettez ici le chemin vers votre fichier à analyser                                                            
fichier = "France-IOI.html"
fichier = "France-IOI.html"
parser = Parser()
parser = Parser()
Line 178: Line 184:
source.close()
source.close()
parser.showMembers()
parser.showMembers()
#parser.showResults([0,4,5])
#parser.showResults([8])                                                    
</source>
</source>

Revision as of 16:23, 13 October 2016

<-- Site du cours

Changements dans les dates requises de validation : il vous faut

  • valider le niveau I pour le 20/10/16
  • valider le niveau II pour le 10/11/16

France-IOI vous permet de travailler en autonomie en dehors des séances de TDs. On privilégiera maintenant les exercices des TDs, la validation consistera donc à du travail personnel.

Notes de validation provisoires des étudiants au 06/10/16

La note sur 20 est calculée selon la formule :

============================================================
NOM Prénom                    | %exo | Niv1 | Niv2 |  Note |
============================================================
ADA SIMA MARIE JOELLE DOLIANA | 0.05 | 0.07 | 0.00 |  0.67 |
BEN HAMOUDA Wassim            | 0.11 | 0.07 | 0.00 |  0.67 |
BOUDRIES Fahem                | 0.39 | 0.73 | 0.00 |  7.33 |
BOUFFETIER victorien          | 0.18 | 1.00 | 0.00 | 10.00 |
BREBAN Arthur                 | 0.38 | 1.00 | 0.38 | 13.75 |
BRETEL Rémi                   | 0.50 | 0.73 | 0.00 |  7.33 |
BRILLOUET Pierre              | 0.59 | 0.87 | 0.00 |  8.67 |
CAILLAS Augustin              | 0.19 | 1.00 | 0.25 | 12.50 |
CASTELAIN Maxime              | 0.34 | 1.00 | 0.50 | 15.00 |
COQUIDÉ Erwan                 | 0.11 | 0.80 | 0.00 |  8.00 |
DE GRANDSAIGNES Hervé         | 0.09 | 0.67 | 0.00 |  6.67 |
DEFOORT Grégoire              | 0.40 | 0.73 | 0.00 |  7.33 |
DEPONTAILLER Lucie            | 0.56 | 0.80 | 0.00 |  8.00 |
DIAF Mohamed                  | 0.71 | 0.93 | 0.12 | 10.58 |
EID Doris                     | 0.55 | 0.80 | 0.19 |  9.88 |
FLORES GALICIA Fatima         | 0.27 | 0.47 | 0.00 |  4.67 |
GUERFA Driffa                 | 0.72 | 0.93 | 0.44 | 13.71 |
HU Xu                         | 0.60 | 0.93 | 0.00 |  9.33 |
JALAL Yassine                 | 0.33 | 0.67 | 0.00 |  6.67 |
JOIE Mathieu                  | 0.80 | 1.00 | 0.44 | 14.38 |
JULIEN Claveau                | 0.00 | 0.00 | 0.00 |  0.00 |
KUMAR ritesh                  | 0.12 | 0.13 | 0.00 |  1.33 |
LEFEBVRE corentin             | 0.40 | 0.80 | 0.19 |  9.88 |
LI Ying                       | 0.61 | 0.93 | 0.00 |  9.33 |
LIANG chenmeijing             | 0.17 | 0.13 | 0.00 |  1.33 |
LIM kyungtak                  | 1.00 | 1.00 | 1.00 | 20.00 |
LIU Shu                       | 0.63 | 1.00 | 0.00 | 10.00 |
LIÉNARD--MAYOR Théo           | 0.48 | 1.00 | 0.00 | 10.00 |
LOUIS DE CANONVILLE Cyprien   | 0.13 | 0.80 | 0.12 |  9.25 |
MARENA Kéba                   | 0.15 | 0.07 | 0.00 |  0.67 |
NOUR-EDDINE Imam              | 0.14 | 0.13 | 0.00 |  1.33 |
REZARD Quentin                | 0.23 | 0.27 | 0.00 |  2.67 |
SAMB cheikh                   | 0.25 | 0.67 | 0.00 |  6.67 |
SIMON Stéphane                | 0.31 | 0.47 | 0.00 |  4.67 |
SUREAU Robin                  | 0.42 | 0.60 | 0.00 |  6.00 |
VANDERMAESEN Tiphaine         | 0.35 | 1.00 | 0.00 | 10.00 |
VIDALOT Jeoffray              | 0.54 | 0.80 | 0.19 |  9.88 |
ZHOU YUANZHE                  | 0.04 | 0.07 | 0.00 |  0.67 |
============================================================

Elles sont générées avec le script suivant:

"""                                                                                                              
   Un script qui analyse les résultats d'une classe sur http://www.france-ioi.org                                
   et qui produit un tableau de la validation des élèves.                                                        
   écrit par Guillaume Roux (Université Paris Sud)                                                               
   merci de me rapporter les bugs.                                                                               
                                                                                                                 
   Utilisation sous Linux:                                                                                       
      python3 validation-france-ioi.py                                                                           
                                                                                                                 
   ToDo list:                                                                                                    
   * recuperer le fichier depuis internet via le numero de groupe ou un lien                                     
   * eliminer les superviseurs des membres                                                                       
   * verifier automatiquement qu'il n'y a pas d'anomalies dans les dates de resolution (triche)                  
   * faire afficher les moyennes et la date de validation                                                        
   * export vers tableau Excell ou OpenOffice                                                                    
"""
from html.parser import HTMLParser

exercises = []
jumped = ["c'est plus, c'est moins",": mélange explosif"]
niveau1 = ["Dans le fourré","Vendanges","Course avec les enfants","Construction d'une pyramide","La Grande Brade\
rie","Socles pour statues","Le plus beau Karva","Concours de tir à la corde","Mot de passe du village","Planning\
 de la journée","Le juste prix","Casernes de pompiers","Zones de couleurs","Département d'architecture : constru\
ction d'une pyramide","Département de chimie"]
niveau2 = ["Augmentation des taxes","Achat de livres","Une belle récolte","La roue de la fortune","Visite de la \
mine","Banquet municipal","Choix des emplacements","Une ligne sur deux ","Lire ou ne pas lire, telle est la ques\
tion","Analyse de fréquence","Écriture en miroir","La bataille","Analyse d’une langue","Sans espaces","Formes cr\
euses","Convertisseur d'unités"]

class Member(object):

    def __init__(self,name,num):
	self.name = name
	tmp = name.split()
        self.nicename = " ".join(tmp[:-2]).upper()+" "+tmp[-2]
        self.number = num
        self.results = dict()

    def note(self,exos=[]):
        if exos: return sum([self.results[e] for e in exos])/len(exos)
        else: return 0.0

    def showResults(self):
        note = 0
        for exo in exercises:
            note += self.results[exo]
            print("\t",exo,":",self.results[exo])

class Parser(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)
        self.inlycee = False
        self.exotype = False
        self.members = []
        self.curexo = ""
        self.mcount = 0
        self.exocount = 0
        self.solved = 0
        self.count = 0

    def handle_starttag(self, tag, attrs):
        self.inlycee = self.exotype = False
        for attr in attrs[:1]:
            self.inlycee = attr[0] == 'class' and attr[1] == "lycee_resume_value"
            self.exotype = attr[0] == 'href' and \
                           attr[1][:35] == "http://www.france-ioi.org/algo/task"
        if self.inlycee and len(attrs)==2:
            self.solved = int(attrs[1][1]=="background-color:lightgreen")
        else:
            self.solved = 0

    def handle_data(self, data):
        if self.inlycee:
            if '(' in data:
                if not data in [m.name for m in self.members]:
                    self.members.append(Member(data,self.mcount))
                    self.mcount += 1
            if self.curexo in exercises and self.count<len(self.members):
                self.members[self.count].results[self.curexo] = self.solved
                self.count += 1
        if self.exotype and len(data)>=3:
            if "«" in data: data = data[:24]
            if not data in jumped:
                self.curexo = data
                self.count = 0
                if (not data in exercises) and self.exocount<114:
                    self.exocount += 1
                    exercises.append(data)

    def showMembers(self):
#        print("Found",len(self.members),"members")                                                              
        maxlenname = max([len(m.nicename) for m in self.members])
        barre = "="*(maxlenname+31)
        print(barre)
        print("NOM Prénom".ljust(maxlenname),"%exo","Niv1","Niv2","Note".rjust(5),sep=" | ",end=" |\n")
        print(barre)
        for m in sorted(self.members,key=lambda x: x.nicename):
            pexo = "{:.2f}".format(m.note(exercises))
            pniv1 = "{:.2f}".format(m.note(niveau1))
            pniv2 = "{:.2f}".format(m.note(niveau2))
            nf = "{:.2f}".format((m.note(niveau1)+m.note(niveau2))*10)
            print(m.nicename.ljust(maxlenname),pexo,pniv1,pniv2,nf.rjust(5),sep=" | ",end=" |\n")
        print(barre)

    def showExercises(self):
        print("Found",len(exercises),"exercises")
        for e in exercises: print(e)

    def showResults(self,number=None):
        if number is None: number = range(len(self.members))
        print("__"*20)
        for n in number:
            print("Résultat de",self.members[n].nicename,"note :",\
                  self.members[n].note(exercises))
            self.members[n].showResults()

# mettez ici le chemin vers votre fichier à analyser                                                             
fichier = "France-IOI.html"
parser = Parser()
source = open(fichier, 'r')
parser.feed(source.read())
source.close()
parser.showMembers()
#parser.showResults([8])