Programme star.py


# question 1,2
#
# extrait du fichier une matrice de n lignes et deux colonnes
# separateur de ligne \n
# separateur de colonne \t
#
def lit_fichier (file) :
    f = open (file, "r")
    li = f.readlines ()   # separation en lignes
    f.close ()
    
    mat = []
    for l in li :
        s = l.replace ("\n", "")
        s = s.split ("\t")  # separation en colonne
        if len (s) == 2 :
            # ce test est ajoute pour verifier qu'on ajoute pas 
            # des lignes vides dans la matrice
            # les lignes vides ne contiennent pas de separateur \t 
            # et ne contiennent qu'une colonne
            mat.append (s)
    return mat
    
# question 3    
def prenom_frequent (mat) :
    # les prenoms sont en colonne 0
    res = { }
    for i in range (0, len (mat)) :
        p = mat [i][0]
        if p in res : res [p] += 1
        else : res [p] = 1
            
    # on recherche le maximum : maximum sur toutes les valeurs
    mx = max ( res.values () )
    
    # on recherche tous les prenoms qui sont aussi frequent que mx
    freq = []
    for p in res :
        if res [p] == mx : freq.append (p)
            
    return freq,mx
    
# question 4
def family_group (mat) :
    # on choisit de representer les familles sont la forme d'un dictionnaire de listes
    # cle : parents (colonne 1 de mat)
    # valeur : liste de prenoms (colonne 0 de mat)
    res = { }
    for i in range (0, len (mat)) :
        pr = mat [i][0]
        pa = mat [i][1]
        if pa in res : res [pa].append (pr) # on ajoute le prenom a la liste
        else : res [pa] = [ pr ]   # liste d'un seul prenom
    return res
    
# question 5
def moyenne_mediane (dico) :
    # on repart du resultat de la fonction family_group
    # et on construit la liste des tailles de familles
    taille = []
    for pa in dico :
        taille.append ( len (dico [pa] ) )
    
    moyenne = float (sum (taille)) / len (taille)
    taille.sort ()
    mediane = taille [ len (taille) / 2 ]
    return moyenne, mediane
    
# test    
mat = lit_fichier ("star.txt")
freq,mx = prenom_frequent (mat)
print "prenom frequents ", freq
print "present ", mx, " fois"
fam = family_group (mat)
moyenne, mediane = moyenne_mediane (fam)
print "moyenne ", moyenne, " mediane ", mediane

for pa in fam :
    print pa
    for pr in fam [pa] :
        print "    ", pr

créé avec py2html version:0.62