Dans cet exercice, vous allez développer un script Python pour traiter et afficher les résultats d'une élection américaine. Le script devra présenter les résultats état par état dans un tableau en ligne de commande avec des informations détaillées et une analyse du vainqueur potentiel. Vous utiliserez la bibliothèque Rich pour le formatage en couleurs et l'affichage en tableau.
Vous développerez ce script en plusieurs étapes progressives pour construire le tableau des résultats, calculer le gagnant actuel ou projeté, et afficher une liste des swing states.
Les élections présidentielles américaines fonctionnent avec un système de "grands électeurs" : chaque état dispose d'un nombre spécifique de grands électeurs basé sur sa population. Le candidat qui remporte la majorité des voix dans un état reçoit tous les grands électeurs de cet état (sauf au Maine et au Nebraska, où le système est proportionnel). Pour être élu, un candidat doit obtenir au moins 270 des 538 grands électeurs.
Certains états, appelés "swing states", jouent un rôle décisif dans les élections. Il s'agit d'états où le vote est traditionnellement serré entre démocrates et républicains.
Les données actualisées sont disponibles à l'adresse suivante: https://ttrinfo.be/elections. Vous allez développer un script qui télécharge ce fichier pour pouvoir présenter les résultats état par état.
Voici le code Python qui permet de récupérer ce fichier de données et de le charger en mémoire sous forme d'objets de type dictionnaire.
import requests
import json
# Initialisation
url = "https://ttrinfo.be/elections" # URL du fichier JSON
# Chargement des données
response = requests.get(url)
data = response.json()
electeurs = data['electeurs']
update_time = data['update']
Le fichier JSON fourni par le script PHP contient les informations suivantes :
update : date et heure de la dernière mise à jour des données.electeurs : liste des états, chaque état ayant les informations suivantes :
code : code de l'état (par exemple "MI" pour Michigan).nom : nom complet de l'état.2020 : parti vainqueur en 2020 ("d" pour démocrate, "r" pour républicain).vainqueur : parti vainqueur en 2024 (même codage).typo_2020 : tendance de vote en 2020 (ex : "d++" pour un fort soutien démocrate, "r++" pour un fort soutien républicain).grd : nombre de grands électeurs pour l'état.Installez les bibliothèques Rich et Request en exécutant :
pip install rich
pip install request
Vous pouvez aussi utiliser le package manager de Thonny ou PyCharm.
RAPPEL: pour voir les couleurs dans la console, il faut modifier la configuration de PyCharm ou lancer le script dans la console dans Thonny (ctrl-t).
Chargement du JSON :
requests pour charger le fichier JSON disponible en ligne.Extraction des données nécessaires :
Utilisation de Rich pour créer un tableau :
Rich.Table() et ajoutez des colonnes pour le nom de l'état, le vainqueur en 2020, la tendance de vote en 2020, les grands électeurs et le vainqueur en 2024.Affichage en couleur :
Affichage des noms complets des partis :
"d" et "r" par "Démocrate" et "Républicain" respectivement.Le tableau devra ressembler à ceci:
Dernière mise à jour : 2024-11-06 06:14:08
┌───────────────────────┬──────────────────┬───────────────┬─────────────────┬──────────────────┬─────────┐
│ État │ Vainqueur 2020 │ Tendance 2020 │ Grands électeurs│ Vainqueur 2024 │ Bascule │
├───────────────────────┼──────────────────┼───────────────┼─────────────────┼──────────────────┼─────────┤
│ Arizona (AZ) │ Démocrate │ d+ │ 11 │ ---- │ │
│ Georgia (GA) │ Démocrate │ – │ 16 │ Républicain │ → │
│ Michigan (MI) │ Démocrate │ d+ │ 15 │ Démocrate │ │
│ Nevada (NV) │ Démocrate │ d+ │ 6 │ Démocrate │ │
│ North Carolina (NC) │ Républicain │ – │ 16 │ Républicain │ │
│ Pennsylvania (PA) │ Démocrate │ d+ │ 19 │ ---- │ │
│ Wisconsin (WI) │ Démocrate │ d+ │ 10 │ Républicain │ → │
│ Florida (FL) │ Républicain │ r++ │ 30 │ Républicain │ │
│ Texas (TX) │ Républicain │ r++ │ 40 │ Républicain │ │
│ Ohio (OH) │ Républicain │ r+++ │ 17 │ Républicain │ │
└───────────────────────┴──────────────────┴───────────────┴─────────────────┴──────────────────┴─────────┘
Utilise des couleurs pour faciliter l'identification des partis
Statistiques de dépouillement
Total des grands électeurs par parti :
démocrates et républicains) en fonction des résultats actuels de 2024.Affichage du gagnant actuel :
Exemple de résultat:
Dernière mise à jour : 2024-11-06 06:14:08
Résumé des résultats :
- Etats dépouillés: 28/51 (54%)
- Total Grands Électeurs : 538
- Grands Électeurs attribués: 418/538 (78%)
- Total Démocrates : 218 grands électeurs
- Total Républicains : 200 grands électeurs
Pas de vainqueur actuellement.
Projection basée sur la tendance 2020 :
typo_2020).Vérification de la projection :
Exemple de sortie mise à jour:
Dernière mise à jour : 2024-11-06 06:14:08
Résumé des résultats :
- Total Grands Électeurs : 538
- Total Démocrates : 218 grands électeurs
- Total Républicains : 200 grands électeurs
Projection : Les Démocrates pourraient remporter l'élection.
Définition des Swing States :
typo_2020.Affichage des Swing States :
swing_states = ["AZ","GA","MI","NV","NC","PA","WI"]
Voici un exemple de la structure du code final que vous devriez obtenir en suivant les étapes.
import requests
import json
from rich.table import Table
from rich.console import Console
from rich import box
url = "https://ttrinfo.be/elections" # URL du fichier JSON
console = Console()
# Fonction pour convertir le code du parti en son nom complet
def get_party_name(party_code):
return "Démocrate" if party_code == "d" else "Républicain" if party_code == "r" else "Indéterminé"
# Fonction pour détecter les Swing States
def is_swing_state(code):
return "..." # TODO
# Chargement des données
response = requests.get(url)
data = response.json()
electeurs = data['electeurs']
update_time = data['update']
# Préparation du tableau
table = Table(title="Résultats Élection USA 2024", box=box.SIMPLE)
table.add_column("État", style="cyan", justify="center")
table.add_column("Vainqueur 2020", justify="center")
table.add_column("Tendance 2020", justify="center")
table.add_column("Grands électeurs", justify="center")
table.add_column("Vainqueur 2024", justify="center")
# Initialisation des totaux
total_d = total_r = 0
swing_states = [] # Remplir
# Remplissage du tableau et calcul des totaux
for etat in electeurs:
# Initialisation des données
code = etat["code"]
nom_etat = f"..." # TODO
vainqueur_2020 = "" # TODO
vainqueur_2024 = get_party_name(etat["vainqueur"]) if etat["vainqueur"] else "---"
tendance_2020 = etat["typo_2020"]
nombre_electeurs = int(etat["grd"])
# Vérification si l'état est un swing state
# TODO
# Coloration des cellules
# TODO
# Ajout de la ligne dans le tableau
table.add_row(
# TODO
)
# Calcul des totaux par parti
# Affichage de l'heure de mise à jour
# Affichage du tableau
# Résumé et détermination du gagnant
total_grands_electeurs = sum(int(etat["grd"]) for etat in electeurs)
console.print(f"\n[bold]Résumé des résultats :[/]")
console.print(f"- Total Grands Électeurs : {total_grands_electeurs}")
console.print(f"- Total Démocrates : {total_d} grands électeurs", style="blue")
console.print(f"- Total Républicains : {total_r} grands électeurs", style="red")
# Vérification du vainqueur
# Affichage du vainqueur (si majorité absolue)
# ou Projection en fonction de la tendance 2020
Ce projet consiste à développer un script Python qui analyse et affiche les résultats d'une élection américaine en ligne de commande. L'objectif est de lire des données JSON, les traiter et les afficher sous forme de tableau en utilisant des couleurs et un format intuitif. Voici les étapes pour atteindre cet objectif.
Commencez par récupérer le fichier JSON contenant les résultats. Utilisez la bibliothèque requests pour télécharger les données depuis l’URL fournie. Ensuite, chargez ce JSON en mémoire sous forme d'objet Python (liste de dictionnaires) pour y accéder facilement. Familiarisez-vous avec les champs de l'objet, notamment les informations par état comme le nombre de grands électeurs, le vainqueur en 2020 et 2024, et la tendance 2020.
Pour afficher les données de manière lisible en ligne de commande, utilisez la bibliothèque Rich. Créez un tableau Rich.Table() et ajoutez des colonnes pour les informations clés :
Définissez un style pour chaque colonne, par exemple en colorant les partis gagnants (bleu pour Démocrates, rouge pour Républicains) et en mettant en italique les "swing states" pour les distinguer.
Pour chaque état, vérifiez si le parti vainqueur en 2024 est différent de celui de 2020. Si c'est le cas, ajoutez une indication dans la colonne "Bascule" pour montrer le changement de parti. Pour les états sans changement, laissez la colonne vide.
En parallèle, calculez le nombre total de grands électeurs pour chaque parti en fonction des résultats actuels de 2024. Ajoutez les grands électeurs au total des démocrates ou des républicains en fonction du vainqueur de chaque état.
En plus du total par parti, marquez les "swing states" dans le tableau. Ces états sont définis par leur tendance en 2020 (ex : "d+", "r+", ou "–"), indiquant qu'ils sont traditionnellement indécis. Vous pouvez aussi utiliser une liste des swing states connus pour cette élection.
Les swing states peuvent être mis en italique pour attirer l’attention sur ces états stratégiques dans l’élection.
Après avoir construit le tableau avec Rich, affichez-le pour voir les résultats détaillés par état. Ensuite, affichez un résumé avec :
Si aucun parti n'a atteint 270 grands électeurs, calculez une projection basée sur la tendance 2020. Ajoutez les grands électeurs des états indécis en fonction de la tendance de 2020 pour déterminer le gagnant potentiel si les tendances se maintiennent.
En suivant ces étapes, vous construirez un outil d'analyse complet et visuel pour les résultats d'une élection américaine.