vendredi 25 mai 2007

répartition proportionelle

La répartition des sièges à la proportionelle peut se faire en utilisant la méthode de Hondt, qui correspond au programme suivant en langage Python. Dans la fonction ci dessous results est la liste des scores obtenus par les candidats, sieges le nombre de sièges à pourvoir, mini le nombre de siège minimal à affecter à chaque liste, maxi le nombre de sièges maximal pour une liste. La fonction retourne une liste contenant le nombre de sièges pour chaque candidat.

def hondt(results, sieges, mini=0, maxi=None):
if not maxi:
maxi = sieges
nb_listes = len(results)
r = [(1E99,liste) for liste in range(nb_listes)] * mini
for liste,score in enumerate(results):
r += [ (score/float(x+1), liste) for x in range(mini,maxi) ]
r.sort()

repart = [0]*nb_listes
for score,liste in r[-sieges:]:
repart[liste]+=1
return repart

Par exemple pour repartir 20 sièges entre 4 listes qui ont fait respectivement 23,40,17 et 10% des voix:

>>> hondt([23,40,17,10], 20)
[5, 9, 4, 2]

Aucun commentaire: