{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"
Exercice
\n",
" Composition des produits alimentaires
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'API [_Open Food Facts_](https://fr.openfoodfacts.org/) permet de récupérer des informations sur un produit alimentaire à partir de son numéro de code-barres. Par exemple, pour le produit dont le code-barres est `8076800376999`, il suffit d'envoyer une requête GET à l'URL [https://world.openfoodfacts.org/api/v0/product/8076800376999.json](https://world.openfoodfacts.org/api/v0/product/8076800376999.json).\n",
"\n",
"**(1)** ✏️ 💻 Après avoir testé la fonction `interroger_API_openfoodfacts` pour le code-barres `8076800376999`, écrire sa spécification."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import requests"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def interroger_API_openfoodfacts(code_barres):\n",
" \"\"\"\n",
" Spécification à écrire...\n",
" \"\"\"\n",
" reponse = requests.get(f\"https://world.openfoodfacts.org/api/v0/product/{code_barres}.json\")\n",
" reponse = reponse.json()\n",
" if reponse['status'] == 1:\n",
" dico = {'nom': reponse['product']['product_name'],\n",
" 'nutriments': reponse['product']['nutriments'],\n",
" 'nutri_score': reponse['product']['nutrition_grade_fr']}\n",
" else:\n",
" dico = {'nom': 'Produit inconnu'}\n",
" return dico"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Voici un extrait du tableau d'information nutritionnelle d'un paquet de lasagnes dont le code-barres est `8076800376999` :\n",
"\n",
"\n",
" \n",
" Information nutritionnelle | \n",
" Pour 100 g | \n",
"
\n",
" \n",
" Énergie | \n",
" 1554 kJ | \n",
"
\n",
" \n",
" Matières grasses | \n",
" 4 g | \n",
"
\n",
" \n",
" dont acides gras saturés | \n",
" 1,2 g | \n",
"
\n",
" \n",
" Glucides | \n",
" 67,3 g | \n",
"
\n",
" \n",
" dont sucres | \n",
" 3 g | \n",
"
\n",
" \n",
" Fibres alimentaires | \n",
" 3 g | \n",
"
\n",
" \n",
" Protéines | \n",
" 14 g | \n",
"
\n",
" \n",
" Sel | \n",
" 0,075 g | \n",
"
\n",
"
\n",
"\n",
"**(2)** ✏️ Déterminer comment accéder à la quantité d'énergie, de sel, de sucres, de matières grasses, de fibres et de protéines à partir de la réponse fournie par l'API.\n",
"\n",
"**(3)** ✏️ 💻 Écrire la spécification de la fonction `mystere`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def mystere(dico, cle):\n",
" \"\"\"\n",
" Spécification à écrire...\n",
" \"\"\"\n",
" if cle in dico:\n",
" return dico[cle]\n",
" else:\n",
" return 0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**(4)** 💻 Définir une fonction `composition` prenant en paramètre d'entrée un numéro de code-barres et retournant un dictionnaire dont les clés sont :\n",
"- `'nom'` : nom du produit,\n",
"- `'énergie'` : énergie pour 100g de produit, exprimée en kJ,\n",
"- `'sel'` : quantité de sel pour 100g de produit, exprimée en g,\n",
"- `'sucres'` : quantité de sucres pour 100g de produit, exprimée en g,\n",
"- `'mat_grasses'` : quantité de matières grasses pour 100g de produit, exprimée en g,\n",
"- `'fibres'` : quantité de fibres pour 100g de produit, exprimée en g,\n",
"- `'protéines'` : quantité de protéines pour 100g de produit, exprimée en g."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**(5)** 💻 Définir une procédure `comparer_produits` qui prend en paramètre d'entrée un tableau contenant des numéros de code-barres et qui affiche :\n",
"- le produit qui contient le plus d'énergie pour 100g,\n",
"- le produit qui contient le moins de sel pour 100g,\n",
"- le produit qui contient le moins de matières grasses pour 100g,\n",
"- le produit qui contient le plus de sucres pour 100g."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vous pouvez tester votre fonction avec les produits suivants :\n",
"\n",
"\n",
" \n",
" Nom du produit | \n",
" Granola | \n",
" Petits pois Carottes | \n",
" Paëlla | \n",
" Ice tea pêche | \n",
" Blanc de poulet | \n",
" Cassoulet | \n",
" Coquillettes | \n",
"
\n",
" \n",
" Code-barres | \n",
" 7622300689124 | \n",
" 3083680026321 | \n",
" 3302741859105 | \n",
" 5449000232465 | \n",
" 3095756193011 | \n",
" 3261055930422 | \n",
" 8076808140325 | \n",
"
\n",
" \n",
" Energie | \n",
" 2108 kJ | \n",
" 226 kJ | \n",
" 888 kJ | \n",
" 79 kJ | \n",
" 416 kJ | \n",
" 480 kJ | \n",
" 1521 kJ | \n",
"
\n",
" \n",
" Matières grasses | \n",
" 26 g | \n",
" 0,5 g | \n",
" 10 g | \n",
" 0 g | \n",
" 1,6 g | \n",
" 4,7 g | \n",
" 2 g | \n",
"
\n",
" \n",
" dont acides gras saturés | \n",
" 14 g | \n",
" 0,1 g | \n",
" 2,8 g | \n",
" 0 g | \n",
" 0,4 g | \n",
" 1,8 g | \n",
" 0,5 g | \n",
"
\n",
" \n",
" Glucides | \n",
" 61 g | \n",
" 7,2 g | \n",
" 16 g | \n",
" 4,3 g | \n",
" 0,5 g | \n",
" 8,9 g | \n",
" 71,2 g | \n",
"
\n",
" \n",
" dont sucres | \n",
" 36 g | \n",
" 3,4 g | \n",
" 0,6 g | \n",
" 4,3 g | \n",
" 0,5 g | \n",
" 0,6 g | \n",
" 3,5 g | \n",
"
\n",
" \n",
" Fibres alimentaires | \n",
" 2,9 g | \n",
" 4,5 g | \n",
" 1,2 g | \n",
" 0 g | \n",
" 0 g | \n",
" 3,8 g | \n",
" 3 g | \n",
"
\n",
" \n",
" Protéines | \n",
" 4,5 g | \n",
" 2,9 g | \n",
" 10 g | \n",
" 0 g | \n",
" 21 g | \n",
" 7,3 g | \n",
" 12,5 g | \n",
"
\n",
" \n",
" Sel | \n",
" 1,05 g | \n",
" 0,57 g | \n",
" 0,8 g | \n",
" 0,03 g | \n",
" 1,8 g | \n",
" 0,81 g | \n",
" 0,013 g | \n",
"
\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autoclose": false,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}