# Projet 06 — La Bibliothèque # Algorithmes : Tri par sélection + Recherche dichotomique livres = [ {"titre": "le seigneur des anneaux", "auteur": "tolkien", "annee": 1954, "genre": "Fantasy", "pages": 1200}, {"titre": "1984", "auteur": "orwell", "annee": 1949, "genre": "Dystopie", "pages": 328}, {"titre": "dune", "auteur": "herbert", "annee": 1965, "genre": "SF", "pages": 688}, {"titre": "le petit prince", "auteur": "exupery", "annee": 1943, "genre": "Conte", "pages": 96}, {"titre": "fondation", "auteur": "asimov", "annee": 1951, "genre": "SF", "pages": 255}, {"titre": "harry potter t1", "auteur": "rowling", "annee": 1997, "genre": "Fantasy", "pages": 309}, {"titre": "fahrenheit 451", "auteur": "bradbury", "annee": 1953, "genre": "Dystopie", "pages": 158}, {"titre": "l'etranger", "auteur": "camus", "annee": 1942, "genre": "Littérature","pages": 123}, {"titre": "neuromancien", "auteur": "gibson", "annee": 1984, "genre": "SF", "pages": 271}, {"titre": "brave new world", "auteur": "huxley", "annee": 1932, "genre": "Dystopie", "pages": 311}, ] def afficher_catalogue(livres): """Affiche le catalogue sous forme de liste numérotée.""" print(f"\n {'Titre':<30} {'Auteur':<12} {'Année':>5} {'Pages':>6}") print(" " + "-" * 58) for i, l in enumerate(livres, 1): print(f" {i:>2}. {l['titre']:<30} {l['auteur']:<12} {l['annee']:>5} {l['pages']:>6} p.") print() def afficher_fiche(livre): """Affiche la fiche complète d'un livre.""" # TODO : afficher toutes les informations du livre de façon lisible pass def tri_selection_livres(livres): """Trie les livres par titre alphabétique (tri par sélection).""" n = len(livres) for i in range(n): mini = i for j in range(i + 1, n): # TODO : comparer les titres if ...: mini = j livres[i], livres[mini] = livres[mini], livres[i] return livres def rechercher_titre(livres_tries, titre): """ Recherche dichotomique par titre exact (en minuscules). Retourne le livre si trouvé, None sinon. """ a = 0 b = len(livres_tries) - 1 while a <= b: m = (a + b) // 2 titre_m = livres_tries[m]["titre"] if titre_m == titre: return livres_tries[m] elif titre_m < titre: # TODO pass else: # TODO pass return None def statistiques(livres): """Affiche des statistiques sur le catalogue.""" n = len(livres) total_pages = sum(l["pages"] for l in livres) # TODO : trouver le livre avec le moins de pages et le plus de pages # Indice : utilise ton tri par sélection sur une copie triée par pages ! print(f"\nStatistiques du catalogue ({n} livres) :") print(f" Moyenne de pages : {total_pages // n} pages") # TODO : afficher le plus court et le plus long # --- Programme principal --- print("=== Catalogue de la Bibliothèque ===") print("\nAvant tri :") afficher_catalogue(livres) tri_selection_livres(livres) print("Après tri alphabétique :") afficher_catalogue(livres) # Tests de recherche print("Recherches :") for titre in ["1984", "dune", "le comte de monte cristo"]: resultat = rechercher_titre(livres, titre) if resultat: print(f" '{titre}' → trouvé !") afficher_fiche(resultat) else: print(f" '{titre}' → absent du catalogue") statistiques(livres)