Aller au contenu

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