{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Information nutritionnellePour 100 g
Énergie1554 kJ
Matières grasses4 g
dont acides gras saturés1,2 g
Glucides67,3 g
dont sucres3 g
Fibres alimentaires3 g
Protéines14 g
Sel0,075 g
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Nom du produitGranolaPetits pois CarottesPaëllaIce tea pêcheBlanc de pouletCassouletCoquillettes
Code-barres7622300689124308368002632133027418591055449000232465309575619301132610559304228076808140325
Energie2108 kJ226 kJ888 kJ79 kJ416 kJ480 kJ1521 kJ
Matières grasses26 g0,5 g10 g0 g1,6 g4,7 g2 g
dont acides gras saturés14 g0,1 g2,8 g0 g0,4 g1,8 g0,5 g
Glucides61 g7,2 g16 g4,3 g0,5 g8,9 g71,2 g
dont sucres36 g3,4 g0,6 g4,3 g0,5 g0,6 g3,5 g
Fibres alimentaires2,9 g4,5 g1,2 g0 g0 g3,8 g3 g
Protéines4,5 g2,9 g10 g0 g21 g7,3 g12,5 g
Sel1,05 g0,57 g0,8 g0,03 g1,8 g0,81 g0,013 g
" ] }, { "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 }