Chapitre 8 : Les tuples et les dictionnaires.

Introduction :

Pour retrouver le numéro de téléphone d'un ami, vous ne lisez pas tout le répertoire : vous cherchez directement à son nom.

Comment offrir à un programme ce même réflexe — associer une information à une étiquette et la retrouver instantanément ?

1. Les tuples

Un tuple est une structure de données très proche des listes : il permet de stocker plusieurs valeurs dans une seule variable.

La différence principale est qu’un tuple est immuable : une fois créé, on ne peut pas modifier ses éléments (ajouter, supprimer ou changer une valeur).

On définit un tuple en utilisant des parenthèses ( ) :

coordonnees = (4, 7)
notes = (15, 12, 18)

Comme pour les listes, on peut accéder aux éléments grâce à leur indice (le premier indice est toujours 0) :

print(coordonnees[0])   # affiche 4
print(notes[2])         # affiche 18

Un tuple peut contenir des données de types différents :

eleve = ("Alice", 16, "Première")
print(eleve[0])   # "Alice"

2. Exercice : Création de tuples

Créer deux tuples en Python :

  • un tuple coordonnees qui contient les valeurs 3 et 7.
  • un tuple informations qui contient les valeurs "Alice", 15 et "Seconde".
# À compléter coordonnees = ......... informations = .........

    
>>>

3. Exercice : Distance à l'origine

Dans un plan, un point est représenté par un tuple (x, y). Écrire une fonction distance_origine qui prend en paramètre un point et renvoie la distance de ce point à l’origine (0,0).

La distance est calculée avec la formule :

$$\sqrt{x^2 + y^2}$$

Exemple :

>>> distance_origine((3, 4))
5.0
import math def distance_origine(point): x = point[.....] y = ............ return math.sqrt(............) point1 = (3, 8) print(f"La distance entre {point1} et l'origine est {distance_origine(point1)}.")

    
>>>

4. Exercice : Distance entre deux points

On représente deux points par des tuples (x, y). Écrire une fonction distance_points qui prend en paramètres deux tuples et renvoie la distance entre eux.

La distance est calculée avec la formule :

$$\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$$

Astuce : on peut utiliser le dépaquetage d’un tuple pour récupérer directement ses valeurs :

point1 = (3, 7)
x1, y1 = point1   # x1 vaut 3 et y1 vaut 7

Exemple :

>>> distance_points((0, 0), (3, 4))
5.0
import math def distance_points(point1, point2): x1, y1 = ....... x2, y2 = ....... return math.sqrt(........................) point1 = (3, 8) point2 = (4, 12) print(f"La distance entre {point1} et {point2} est {distance_points(point1, point2)}.")

    
>>>

5. Exercice : Meilleure note d'une liste de tuples

Écrire une fonction meilleure_note qui prend en entrée une liste de tuples, où chaque tuple contient le nom d’un étudiant et sa note. La fonction doit retourner un string correspondant au nom de l’étudiant ayant la meilleure note.

Pour simplifier le problème ici, on considérera qu'il est le seul à avoir eu la meilleure note.

Rappel : on peut utiliser l’affectation multiple pour extraire directement le nom et la note d’un tuple :

etudiant = ("Alice", 85)
nom, note = etudiant   # nom = "Alice", note = 85
student_scores = [ ("Alice", 85), ("Bob", 72), ("Carol", 90), ("David", 60), ("Eve", 78), ("Frank", 88), ("Grace", 92), ("Henry", 70), ("Ivy", 68), ("Jack", 82), ("Kelly", 95), ("Leo", 73), ("Mia", 87), ("Nathan", 79), ("Olivia", 91), ("Paul", 67), ("Quinn", 76), ("Ryan", 83), ("Sophia", 89), ("Tyler", 74) ] def meilleure_note(liste): meilleur_nom = ............ # premier nom de la liste meilleur_score = ........... # première note de la liste for nom, note in liste: # dépaquetage automatique du tuple lors de la boucle if ................. : ................. ................. return meilleur_nom print(f"C'est {meilleure_note(student_scores)} qui a la meilleure note! Bravo!")

    
>>>

6. Les dictionnaires

En Python, un dictionnaire est une structure qui associe une clé à une valeur. Cela permet de retrouver facilement une information grâce à sa clé, un peu comme dans un vrai dictionnaire où on cherche un mot pour en obtenir la définition.

On écrit un dictionnaire avec des accolades { }, les clés et valeurs étant séparées par :.

eleve = {
    "nom": "Alice",
    "age": 16,
    "classe": "Première"
}

On accède à une valeur en utilisant sa clé entre crochets :

print(eleve["nom"])    # affiche "Alice"
print(eleve["age"])    # affiche 16

On peut aussi ajouter ou modifier une valeur :

eleve["age"] = 17              # modification
eleve["option"] = "Maths"      # ajout d'une nouvelle clé

7. Exemple.

Regardons la commande coucou={1:"salut","chocolat":3,6:"avion"}.

1, "chocolat" et 6 sont des clefs.

"salut", 3 et "avion" sont les valeurs associées.

La commande coucou[6] renvoie "avion".

8. Exercice : Création d'un dictionnaire

Créer un dictionnaire vide appelé personne_1 puis y ajouter les clés "nom", "âge" et "ville" avec des valeurs adaptées pour représenter une personne.

personne_1 = {} # ajoutez les clés et valeurs ici

    
>>>

9. Exercice : Dictionnaire des jours de la semaine

Créer un dictionnaire qui associe tous les jours de la semaine à leur numéro (1 pour lundi, 2 pour mardi, …, 7 pour dimanche). Dans ce dictionnaire nommé semaine, le jour est la clé et le numéro est la valeur.

semaine = { # à compléter } for jour in semaine.keys(): print(f"{jour} est le jour n°{semaine[jour]}.")

    
>>>

10. Exercice : Recherche dans un dictionnaire

Écrire une fonction couleur_fruit qui prend en entrée un dictionnaire dico associant des fruits à leur couleur, ainsi qu’un string nom_fruit correspondant au nom d’un fruit. La fonction doit retourner la couleur associée à ce fruit. Si le fruit n’est pas présent dans le dictionnaire, la fonction retournera "Fruit inconnu".

Un dictionnaire est présent pour tester votre fonction.

fruits = { "pomme": "rouge", "banane": "jaune", "orange": "orange", "kiwi": "vert", "raisin": "violet", "citron": "jaune", "fraise": "rouge", "myrtille": "bleu", "abricot": "orange", "poire": "vert" } def couleur_fruit(dico, nom_fruit): if .................. : return dico[...............] else: return ............... fruit_testé = "banane" print(f"Le fruit {fruit_testé} est de couleur {couleur_fruit(fruits, fruit_testé)}.")

    
>>>

11. Parcourir un dictionnaire avec une boucle for

Très souvent, on ne veut pas lire une seule valeur, mais passer en revue tout le dictionnaire. Pour cela, on utilise une boucle for. Il existe trois façons de le faire, selon ce dont on a besoin : les clés, les valeurs, ou les deux à la fois.

Prenons ce dictionnaire comme fil rouge :

stock = {
    "pommes": 12,
    "bananes": 5,
    "cerises": 30
}

a) Boucler sur les clés

Quand on écrit une boucle for directement sur un dictionnaire, Python parcourt ses clés, une par une.

for fruit in stock:
    print(fruit)

Affiche :

pommes
bananes
cerises

Pour être plus explicite, on peut écrire for fruit in stock.keys(): : c'est exactement la même chose. À partir de la clé, on peut toujours retrouver la valeur avec stock[fruit] :

for fruit in stock.keys():
    print(f"Il reste {stock[fruit]} {fruit}.")
Il reste 12 pommes.
Il reste 5 bananes.
Il reste 30 cerises.

b) Boucler sur les valeurs avec .values()

Si on ne s'intéresse qu'aux valeurs (et pas aux clés), on parcourt stock.values().

for quantite in stock.values():
    print(quantite)

Affiche :

12
5
30

C'est pratique, par exemple, pour calculer un total :

total = 0
for quantite in stock.values():
    total = total + quantite
print(total)   # affiche 47

c) Boucler sur les clés et les valeurs avec .items()

Le plus souvent, on veut les deux en même temps : la clé et sa valeur. On utilise alors .items(), qui donne à chaque tour de boucle un couple (clé, valeur). On récupère les deux d'un coup grâce au dépaquetage vu avec les tuples :

for fruit, quantite in stock.items():
    print(f"{fruit} : {quantite}")

Affiche :

pommes : 12
bananes : 5
cerises : 30

En résumé :

12. Exercice : Fréquences des notes

Un professeur souhaite analyser les résultats d’un grand test. Pour cela, il dispose d’une liste contenant toutes les notes des élèves. Écrire une fonction frequences_nbs qui prend en entrée une liste de nombres (les notes des élèves) et qui retourne un dictionnaire indiquant la fréquence de chaque note. La fréquence d’une note est égale au nombre d’occurrences de cette note divisé par le nombre total de notes.

def frequences_nbs(liste): dico = {} for nb in liste: if ...............: # le nb est déjà une clé du dictionnaire .............. else: # on crée une nouvelle clé .............. for clef in dico.keys(): dico[clef] = dico[clef] / .......... # on transforme les occurrences en fréquences return dico # Exemple de liste de notes (40 notes) notes = [ 12, 15, 12, 10, 18, 15, 12, 8, 10, 15, 18, 12, 14, 10, 10, 18, 8, 15, 12, 14, 16, 10, 8, 18, 12, 15, 14, 10, 12, 18, 9, 7, 6, 13, 19, 11, 17, 20, 5, 14 ] print(frequences_nbs(notes)) nombre = 15 freq = frequences_nbs(notes)[nombre] print(f"Le nombre {nombre} a une fréquence de {freq}.") print(f"C'est à dire qu'il représente à peu près {round(freq * 100, 2)} % des nombres.")

    
>>>

13. Exercice : Somme des valeurs d'un dictionnaire

Écrire une fonction population_totale qui prend comme paramètre un dictionnaire dont les clés sont des pays et les valeurs associées leur population. La fonction doit renvoyer un entier correspondant à la population totale.

Un dictionnaire est présent pour tester votre fonction.

def population_totale(dico): total = 0 for ............. in dico.values(): total += ............. return total # Exemple de dictionnaire country_populations = { "Chine": 1444216107, "Inde": 1393409038, "États-Unis": 332915073, "Indonésie": 276361783, "Pakistan": 225199937, "Brésil": 213993437, "Nigéria": 211400708, "Bangladesh": 166303498, "Russie": 145912025, "Mexique": 130262216, "Japon": 126050804, "Éthiopie": 123849456, "Philippines": 113530590, "Égypte": 112411076, "Vietnam": 97580000, "République démocratique du Congo": 89561403, "Turquie": 84495243, "Iran": 85075571, "Allemagne": 83900473, "Thaïlande": 69953881, "France": 67406000, "Monaco": 38300 } print(f"La population totale des pays ci-dessus est de {population_totale(country_populations)}.")

    
>>>

14. Exercice : Produit le plus cher

Écrire une fonction produit_plus_cher qui prend en entrée un dictionnaire de produits et leur prix, et qui retourne le nom du produit le plus cher.

Un dictionnaire est présent pour tester votre fonction.

def produit_plus_cher(dico): max_produit = None max_prix = -1 for produit, prix in dico.items(): if ................. : # si le prix est plus grand que max_prix max_prix = ......... max_produit = ......... return max_produit # Exemple de dictionnaire products = { # Produits laitiers "lait demi-écrémé": 1.50, "lait entier": 1.60, "yaourt nature": 0.80, "yaourt aux fruits": 1.20, "fromage blanc": 1.80, "crème fraîche": 1.30, "beurre doux": 2.30, "beurre demi-sel": 2.40, "camembert": 3.00, "comté": 3.50, "emmental": 3.20, "mozzarella": 2.80, "faisselle": 2.00, # Boulangerie "baguette traditionnelle": 1.20, "pain de campagne": 2.50, "pain complet": 2.20, "brioche": 2.80, "croissant": 1.10, "pain au chocolat": 1.30, "chausson aux pommes": 1.50, # Boissons "jus d'orange": 2.80, "jus de pomme": 2.50, "jus de raisin": 2.70, "eau plate (1.5L)": 0.60, "eau gazeuse (1.5L)": 0.70, "soda (1.5L)": 2.00, "bière blonde (33cl)": 1.80, "vin rouge (75cl)": 5.00, "vin blanc (75cl)": 4.80, # Féculents "pâtes (500g)": 1.00, "riz basmati (1kg)": 1.10, "riz rond (1kg)": 1.00, "quinoa (500g)": 4.50, "lentilles vertes (500g)": 2.20, "pois chiches (500g)": 2.00, "pommes de terre (1kg)": 1.50, "patates douces (1kg)": 2.30, # Fruits "pommes (kg)": 2.50, "bananes (kg)": 1.80, "oranges (kg)": 2.20, "fraises (kg)": 4.00, "raisin (kg)": 3.50, "poires (kg)": 2.80, "kiwis (kg)": 3.00, "citrons (kg)": 2.00, # Légumes "carottes (kg)": 1.50, "tomates (kg)": 2.80, "salade": 1.20, "courgettes (kg)": 2.50, "aubergines (kg)": 2.30, "poivrons (kg)": 3.00, "oignons (kg)": 1.00, "ail": 2.00, # Viandes "poulet entier (kg)": 6.00, "blanc de poulet (kg)": 8.50, "steak haché (5% MG, kg)": 10.00, "escalope de veau (kg)": 15.00, "côtes d'agneau (kg)": 18.00, "jambon blanc (kg)": 12.00, "lardons (kg)": 5.00, # Poissons "saumon frais (kg)": 18.00, "cabillaud (kg)": 15.00, "merlu (kg)": 12.00, "sardines fraîches (kg)": 8.00, "moules (kg)": 4.50, "crevettes cuites (kg)": 12.00, # Épicerie sucrée "sucre (1kg)": 1.20, "miel (250g)": 4.00, "confiture (250g)": 2.50, "chocolat en tablette": 2.00, "biscuits (paquet)": 2.30, "céréales (500g)": 3.50, # Épicerie salée "huile d'olive (1L)": 8.00, "vinaigre (50cl)": 2.00, "sel (1kg)": 0.80, "poivre (50g)": 3.00, "sauce tomate (500g)": 1.80, "moutarde (200g)": 2.20, # Surgelés "légumes mélangés (1kg)": 2.50, "pizza (familiale)": 4.00, "frites (1kg)": 2.00, "poisson pané (500g)": 5.00, # Hygiène "shampoing (400ml)": 4.00, "gel douche (400ml)": 3.50, "dentifrice (100ml)": 2.50, "papier toilette (12 rouleaux)": 6.00, } print(f"Le produit le plus cher est {produit_plus_cher(products)} et il coûte {products[produit_plus_cher(products)]} €.")

    
>>>

15. La bataille

  1. Dans le jeu de cartes la bataille, la carte "9" l'emporte sur la carte "7" et la carte "dame" l'emporte sur la carte "5".

    Créer un dictionnaire qui fait correspondre à une valeur entre 2 et 14 une carte.

    Ainsi :

    • les nombres entiers de 2 à 10 sont associés aux strings "2" à "10".
    • 11 est associé à "valet", 12 à "dame", 13 à "roi" et 14 à "as".
  2. Programmer une fonction bataille qui prend en paramètres deux entiers entre 2 et 14 et qui retourne le résultat d'une bataille comme dans les exemples ci-dessous.

    Exemples :

    >>> bataille(3,11)
    ["Le premier joueur a la carte 3 et le deuxième joueur a la carte valet.",
     "Le deuxième joueur l emporte avec la carte valet."]
    
    >>> bataille(9,9)
    ["Le premier joueur a la carte 9 et le deuxième joueur a la carte 9.",
     "Egalité entre les deux joueurs."]
# dictionnaire des cartes cartes = { # à compléter } def bataille(carte1, carte2): resultat = [] resultat.append("Le premier joueur a la carte " + ...... + " et le deuxième joueur a la carte " + ....... + ".") if ............ : # cas d'égalité resultat.append("Egalité entre les deux joueurs.") elif ............ : # si carte1 est plus grande resultat.append("Le premier joueur l emporte avec la carte " + cartes[carte1] + ".") else: # sinon, c'est le deuxième joueur resultat.append("Le deuxième joueur l emporte avec la carte " + cartes[carte2] + ".") return resultat jeu = bataille(8, 13) for element in jeu: print(element)

    
>>>

16. Exercice : (sujet 7 - 2025) dictionnaire des occurrences de caractères.

Le nombre d’occurrences d’un caractère dans une chaîne est le nombre d’apparitions de ce caractère dans la chaîne.

Exemples :

  • le nombre d’occurrences du caractère o dans bonjour est 2 ;
  • le nombre d’occurrences du caractère b dans Bébé est 1 ;
  • le nombre d’occurrences du caractère B dans Bébé est 1 ;
  • le nombre d’occurrences du caractère dans Hello world ! est 2.

On souhaite stocker ces nombres d’occurrences dans un dictionnaire dont les clefs sont les caractères de la chaîne et les valeurs le nombre d’occurrences de ces caractères.

Par exemple : avec la phrase Hello world ! le dictionnaire est le suivant :

{'H': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 2, 'w': 1, 'r': 1, 'd': 1, '!': 1}

L’ordre des clefs n’a pas d’importance.

Écrire une fonction nbr_occurrences prenant comme paramètre une chaîne de caractères chaine et renvoyant le dictionnaire des nombres d’occurrences des caractères de cette chaîne.

def nbr_occurrences(chaine): # à compléter texte = "Apprendre la programmation est utile!" print(nbr_occurrences(texte)) print(f"Il y a {nbr_occurrences(texte)[' ']} espace(s) dans le texte précédent !")

    
>>>

17. Exercice : Regrouper des mots par longueur

Écrire une fonction regrouper_mots_par_longueur qui prend en entrée une liste de mots et retourne un dictionnaire où :

  • les clés sont les longueurs des mots,
  • les valeurs sont des listes contenant tous les mots de cette longueur.

Par exemple, si on appelle la fonction sur la liste suivante :

liste_animaux = ["chat", "chien", "éléphant", "souris", "cheval", "oiseau", "abeille", "tigre", "serpent"]

Alors la fonction pourra renvoyer un dictionnaire du type :

{4: ["chat"],
 5: ["chien", "tigre"],
 6: ["souris", "cheval"],
 7: ["oiseau", "serpent", "abeille"],
 8: ["éléphant"]}

(L’ordre des clés n’a pas d’importance.)

