D’hont Sistemi Hesaplama – Python

Dhont sistemi, Belçikalı hukukçu ve matematikçi Victor D’Hondt tarafından 1878’de tasarlanmış nispi temsil sistemidir¹². Bu sistemde, bir seçim bölgesinde her partinin aldığı oy toplamı, sırasıyla 1’e, 2’ye, 3’e, 4’e … bölünür ve o seçim bölgesinin çıkaracağı milletvekili sayısına ulaşıncaya kadar bu işleme devam edilir¹². Elde edilen paylar, parti farkı gözetmeksizin, büyükten küçüğe doğru sıralanır. Milletvekillikleri bu sıralamaya göre partilere tahsis edilir¹².

Örneğin, 7 milletvekili çıkaracak bir seçim bölgesinde A Partisi 60.000, B Partisi 25.000, C Partisi 14.000 oy almış olsun. Bu durumda aşağıdaki tablo oluşur:

PartilerOy/1Oy/2Oy/3Oy/4Oy/5Partinin çıkardığı milletvekili sayısı
A Partisi60.00030.00020.00015.00012.0004
B Partisi25.00012.5008.3336.2505.0002
C Partisi14.0007.0004.6673.5002.8001

En yüksek 7 rakam ve bu rakamın denk geldiği partiler tespit edilerek çıkarılacak milletvekillikleri bulunur (kalın yazılı olanlar). Buna göre A partisi 4, B partisi 2 ve C partisi 1 milletvekili çıkarır.

Dhont sistemi Türkiye’de de uygulanmaktadır²³⁴. Ancak bu sistemde baraj uygulaması da vardır. Yani bir parti yüzde 10’luk barajı geçemezse milletvekili çıkaramaz³⁴.

import heapq # max-heap veri yapısı için heapq modülünü içe aktar

# Partilerin aldıkları oy sayılarını ve seçim bölgesinin çıkaracağı milletvekili sayısını girdi olarak al
oylar = {"A": 60000, "B": 25000, "C": 14000} # Partilerin aldıkları oy sayılarını bir sözlük içinde tut
n = 7 # Seçim bölgesinin çıkaracağı milletvekili sayısı

# Girdileri doğrula
assert isinstance(oylar, dict) # oyların bir sözlük olduğunu kontrol et
assert all(isinstance(parti, str) for parti in oylar) # partilerin string olduğunu kontrol et
assert all(isinstance(oy, int) and oy > 0 for oy in oylar.values()) # oyların pozitif tam sayı olduğunu kontrol et
assert isinstance(n, int) and n > 0 # milletvekili sayısının pozitif tam sayı olduğunu kontrol et
assert n <= sum(oylar.values()) # milletvekili sayısının oyların toplamından küçük veya eşit olduğunu kontrol et

# Partilerin aldıkları oy sayılarını 1'den başlayarak artan şekilde böl ve elde edilen payları bir liste içinde tut
def paylari_hesapla(oylar, n):
    """Partilerin aldıkları oy sayılarını 1'den n'e kadar olan sayılara bölerek elde edilen payları bir liste içinde döndüren fonksiyon"""
    paylar = [] # Payları tutacak boş bir liste oluştur
    for parti in oylar: # Her parti için
        for i in range(1, n+1): # 1'den n'e kadar olan sayılar için
            pay = oylar[parti] / i # Partinin aldığı oy sayısını i'ye böl
            paylar.append((pay, parti)) # Elde edilen payı ve partiyi bir demet olarak listeye ekle
    return paylar

# Listeyi büyükten küçüğe doğru sırala ve ilk n tane payı seç
def en_buyuk_n_payi_sec(paylar, n):
    """Bir liste içindeki paylardan en büyük n tanesini seçen ve seçilen payları bir liste içinde döndüren fonksiyon"""
    secilen_paylar = heapq.nlargest(n, paylar) # En büyük n tane payı max-heap veri yapısı kullanarak bul
    return secilen_paylar

# Seçilen payların hangi partilere ait olduğunu bul ve her parti için çıkardığı milletvekili sayısını hesapla
def sonuclari_hesapla(secilen_paylar):
    """Seçilen payların hangi partilere ait olduğunu bulan ve her parti için çıkardığı milletvekili sayısını bir sözlük içinde döndüren fonksiyon"""
    sonuclar = {} # Sonuçları tutacak boş bir sözlük oluştur
    for pay, parti in secilen_paylar: # Her seçilen pay ve parti için
        if parti not in sonuclar: # Eğer partinin sonuçlarda kaydı yoksa
            sonuclar[parti] = 1 # Partinin çıkardığı milletvekili sayısını 1 olarak ekle
        else: # Eğer partinin sonuçlarda kaydı varsa
            sonuclar[parti] += 1 # Partinin çıkardığı milletvekili sayısını 1 arttır
    return sonuclar

# Sonuçları ekrana yazdır
def sonuclari_yazdir(sonuclar):
    """Sonuçları ekrana yazdıran fonksiyon"""
    print("Dhont sistemi ile hesaplanan sonuçlar:")
    for parti in sonuclar: # Her parti için
        print(f"{parti} partisi {sonuclar[parti]} milletvekili çıkardı.") # Partinin adını ve çıkardığı milletvekili sayısını yazdır

# Ana program akışı
paylar = paylari_hesapla(oylar, n) # Payları hesapla
secilen_paylar = en_buyuk_n_payi_sec(paylar, n) # En büyük n tane payı seç
sonuclar = sonuclari_hesapla(secilen_paylar) # Sonuçları hesapla
sonuclari_yazdir(sonuclar) # Sonuçları yazdır

Kaynak:
(1) D’Hondt seçim sistemi nedir, ne demek? D’Hondt sistemi hesaplama örnekleri. https://www.cnnturk.com/turkiye/dhondt-sistemi-nedir-ne-demek-dhondt-sistemi-hesaplama-ornekleri.
(2) D’Hondt sistemi – Vikipedi. https://tr.wikipedia.org/wiki/D%27Hondt_sistemi.
(3) D’Hondt (DONT) seçim sistemi nedir? D’Hondt sisteminde oylar nasıl …. https://www.ntv.com.tr/galeri/2023-secim/dhondt-dont-secim-sistemi-nedir-dhondt-sisteminde-oylar-nasil-hesaplaniyor,EotEKigN_0GQSwaL7rEBXA.
(4) Yeni seçim teklifinde var: D’Hondt sistemi nedir, nasıl çalışır?. https://www.diken.com.tr/yeni-secim-teklifinde-var-dhondt-sistemi-nedir-nasil-calisir/.

Yorum bırakın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.