3. Dictionnaires

Vous avez vu l'intérêt des listes et des listes de listes.
Supposons que l'on souhaite maintenir le stock d'un marchand de fruits et légumes à jours. Comment faire ?

Une première manière de faire

Supposons que notre vendeur de fruits et légumes n'est que 3 fruits à vendre : des pommes, des bananes et des poires. On pourrait construire une liste

				
	stock = [12,3,14]
				
			

sachant que la première valeur (index 0) de stock correspond aux pommes, la deuxième aux bananes et la troisième aux poires.
Mais est-ce que ce sera facile à utiliser dès qu'il y aura quelques dizaines de fruits et légumes ?
De plus, c'est une manière de faire qui est une énorme source d'erreur: il suffit de se tromper de 1 sur la valeur de l'index pour dire qu'on a vendu une pomme au lieu d'une banane...

La bonne manière de faire

Ce serait déjà beaucoup plus simple si on pouvait accéder au stock des pommes en utilisant le mot pomme par exemple. On aurait moins de chance de se tromper avec banane.
Cette manière de faire correspond à un type construit qui s'appelle en python un dictionnaire et d'une manière générale en informatique un p-uplet nommé

				
   stock = {}
   stock['pomme'] = 12
   stock['banane']= 3
   stock['poire']= 14
				
			

Un dictionnaire se déclare en python avec accolades {}. L'exemple ci-dessus montre comment déclarer notre stock. Pour ajouter le stock de pomme de terre, il suffit de faire :

				
   stock['pomme_de_terre'] = 28
				
			

Si le vendeur arrête de vendre des bananes, il suffit de faire :

				
   del(stock['banane'])
				
			

et pour vider complètement le dictionnaire

				
   stock.clear()
				
			

Pour connaître tous les fruits et légumes vendus, il suffit d'un :

				
   stock.keys()
				
			

...qui renvoie une liste de tous les fruits et légumes. Les noms des fruits et légumes sont appelés des clés et l'état du stock leur correspondant des valeurs ( values en anglais). Donc pour avoir la liste de toutes les valeurs, il suffit d'un :

				
   stock.values()
				
			

Pour parcourir le stock, on peut faire :

				
	for fruit, quantite in stock.items() :
		print(fruit, quantite)
				
			

Parmi les points qui distinguent un dictionnaire python d'une liste, il faudra retenir qu'on dictionnaire n'est pas ordonné. Cela signifie que si j'ai commencé par entrer dans le stock des pommes, les pommes ne seront pas nécessairement les premières à sortir quand je vais parcourir le dictionnaire.

Travail à faire : création d'un stock (exercice_C20.py)

Tout ce que vous allez faire sera enregistré dans un fichier stock.py et le dictionnaire de stock sera appelé stock.

Partie 1

Vous disposez d'un fichier contenant un stock qu'il faut ouvrir pour construire le dictionnaire stock (il a été choisi par le vendeur de fruits et légumes de nommer les fruits et légumes au singulier).
Comme vous pouvez le voir, il y a dans ce fichier 2 lignes contenant un stock de kiwis. Il faudra donc en tenir compte pour n'avoir qu'une seule référence kiwi dans le dictionnaire stock.
Vous écrirez une fonction lecture_fichier_stock(nomDeFichier) qui lit le fichier appelé nomDeFichier et renvoie le dictionnaire de stock.

Partie 2

Écrire une fonction approvisionnement(stock, provision) qui prend en paramètre un dictionnaire de provisions (appelé provision) et le dictionnaire de stock.
Cette fonction devra renvoyer le nouveau dictionnaire de stock mis à jour. Si un fruit ou légume n'existe pas dans le stock, il devra être créé.

Partie 3

Avant de valider une commande, il faut regarder s'il est possible d'honorer la commande. Pour cela, écrire une fonction is_commande_possible(stock, commande) qui prend un argument un dictionnaire de commande (appelé commande) et le dictionnaire de stock.
Cette fonction devra renvoyer un des éléments suivants :