Projet - Simulateur de Système de Vote
Le but de ce projet est de programmer un système de dépouillement. Ce projet consiste à appliquer quatre règles au même jeu de bulletins, et constater que la règle peut changer le vainqueur.
On utilise des listes et des dictionnaires : une liste de noms pour un scrutin à un tour, une liste de classements pour les autres méthodes, un dictionnaire pour les scores. Le programme ne demande pas les votes au clavier : les bulletins sont écrits dans le fichier votes.py, ce qui permet de vérifier les résultats.
Un bulletin de classement contient chaque candidat une seule fois.
1. Scrutin à un tour
Celui qui a le plus de voix gagne. Il n'y a pas de seuil de 50 % dans cette partie.
Jeu A (un seul nom par électeur) :
urnes = ["Alice", "Bob", "Alice", "Charlie", "Bob", "Alice"]
Alice : 3 voix
Bob : 2 voix
Charlie : 1 voix
Vainqueur : Alice
L'ordre d'affichage est celui de la première apparition dans la liste.

Choisir un exercice
Cliquer sur un exercice de la liste pour afficher son sujet.
2. Scrutin à deux tours 2️⃣
Chaque électeur classe tous les candidats. Au premier tour, on ne regarde que le premier nom du bulletin. Si un candidat a strictement plus de la moitié des bulletins, il est élu tout de suite. Sinon, les deux meilleurs s'affrontent : sur chaque bulletin, on donne la voix à celui des deux qui est classé devant l'autre.
Jeu B (neuf bulletins, trois candidats) :
bulletins = [
["Alice", "Charlie", "Bob"],
["Alice", "Charlie", "Bob"],
["Alice", "Charlie", "Bob"],
["Alice", "Charlie", "Bob"],
["Bob", "Charlie", "Alice"],
["Bob", "Charlie", "Alice"],
["Bob", "Charlie", "Alice"],
["Charlie", "Bob", "Alice"],
["Charlie", "Bob", "Alice"],
]
candidats = ["Alice", "Bob", "Charlie"]
| Règle | Résultat attendu |
|---|---|
| Premières places | Alice 4, Bob 3, Charlie 2 |
| Majorité absolue | non : il faudrait au moins 5 voix sur 9 |
| Second tour (Alice contre Bob) | Bob 5, Alice 4. Vainqueur : Bob |

Choisir un exercice
Cliquer sur un exercice de la liste pour afficher son sujet.
3. Condorcet
Un vainqueur de Condorcet bat chaque autre candidat en duel. Il n'en existe pas toujours.
Sur le jeu B : Charlie bat Alice (5-4) et Charlie bat Bob (6-3). Charlie gagne ses deux duels.
Jeu C (paradoxe de Condorcet) :
cycle = [
["Alice", "Bob", "Charlie"],
["Bob", "Charlie", "Alice"],
["Charlie", "Alice", "Bob"],
]
Alice bat Bob (2 voix contre 1), Bob bat Charlie (2 contre 1), Charlie bat Alice (2 contre 1). Personne ne gagne tous ses duels.

Choisir un exercice
Cliquer sur un exercice de la liste pour afficher son sujet.
4. Borda et comparaison
Avec N candidats, le premier d'un bulletin reçoit N − 1 points, le deuxième N − 2, et le dernier reçoit 0.
Sur un bulletin ["Alice", "Charlie", "Bob"], Alice reçoit 2 points, Charlie 1 point, Bob 0 point.
Jeu B complet : Alice 8, Bob 8, Charlie 11. Vainqueur : Charlie.
Le même paquet de bulletins donne donc trois vainqueurs différents : Alice au premier tour, Bob au second tour, Charlie chez Condorcet et Borda.

Choisir un exercice
Cliquer sur un exercice de la liste pour afficher son sujet.
Ce qu'on rend. Un fichier votes.py : commentaire d'en-tête avec le nom et la classe, les fonctions demandées, les trois jeux d'essai (A, B et C), et les affichages correspondants.
5. Pour aller plus loin
- Jugement majoritaire. Chaque bulletin donne une mention (Excellent, Bien, Passable, Insuffisant) plutôt qu'un classement. La mention médiane départage les candidats.
- Diagramme. Afficher les voix du premier tour avec une ligne de caractères
#par candidat, par exempleAlice : ####.
