From f5d4b3bdb1c8b60cf014a2052316262c4a652fbb Mon Sep 17 00:00:00 2001 From: s376918 Date: Sat, 30 Jun 2018 00:02:24 +0200 Subject: [PATCH] metody liczenia mandatow --- HareNiemeyer.py | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ SainteLague.py | 55 +++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 HareNiemeyer.py create mode 100644 SainteLague.py diff --git a/HareNiemeyer.py b/HareNiemeyer.py new file mode 100644 index 0000000..ccfb23c --- /dev/null +++ b/HareNiemeyer.py @@ -0,0 +1,77 @@ +# Metoda Hare-Niemeyer'a + + +import os, sys +proj_path = "C:/inzynierski/ordynacje" +# This is so Django knows where to find stuff. +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ordynacje.settings") +sys.path.append(proj_path) + +# This is so my local_settings.py gets loaded. +os.chdir(proj_path) + +# This is so models get loaded. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() + + + +def HareNiemeyer (nr_okregu, liczba_mandatow): + from ordynacja.models import Glos + pobrane_glosy = Glos.objects.filter(okreg=nr_okregu).order_by("komitet") + + from ordynacja.models import Komitet + liczba_komitetow = Komitet.objects.count() + + glosy = [] + uzyskane_mandaty = [] + mandaty_ulamkowe = [] + licznik_mandatow = 0 + wszystkie_glosy = 0 + + for Glos in pobrane_glosy: + glosy.append(Glos.liczba) + #print(glosy) + + wszystkie_glosy = sum(glosy) + + # oblicz "pelne" mandaty + for i in range (liczba_komitetow): + mandaty_ulamkowe.append( float(glosy[i]*liczba_mandatow) / wszystkie_glosy) + uzyskane_mandaty.append(int(mandaty_ulamkowe[i])) + mandaty_ulamkowe[i] = mandaty_ulamkowe[i] - uzyskane_mandaty[i] + licznik_mandatow = licznik_mandatow + uzyskane_mandaty[i] + + #print(uzyskane_mandaty) + #print(licznik_mandatow) + #print(mandaty_ulamkowe) + + # rozdziel pozostałe mandaty między komitety z najwyższymi ułamkami mandatu + while (licznik_mandatow < liczba_mandatow): + max = -1 + for i in range(liczba_komitetow): + if max < mandaty_ulamkowe[i]: + max = mandaty_ulamkowe[i] + maxIndeks = i + uzyskane_mandaty[maxIndeks] = uzyskane_mandaty[maxIndeks] + 1 + licznik_mandatow = licznik_mandatow + 1 + mandaty_ulamkowe[maxIndeks] = 0 + + #print(uzyskane_mandaty) + #print(licznik_mandatow) + #print(mandaty_ulamkowe) + return uzyskane_mandaty; + +from ordynacja.models import Komitet +liczba_komitetow = Komitet.objects.count() +suma = [0] * liczba_komitetow + +liczba_okregow = 41 +mandaty_w_okregach = [12,8,14,12,13,15,12,12,10,9,12,8,14,10,9,10,9,12,20,12,12,11,15,14,12,14,9,7,9,9,12,9,16,8,10,12,9,9,10,8,12] #zgodnie z wyborami parlamentarnymi 2015 + +for i in range(liczba_okregow): + mandaty = HareNiemeyer(i+1, mandaty_w_okregach[i]) + for j in range (len(mandaty)): + suma[j] = suma[j] + mandaty[j] + +print(suma) \ No newline at end of file diff --git a/SainteLague.py b/SainteLague.py new file mode 100644 index 0000000..5eb00e2 --- /dev/null +++ b/SainteLague.py @@ -0,0 +1,55 @@ +# Metoda Sainte-Lague + + +import os, sys +proj_path = "C:/inzynierski/ordynacje" +# This is so Django knows where to find stuff. +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ordynacje.settings") +sys.path.append(proj_path) + +# This is so my local_settings.py gets loaded. +os.chdir(proj_path) + +# This is so models get loaded. +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() + + + +def sainteLague (nr_okregu, liczba_mandatow): + from ordynacja.models import Glos + pobrane_glosy = Glos.objects.filter(okreg=nr_okregu).order_by("komitet") + + glosy = [] + uzyskane_mandaty = [] + for Glos in pobrane_glosy: + glosy.append(Glos.liczba) + uzyskane_mandaty.append(0) + #print(glosy) + + + + for j in range(liczba_mandatow): + imax = 0 + for i in range(len(glosy)): + if (glosy[i]/(2 * uzyskane_mandaty[i] + 1)) > (glosy[imax]/(2 * uzyskane_mandaty[imax] + 1)): + imax = i + + uzyskane_mandaty[imax] = uzyskane_mandaty[imax] + 1 + + #print(uzyskane_mandaty) + return uzyskane_mandaty; + +from ordynacja.models import Komitet +liczba_komitetow = Komitet.objects.count() +suma = [0] * liczba_komitetow + +liczba_okregow = 41 +mandaty_w_okregach = [12,8,14,12,13,15,12,12,10,9,12,8,14,10,9,10,9,12,20,12,12,11,15,14,12,14,9,7,9,9,12,9,16,8,10,12,9,9,10,8,12] #zgodnie z wyborami parlamentarnymi 2015 + +for i in range(liczba_okregow): + mandaty = sainteLague(i+1, mandaty_w_okregach[i]) + for j in range (len(mandaty)): + suma[j] = suma[j] + mandaty[j] + +print(suma) \ No newline at end of file