método D'Hondt (Usando Tkinter)

import tkinter as tk
from tkinter import messagebox

def distribuir_vagas(votos, vagas):
partidos = list(votos.keys())
vagas_distribuidas = {partido: 0 for partido in partidos}

for _ in range(vagas):
quocientes = {partido: votos[partido] / (vagas_distribuidas[partido] + 1) for partido in partidos}
partido_vencedor = max(quocientes, key=quocientes.get)
vagas_distribuidas[partido_vencedor] += 1

return vagas_distribuidas

def simular_distribuicao():
try:
num_partidos = 9
votos = {}
for i in range(num_partidos):
nome_partido = entry_partidos[i].get()
n_votos = int(entry_votos[i].get())
votos[nome_partido] = n_votos

vagas = int(num_vagas_entry.get())
resultado_final = distribuir_vagas(votos, vagas)

resultado_text.delete(1.0, tk.END)
for partido, vagas_obtidas in sorted(resultado_final.items(), key=lambda x: x[1], reverse=True):
resultado_text.insert(tk.END, f"{partido}: {vagas_obtidas}\n")
except ValueError as e:
messagebox.showerror("Erro", str(e))

# Criar janela
root = tk.Tk()
root.title("Simulador de Distribuição de Vagas")

tk.Label(root, text="Número de Vagas:").grid(row=0, column=0)
num_vagas_entry = tk.Entry(root)
num_vagas_entry.grid(row=0, column=1)

tk.Button(root, text="Simular", command=simular_distribuicao).grid(row=1, columnspan=2)

tk.Label(root, text="Partido").grid(row=2, column=0)
tk.Label(root, text="Votos").grid(row=2, column=1)

entry_partidos = []
entry_votos = []

partidos_fixos = ["Partido A", "Partido B",
"Partido C", "Partido D", "Partido E",
"Partido F", "Partido G", "Partido H", "Partido I"]
for i in range(9):
entry_partido = tk.Entry(root)
entry_voto = tk.Entry(root)
entry_partido.grid(row=i+3, column=0)
entry_voto.grid(row=i+3, column=1)
entry_partido.insert(tk.END, partidos_fixos[i])
entry_partidos.append(entry_partido)
entry_votos.append(entry_voto)

resultado_text = tk.Text(root, height=10, width=30)
resultado_text.grid(row=12, columnspan=2)

root.mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação