Un inventaire avec un dictionnaire
Un magasin, une bibliothèque, le sac d'un héros de jeu vidéo : tous tiennent un inventaire, c'est-à-dire une quantité pour chaque objet. Le dictionnaire est fait pour ça : la clé est le nom de l'objet, la valeur sa quantité.
Créer et consulter le stock
stock est un dictionnaire vaut ['pomme': 12, 'poire': 5, 'kiwi': 0]
affiche 'Pommes en stock : ' + stock['pomme']
si stock['kiwi'] = 0 alors
affiche 'Rupture de kiwis !'
fin si
Ajouter au stock
Une livraison arrive. Deux cas : le produit existe déjà (on augmente sa quantité), ou il est nouveau (on crée sa clé).
stock est un dictionnaire vaut ['pomme': 12, 'poire': 5]
procédure livrer(produit, quantite)
si contient(stock, produit) alors
stock[produit] vaut stock[produit] + quantite
sinon
stock[produit] vaut quantite
fin si
affiche 'Livraison : ' + quantite + ' x ' + produit
fin procédure
appelle livrer('pomme', 20)
appelle livrer('mangue', 8)
affiche 'Pommes : ' + stock['pomme'] // 32
affiche 'Mangues : ' + stock['mangue'] // 8
contient(stock, produit) vérifie que la clé existe avant de la lire : lire une clé absente provoquerait une erreur.
Question : Que se passerait-il en écrivant stock['mangue'] vaut stock['mangue'] + 8 alors que la clé « mangue » n'existe pas ? — Une erreur : on ne peut pas lire une clé qui n'existe pas. Pour calculer stock['mangue'] + 8, il faut d'abord lire stock['mangue'], qui n'existe pas encore.
Vendre
Une vente n'est possible que si le produit existe et que la quantité est suffisante. Une fonction renvoie vrai ou faux selon que la vente a pu se faire :
stock est un dictionnaire vaut ['pomme': 12, 'poire': 5]
fonction vendre(produit, quantite)
si non contient(stock, produit) alors
affiche 'Produit inconnu : ' + produit
retourne faux
fin si
si stock[produit] < quantite alors
affiche 'Pas assez de ' + produit + ' (reste ' + stock[produit] + ')'
retourne faux
fin si
stock[produit] vaut stock[produit] - quantite
retourne vrai
fin fonction
si vendre('pomme', 4) alors
affiche 'Vente enregistrée. Pommes restantes : ' + stock['pomme']
fin si
si non vendre('poire', 9) alors
affiche 'La vente de poires est annulée.'
fin si
Lister tout l'inventaire
cles(stock) donne tous les noms de produits. On en profite pour signaler ceux qu'il faut recommander :
stock est un dictionnaire vaut ['pomme': 12, 'poire': 2, 'kiwi': 0, 'mangue': 8]
produits est un tableau
produits vaut cles(stock)
aCommander est un tableau
pour i de 0 à longueur(produits) - 1
affiche produits[i] + ' : ' + stock[produits[i]]
si stock[produits[i]] < 3 alors
aCommander ajoute produits[i]
fin si
fin pour
affiche 'À commander : ' + joindre(aCommander, ', ') // poire, kiwi
Deux dictionnaires qui travaillent ensemble
Un second dictionnaire, avec les mêmes clés, garde les prix. On peut alors calculer la valeur totale du stock :
stock est un dictionnaire vaut ['pomme': 12, 'poire': 2, 'mangue': 8]
tarifs est un dictionnaire vaut ['pomme': 0.5, 'poire': 0.6, 'mangue': 1.5]
produits est un tableau
produits vaut cles(stock)
valeurTotale est un nombre vaut 0
pour i de 0 à longueur(produits) - 1
valeurTotale ajoute stock[produits[i]] * tarifs[produits[i]]
fin pour
affiche 'Valeur du stock : ' + decimal(valeurTotale, 2) + ' €' // 19,2 €
12 × 0,5 + 2 × 0,6 + 8 × 1,5 = 6 + 1,2 + 12 = 19,2 €.
En résumé
- Un inventaire = un dictionnaire : nom de l'objet → quantité.
- Toujours tester
contient avant de lire une clé qui pourrait manquer. - Une vente se vérifie : produit connu, quantité suffisante.
cles permet de parcourir, filtrer et calculer sur tout l'inventaire.