Dictionnaires : Open Food Facts
L'usage de la calculatrice n'est pas autorisé
Durée: 1h
Open Food Facts est une base de données en ligne collaborative sur les produits alimentaires. Elle est accessible gratuitement et contient des informations sur des millions de produits alimentaires du monde entier.
Dans ce devoir, vous allez utiliser les données de Open Food Facts pour travailler avec les dictionnaires en Python.
On considère une liste Produits
qui contient des dictionnaires: chaque élément de la liste est un dictionnaire qui contient les informations (Clés) suivantes pour chaque produit :
- Le
Nom
du produit - Le
Type
du produit - La
Marque
du produit - La
Catégorie
du produit - La quantité de
Calories
- La quantité de
Sucre
- La quantité de
Sel
Nom | Type | Marque | Catégorie | Calories (par 100 g) | Sucre (par 100 g) | Sel (par 100 g) |
---|---|---|---|---|---|---|
Sidi Ali | Eau minérale | Les Eaux Minérales d'Oulmès | Boissons | 0 | 0 | 0 |
Mars | Barre chocolatée | Mars | Confiseries | 235 | 50 | 0.3 |
Raïbi Jamila | Yaourt nature | Jibal | Lait et produits laitiers | 68 | 4.8 | 0.1 |
Exemple :
Un élément de la liste Produits
s'écrira donc:
{"Nom":"Sidi Ali", "Type":"Eau minérale", "Marque":"Les Eaux Minérales d'Oulmès", "Catégorie":"Boissons", "Calories":0, "Sucre":0, "Sel":0}
Question 1
Écrire l'instruction qui permet d'ajouter le Mars à la liste Produits
.
Corrigé
Produits.append({"Nom":"Mars","Type":"Barre chocolatée","Marque":"Mars","Catégorie":"Confiseries","Calories":235,"Sucre":50,"Sel":0.3})
Question 2
Donner une instruction qui permet d'obtenir la liste des produits de la Marque "Jibal".
Corrigé
res=[]
for elt in Produits:
if elt['Marque']=="Jibal":
res.append(elt)
Question 3
Donner une instruction qui permet d'obtenir le total de sucre des produits de la catégorie "Confiseries".
Corrigé
res=0
for elt in Produits:
if elt['Catégorie']=="Confiseries":
res=elt['Sucre']+res
print(res)
Question 4
Donner une instruction qui permet d'obtenir la liste des noms des boissons qui contiennent strictement moins de 5 grammes de sucre par 100 grammes.
Corrigé
res=[]
for elt in Produits:
if elt['Catégorie']=="Boissons":
if elt['Sucre']<5:
res.append(elt['Nom'])
print(res)
Question 5
Écrire une fonction Supprime(M)
qui permet de supprimer de la liste produits
tous les produits de la marque M.
Corrigé
def Supprime(M):
for elt in Produits:
if elt['Marque']==M:
Produits.remove(elt)
Question 6
Écrire une fonction diabete(P)
qui permet d'obtenir le produit (dictionnaire complet) qui contient le plus de sucre.
Corrigé
def diabete(M):
max=Produit[0]['Sucre']
eltmax=Produit[0]
for i in range(1,len(Produits)):
if Produits[i]['Sucre']>max:
max=Produits[i]['Sucre']
eltmax=Produits[i]
return eltmax
Question 7
On donne une liste de produits sous la forme L=[['Boeuf',300],...,['Lait',250],['Carotte',400]]
, où l'on retrouve le nom du produit, et le poids nécessaire pour suivre une recette.
Écrire une fonction calorecette(L)
qui retourne la quantité de calories fournie par une recette.
Corrigé
def calorecette(L):
res=0
for elt1 in L:
for elt2 in Produits:
if elt1[0]==elt2['Nom']:
res=elt1[1]*elt2['Calories']/100+res
return res
Question 8
On souhaite transformer la liste Produits
afin que le nouveau nom de chaque produit soit l'ancien nom, un tiret et la marque du produit, en supprimant la clé Marque
de chaque produit. Proposer une fonction transforme(P)
qui répond à ce problème, et retourne une liste dont tous les produits sont correctement modifiés.
Corrigé
def transforme(P):
D=[]
for elt in P:
D.append({"Nom":elt["Nom"]+'-'+elt["Marque"],"Type":elt["Type"],"Catégorie":elt["Catégorie"],"Calories":elt["Calories"], "Sucre":elt["Sucre"], "Sel":elt["Sel"]})
return D