Gestion des emprunts de livres - Bibliothèque scolaire
On modélise des emprunts de livres effectués par des élèves. Les données sont représentées par un dictionnaire :
emprunts = {
"Amina": [("python", 2), ("algebre", 1), ("reseaux", 1)],
"Youssef": [("python", 1), ("analyse", 2)],
"Sara": [("ia", 1), ("python", 1), ("analyse", 1), ("sql", 1)],
"Hamza": []
}
Chaque tuple (livre, duree) signifie : livre emprunté pour duree semaines.
On dispose aussi d'un catalogue (quantités disponibles) :
catalogue = {
"python": 3,
"algebre": 2,
"analyse": 2,
"sql": 4,
"ia": 1,
"bd": 2
}
Écrire une fonction livres_eleve(emprunts, nom) qui retourne la liste des titres empruntés par nom (sans durées).
Exemple
livres_eleve(emprunts, "Sara")
["ia", "python", "analyse", "sql"]
def livres_eleve(emprunts, nom):
if nom not in emprunts:
return []
livres = []
for livre, duree in emprunts[nom]:
livres.append(livre)
return livres
Écrire une fonction duree_totale(emprunts, nom) qui calcule la durée totale (somme des durées) des emprunts de nom.
Exemple
duree_totale(emprunts, "Amina")
4
def duree_totale(emprunts, nom):
if nom not in emprunts:
return 0
total = 0
for livre, duree in emprunts[nom]:
total += duree
return total
Écrire une fonction nb_emprunts_total(emprunts) qui retourne le nombre total de lignes d'emprunt (tous élèves confondus).
Exemple
nb_emprunts_total(emprunts)
9
def nb_emprunts_total(emprunts):
total = 0
for nom, liste_emprunts in emprunts.items():
total += len(liste_emprunts)
return total
Écrire livres_communs(emprunts, nom1, nom2) qui retourne l'ensemble des livres empruntés par nom1 et nom2.
Exemple
livres_communs(emprunts, "Youssef", "Sara")
{"python", "analyse"}
def livres_communs(emprunts, nom1, nom2):
if nom1 not in emprunts or nom2 not in emprunts:
return set()
# Créer des ensembles de livres pour chaque élève
livres1 = {livre for livre, duree in emprunts[nom1]}
livres2 = {livre for livre, duree in emprunts[nom2]}
# Retourner l'intersection
return livres1 & livres2
Écrire eleves_ayant_emprunte(emprunts, livre) qui retourne la liste (triée par ordre lexicographique) des élèves ayant emprunté livre.
Exemple
eleves_ayant_emprunte(emprunts, "python")
["Amina", "Sara", "Youssef"]
def eleves_ayant_emprunte(emprunts, livre):
eleves = []
for nom, liste_emprunts in emprunts.items():
for l, duree in liste_emprunts:
if l == livre:
eleves.append(nom)
break # Un élève n'apparaît qu'une fois
# Trier par ordre lexicographique
eleves.sort()
return eleves
Écrire ajouter_emprunt(emprunts, nom, livre, duree) qui ajoute la ligne (livre, duree) à l'élève nom. Si l'élève n'existe pas, on le crée.
def ajouter_emprunt(emprunts, nom, livre, duree):
if nom not in emprunts:
emprunts[nom] = []
emprunts[nom].append((livre, duree))
# Pas de return, modification en place
Écrire duree_min(emprunts, nom) qui retourne la plus petite durée d'emprunt de nom. (Si aucun emprunt, retourner None.)
Exemple
duree_min(emprunts, "Youssef")
1
duree_min(emprunts, "Hamza")
None
def duree_min(emprunts, nom):
if nom not in emprunts or not emprunts[nom]:
return None
min_duree = emprunts[nom][0][1] # durée du premier emprunt
for livre, duree in emprunts[nom]:
if duree < min_duree:
min_duree = duree
return min_duree
Écrire catalogue_total(catalogue) qui retourne la quantité totale disponible (somme des valeurs).
Exemple
catalogue_total(catalogue)
14
def catalogue_total(catalogue):
total = 0
for quantite in catalogue.values():
total += quantite
return total
Écrire livre_max_catalogue(catalogue) qui retourne le livre ayant la plus grande quantité. En cas d'égalité : retourner le nom lexicographiquement plus petit.
Exemple
livre_max_catalogue(catalogue)
"sql"
def livre_max_catalogue(catalogue):
max_quantite = -1
max_livre = None
for livre, quantite in catalogue.items():
if quantite > max_quantite:
max_quantite = quantite
max_livre = livre
elif quantite == max_quantite:
if livre < max_livre:
max_livre = livre
return max_livre
Écrire besoin_reappro(emprunts, catalogue) qui retourne la liste triée des livres empruntés mais absents du catalogue.
Exemple
besoin_reappro(emprunts, catalogue)
["reseaux"]
def besoin_reappro(emprunts, catalogue):
# Ensemble des livres empruntés
livres_empruntes = set()
for nom, liste_emprunts in emprunts.items():
for livre, duree in liste_emprunts:
livres_empruntes.add(livre)
# Ensemble des livres dans le catalogue
livres_catalogue = set(catalogue.keys())
# Livres empruntés mais absents du catalogue
manquants = livres_empruntes - livres_catalogue
# Retourner la liste triée
return sorted(list(manquants))
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.