def regrouper_mots_par_longueur(liste_mots): # à compléter liste_animaux = [ # Animaux domestiques "chat", "chien", "lapin", "hamster", "cochon d'Inde", "furet", "poisson rouge", "perruche", "canari", "tortue", # Animaux de la ferme "vache", "cheval", "poulet", "coq", "poule", "canard", "oie", "mouton", "chèvre", "âne", "dindon", "pigeon", # Animaux sauvages (Afrique) "éléphant", "lion", "tigre", "léopard", "guépard", "girafe", "zèbre", "hippopotame", "rhinocéros", "gorille", "chimpanzé", "hyène", # Animaux sauvages (Autres continents) "ours", "loup", "renard", "lynx", "kangourou", "koala", "panda", "bison", "cerf", "sanglier", "écureuil", "raton laveur", "opossum", # Oiseaux "aigle", "faucon", "hibou", "chouette", "corbeau", "pie", "moineau", "rouge-gorge", "cigogne", "flamant rose", "pingouin", "autruche", "perroquet", # Reptiles et amphibiens "serpent", "crocodile", "alligator", "tortue de mer", "lézard", "caméléon", "grenouille", "crapaud", "salamandre", # Insectes "abeille", "fourmi", "mouche", "moustique", "papillon", "libellule", "sauterelle", "coccinelle", "araignée", "scorpion", "bourdon", # Animaux marins "dauphin", "baleine", "requin", "raie", "pieuvre", "calmar", "méduse", "homard", "crabe", "crevette", "étoile de mer", "otarie", "phoque", # Animaux disparus ou préhistoriques "dinosaure", "mammouth", "dodo", "tigre à dents de sabre", "ptérodactyle", # Animaux imaginaires "licorne", "dragon", "phénix", "griffon", "pégase", "yéti", "bigfoot", ] dico = regrouper_mots_par_longueur(liste_animaux) print(dico) liste_cle = list(dico.keys()) liste_cle.sort() for cle in liste_cle: print(f"{cle} -> {dico[cle]}")

    
>>>

18. Exercice : Regrouper des étudiants par note

Écrire une fonction regrouper_etudiants_par_note qui prend en entrée une liste de dictionnaires représentant des étudiants (chaque dictionnaire contient un "nom" et une "note"), et retourne un dictionnaire qui associe chaque note à une liste des étudiants ayant obtenu cette note.

Par exemple, si on appelle la fonction sur la liste suivante :

etudiants = [
    {"nom": "Alice", "note": 82},
    {"nom": "Bob", "note": 72},
    {"nom": "Carol", "note": 82},
    {"nom": "David", "note": 72},
    {"nom": "Eve", "note": 82},
    {"nom": "Frank", "note": 88}
    ]

Alors la fonction pourra renvoyer un dictionnaire du type :

{ 82: ["Alice", "Carol", "Eve"],
  72: ["Bob", "David"],
  88: ["Frank"]}

Une liste d'étudiants est donnée pour tester la fonction.

def regrouper_etudiants_par_note(etudiants): ... # à compléter etudiants = [ {"nom": "Alice", "note": 82}, {"nom": "Bob", "note": 72}, {"nom": "Carol", "note": 90}, {"nom": "David", "note": 60}, {"nom": "Eve", "note": 82}, {"nom": "Frank", "note": 88}, {"nom": "Grace", "note": 92}, {"nom": "Henry", "note": 70}, {"nom": "Ivy", "note": 68}, {"nom": "Jack", "note": 82}, {"nom": "Kelly", "note": 70}, {"nom": "Leo", "note": 73}, {"nom": "Mia", "note": 82}, {"nom": "Nathan", "note": 70}, {"nom": "Olivia", "note": 91}, {"nom": "Paul", "note": 70}, {"nom": "Quinn", "note": 82}, {"nom": "Ryan", "note": 70}, {"nom": "Sophia", "note": 89}, {"nom": "Tyler", "note": 82}, {"nom": "Amélie", "note": 75}, {"nom": "Benjamin", "note": 82}, {"nom": "Clara", "note": 78}, {"nom": "Daniel", "note": 65}, {"nom": "Emma", "note": 90}, {"nom": "Felix", "note": 70}, {"nom": "Gabrielle", "note": 85}, {"nom": "Hugo", "note": 68}, {"nom": "Inès", "note": 72}, {"nom": "Julien", "note": 80}, {"nom": "Kévin", "note": 70}, {"nom": "Léa", "note": 88}, {"nom": "Maxime", "note": 73}, {"nom": "Noémie", "note": 82}, {"nom": "Oscar", "note": 75}, {"nom": "Pénélope", "note": 91}, {"nom": "Raphaël", "note": 60}, {"nom": "Sandra", "note": 82}, {"nom": "Thomas", "note": 70}, {"nom": "Ulysse", "note": 89}, {"nom": "Valentine", "note": 78}, {"nom": "William", "note": 72}, {"nom": "Xavier", "note": 80}, {"nom": "Yasmine", "note": 70}, {"nom": "Zoé", "note": 85}, ] dico = regrouper_etudiants_par_note(etudiants) print(dico) liste_cle = list(dico.keys()) liste_cle.sort() for cle in liste_cle: print(f"{cle} -> {dico[cle]}")

    
>>>

