# 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