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:
Partiler | Oy/1 | Oy/2 | Oy/3 | Oy/4 | Oy/5 | Partinin çıkardığı milletvekili sayısı |
---|---|---|---|---|---|---|
A Partisi | 60.000 | 30.000 | 20.000 | 15.000 | 12.000 | 4 |
B Partisi | 25.000 | 12.500 | 8.333 | 6.250 | 5.000 | 2 |
C Partisi | 14.000 | 7.000 | 4.667 | 3.500 | 2.800 | 1 |
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/.