import random def genere_fichier_exemple (nom) : """cette fonction cree un fichier d'exemple contenant des prenoms et des reponses, le format est le suivant : prenom, espace, liste des reponses mise bout a bout, passage a la ligne""" prenom = [ "jean", "cecile", "juliette", "daniel", "julie", \ "gerard", "amelie", "charles", "alix", "frederic", \ "claire", "richard" ] f = open (nom, "w") for p in prenom : f.write (p) f.write (" ") for i in range (0,20) : a = random.randint (0,5) + 1 f.write (str (a)) f.write ("\n") f.close () class Personne : """on definit une personne""" def __init__ (self, prenom, reponse) : self.prenom = prenom self.reponse = reponse self.commun = 0 # compte le nombre de points communs def __cmp__ (self, autre) : """operateur de comparaison, reponse a la question 5""" if self.commun == autre.commun : return 0 if self.commun < autre.commun : return -1 return 1 def __str__ (self) : """pour l'affichage""" s = self.prenom + "\t" + str (self.commun) return s def point_commun (self, autre) : """calcul le nombre de points commun entre deux personnes""" s = 0 for i in range (0, len (self.reponse)) : if self.reponse [i] == autre.reponse [i] : s += 1 return s def lit_reponse (nom) : """on relie le fichier ecrit avec la fonction precedente""" f = open (nom, "r") line = f.readlines () f.close () rep = [] for l in line : s = l.replace ("\n", "") # on enleve les fins de ligne spl = s.split () # on coupe la ligne en deux, les deux morceaux # separes par des espaces rep.append ( Personne ( spl [0], spl [1] )) return rep def point_commun (n, rep) : """calcule le nombre de points communs entre rep [n] et rep [i], stocke le resultat dans rep [i].commun""" for r in rep : d = r.point_commun (rep [n]) r.commun = d ########################################################### # debut du programme ########################################################### # creation du fichier genere_fichier_exemple ("reponses.txt") # relecture du fichier rep = lit_reponse ("reponses.txt") # calcule les points communs point_commun (0, rep) # on les trie par ordre croissant rep.sort () print "le ou la plus proche ", rep [len (rep)-1] print "le ou la plus loin ", rep [0] # liste complete for r in rep : print r