# Projet 09 — Le Générateur Web # Algorithmes : Tri par insertion + Dichotomie → page HTML/CSS import webbrowser jeux = [ {"titre": "The Legend of Zelda: BotW", "studio": "Nintendo", "annee": 2017, "score": 97}, {"titre": "Red Dead Redemption 2", "studio": "Rockstar", "annee": 2018, "score": 97}, {"titre": "Grand Theft Auto V", "studio": "Rockstar", "annee": 2013, "score": 97}, {"titre": "The Witcher 3", "studio": "CD Projekt", "annee": 2015, "score": 93}, {"titre": "Elden Ring", "studio": "FromSoftware", "annee": 2022, "score": 96}, {"titre": "Minecraft", "studio": "Mojang", "annee": 2011, "score": 93}, {"titre": "Portal 2", "studio": "Valve", "annee": 2011, "score": 95}, {"titre": "Hollow Knight", "studio": "Team Cherry", "annee": 2017, "score": 90}, {"titre": "Hades", "studio": "Supergiant", "annee": 2020, "score": 93}, {"titre": "Celeste", "studio": "Maddy Makes", "annee": 2018, "score": 94}, {"titre": "Disco Elysium", "studio": "ZA/UM", "annee": 2019, "score": 97}, {"titre": "Death Stranding", "studio": "Kojima Prod.", "annee": 2019, "score": 82}, ] def tri_insertion_jeux(jeux): """ Trie les jeux par score DÉCROISSANT (tri par insertion). Le meilleur score doit être en premier. """ for i in range(1, len(jeux)): x = jeux[i] j = i # TODO : condition pour trier par ordre décroissant # Indice : pour l'ordre décroissant, on décale quand le score précédent est INFÉRIEUR while j > 0 and ...: jeux[j] = jeux[j - 1] j -= 1 jeux[j] = x return jeux def rechercher_score(jeux_tries, score): """ Recherche dichotomique d'un jeu par score exact. ATTENTION : la liste est triée par score DÉCROISSANT. Les comparaisons < et > sont inversées par rapport au cours ! """ a = 0 b = len(jeux_tries) - 1 while a <= b: m = (a + b) // 2 score_m = jeux_tries[m]["score"] if score_m == score: return jeux_tries[m] elif score_m > score: # Le score du milieu est trop grand → chercher à droite # TODO pass else: # Le score du milieu est trop petit → chercher à gauche # TODO pass return None def generer_html(jeux_tries, fichier="classement.html"): """Génère une page HTML affichant le classement.""" COULEURS_PODIUM = ["#FFD700", "#C0C0C0", "#CD7F32"] # or, argent, bronze lignes_html = "" for i, jeu in enumerate(jeux_tries, 1): if i <= 3: bg = f'style="background-color: {COULEURS_PODIUM[i-1]}; font-weight: bold;"' else: bg = 'style="background-color: #f9f9f9;"' if i % 2 == 0 else "" lignes_html += f""" {i} {jeu['titre']} {jeu['studio']} {jeu['annee']} {jeu['score']}/100 """ html = f""" Top Jeux Vidéo

🎮 Classement des meilleurs jeux

{lignes_html}
# Titre Studio Année Score

Généré par Python avec tri par insertion — NSI Première

""" with open(fichier, "w", encoding="utf-8") as f: f.write(html) print(f"Page générée : {fichier}") # --- Programme principal --- print("=== Générateur de classement HTML ===") tri_insertion_jeux(jeux) print("Classement (5 premiers) :") for i, jeu in enumerate(jeux[:5], 1): print(f" {i}. {jeu['titre']} — {jeu['score']}/100") # Recherche jeu_trouve = rechercher_score(jeux, 95) if jeu_trouve: print(f"\nJeu avec score 95 : {jeu_trouve['titre']}") # Génération HTML generer_html(jeux) webbrowser.open("classement.html")