19. Exercice : Le passage en caisse

Dans un supermarché, la caisse connaît le tarif de chaque produit grâce à un dictionnaire prix qui associe le nom d'un produit à son prix unitaire (en euros).

Un client arrive avec son panier : un second dictionnaire panier qui associe le nom d'un produit à la quantité achetée.

Écrire une fonction total_panier qui prend en paramètres le dictionnaire panier et le dictionnaire prix, et qui renvoie le montant total à payer.

Pour chaque produit du panier, il faut multiplier sa quantité par son prix unitaire, puis additionner le tout.

Exemple : avec le panier {"pain": 2, "café": 1} et les prix {"pain": 1.20, "café": 4.50}, le total est 2 × 1.20 + 1 × 4.50 = 6.90.

Les deux dictionnaires sont présents pour tester votre fonction.

def total_panier(panier, prix): total = 0 for produit, quantite in panier.items(): total = total + .............. # prix unitaire du produit × quantité achetée return total # Tarifs du magasin prix = { "pain": 1.20, "lait": 0.95, "oeufs": 2.40, "beurre": 2.30, "café": 4.50, "pâtes": 1.00, "pommes": 2.50, "fromage": 3.20, "chocolat": 2.00, "jus d'orange": 2.80, } # Panier du client : produit -> quantité panier = { "pain": 2, "lait": 3, "café": 1, "pommes": 4, } print(f"Le total du panier est de {round(total_panier(panier, prix), 2)} €.")

    
>>>

20. Exercice : Fusionner deux stocks

Une chaîne de magasins possède deux entrepôts. Chaque entrepôt tient l'inventaire de ses fruits dans un dictionnaire qui associe le nom d'un fruit à la quantité disponible.

Pour connaître le stock global de la chaîne, on veut réunir ces deux inventaires en un seul dictionnaire. Si un fruit est présent dans les deux entrepôts, les quantités doivent s'additionner. S'il n'est présent que dans un seul, on garde simplement sa quantité.

Écrire une fonction fusionner_stocks qui prend en paramètres deux dictionnaires stock_1 et stock_2, et qui renvoie un nouveau dictionnaire représentant le stock total.

Exemple :

>>> fusionner_stocks({"pommes": 10, "bananes": 5}, {"bananes": 3, "kiwis": 7})
{"pommes": 10, "bananes": 8, "kiwis": 7}

Deux inventaires sont donnés pour tester votre fonction.

def fusionner_stocks(stock_1, stock_2): ... # à compléter entrepot_nord = { "pommes": 120, "bananes": 45, "cerises": 80, "poires": 60, "raisins": 30, } entrepot_sud = { "bananes": 25, "cerises": 100, "kiwis": 70, "poires": 40, "oranges": 90, } stock_total = fusionner_stocks(entrepot_nord, entrepot_sud) print(stock_total) for fruit, quantite in stock_total.items(): print(f"{fruit} : {quantite} en stock")

    
>>>