Algorithmes : Système de Vote

Projets

🦊

🗳️ Projet - Simulateur de Système de Vote

Dans ce projet, nous allons programmer un système de dépouillement de vote. Nous verrons que le mode de scrutin (la règle du jeu) peut changer le vainqueur, même avec les mêmes votes !

Ce projet touche à l'algorithmique et aux structures de données (listes, dictionnaires).

1. Scrutin Majoritaire à un tour

C'est le système le plus simple : celui qui a le plus de voix gagne.

Modélisation

On représente les votes par une liste de candidats choisis par les électeurs.

Exemple : urnes = ["Alice", "Bob", "Alice", "Charlie", "Bob", "Alice"]

Créez une fonction depouiller_majoritaire(urnes) qui :

  1. Compte les voix pour chaque candidat (utilisez un dictionnaire).
  2. Affiche les résultats.
  3. Renvoie le nom du vainqueur.

2. Scrutin Majoritaire à deux tours

Si personne n'a la majorité absolue (> 50%), on organise un second tour entre les deux premiers.

Premier Tour
Second Tour

Modifiez votre fonction précédente pour qu'elle renvoie les pourcentages de chaque candidat.

Si un candidat a > 50%, il gagne. Sinon, identifiez les deux candidats ayant le plus de voix (les "finalistes").

3. Le Paradoxe de Condorcet 🤯

Un vainqueur de Condorcet est un candidat qui battrait tous les autres candidats en duel singulier.

Matrice de Duels
Vainqueur de Condorcet

Créez une fonction matrice_duels(bulletins, candidats) qui organise tous les duels possibles.

Exemple : Alice vs Bob, Alice vs Charlie, Bob vs Charlie.

Pour chaque paire, utilisez votre fonction duel pour voir qui l'emporte.

4. Méthode de Borda 📊

La méthode de Borda est un système de vote pondéré. L'idée est de donner des points à chaque candidat en fonction de sa position dans le classement de chaque électeur.

Calcul des points
Comparaison

On suppose qu'il y a NN candidats. Pour chaque bulletin de vote (qui est un classement) :

  • Le 1er candidat reçoit N1N-1 points.
  • Le 2ème reçoit N2N-2 points.
  • ...
  • Le dernier reçoit 0 point.

Créez une fonction calculer_borda(bulletins, candidats) qui :

  1. Initialise les scores à 0.
  2. Parcourt chaque bulletin.
  3. Attribue les points correspondants.
  4. Renvoie le dictionnaire des scores.

5. Pour aller plus loin 🚀

  • Interface Graphique : Utilisez tkinter ou pygame pour visualiser les résultats sous forme de diagrammes bâtons.
  • Jugement Majoritaire : Renseignez-vous sur cette méthode utilisée pour évaluer les candidats par "mentions" (Très bien, Bien, Assez bien...) plutôt que par classement.