Compare commits

..

4 Commits

Author SHA1 Message Date
s376918
48ada37c34 poprawienie czytelności wyników: SainteLague i HareNiemeyer 2018-06-30 11:51:04 +02:00
s376918
1c518ef67e usuniecie duplikatow 2018-06-30 00:09:20 +02:00
s376918
f5d4b3bdb1 metody liczenia mandatow 2018-06-30 00:02:24 +02:00
s376918
914f486d38 Metoda Sainte-Lague 2018-06-28 20:39:09 +02:00
2 changed files with 152 additions and 0 deletions

88
HareNiemeyer.py Normal file
View File

@ -0,0 +1,88 @@
# 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;
print("metoda Hare-Niemeyer'a:\n")
from ordynacja.models import Komitet
liczba_komitetow = Komitet.objects.count()
pobrane_komitety = Komitet.objects.all().order_by("kw_id")
nazwy_komitetow = []
for Komitet in pobrane_komitety:
nazwy_komitetow.append(Komitet.name)
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])
print("Okręg nr ", i+1, ": ", mandaty)
for j in range (len(mandaty)):
suma[j] = suma[j] + mandaty[j]
print("\nPodsumowanie wyników w całej Polsce: ")
for i in range(liczba_komitetow):
print(nazwy_komitetow[i], ": ", suma[i], "mandatów")
print("suma: ", sum(suma), "mandatów")

64
SainteLague.py Normal file
View File

@ -0,0 +1,64 @@
# 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;
print("metoda Sainte-Lague:\n")
from ordynacja.models import Komitet
liczba_komitetow = Komitet.objects.count()
pobrane_komitety = Komitet.objects.all().order_by("kw_id")
nazwy_komitetow = []
for Komitet in pobrane_komitety:
nazwy_komitetow.append(Komitet.name)
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])
print("Okręg nr ", i+1, ": ", mandaty)
for j in range (len(mandaty)):
suma[j] = suma[j] + mandaty[j]
print("\nPodsumowanie wyników w całej Polsce: ")
for i in range(liczba_komitetow):
print(nazwy_komitetow[i], ": ", suma[i], "mandatów")
print("suma: ", sum(suma), "mandatów")