{ "cells": [ { "cell_type": "markdown", "id": "bf6ddea2", "metadata": { "toc": true }, "source": [ "

Table des matières

\n", "
" ] }, { "cell_type": "markdown", "id": "f7b644eb", "metadata": {}, "source": [ "# TP2" ] }, { "cell_type": "markdown", "id": "87c64bbf", "metadata": {}, "source": [ "## Exercice 1: modification des objets mutables\n", "\n", "* Créez une liste `[1, 2, 3]`, et affectez la à une variable `nombres`. \n", "* Créez un dictionnaire `dict1`, et affectez à la clé `num` de `dict1` la variable `nombres`. \n", "* Modifier `nombres` en lui insérant en 2e position `1.5` (utiliser `list.insert`). \n", "* Vérifiez ce que vaut maintenant la clé `num` de `dict1`. Que pouvez vous en déduire? \n", "* La fonction `id(nombres)` du langage Python vous permet de connaitre l'adresse \n", " mémoire de l'objet Python associé à `nombres`. Affichez la, et affichez\n", " l'adresse en mémoire de la clé `num` de `dict1`." ] }, { "cell_type": "markdown", "id": "b2bd0ba0", "metadata": {}, "source": [ "## Exercice 2: clés et valeurs\n", "\n", "Écrivez une fonction `print_key_val` qui pour un dictionnaire passé en\n", "paramètre de celle-ci renvoie les pairs de clés-valeurs du dictionnaire\n", "formatées suivant l'exemple ci-dessous. Seules les pairs clés-valeurs de\n", "premier niveau sont concernées.\n", "\n", "```python\n", ">>> dict2 = dict(prénom=\"John\", nom=\"Doe\", âge=42)\n", ">>> print_key_val(dict2)\n", "Clé: prénom, Valeur: John\n", "Clé: nom, Valeur: Doe\n", "Clé: âge, Valeur: 42\n", "```\n", "\n", "Modifiez votre fonction de manière à ce que les clés soient alignées et les valeurs \n", "`str` soient encadrés par des guillemets (utilisez les fonctionnalités de formattage de chaîne).\n", "\n", "```python\n", ">>> print_key_val_plus(dict2) \n", "Clé: prénom, Valeur: 'John'\n", "Clé: nom, Valeur: 'Doe'\n", "Clé: âge, Valeur: 42\n", "```" ] }, { "cell_type": "markdown", "id": "c1c5e0b1", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "## Exercice 3: Récursion\n", "\n", "Écrivez une fonction `print_key_val_id` qui prenant un dictionnaire en paramètre\n", "et qui pour toutes ses clés affiche l'adresse en mémoire des valeurs\n", "associées. Si une des valeurs est un dictionnaire, on répète l'opération\n", "sur cet objet de façon récursive. La sortie sera formatée selon l'exemple suivant.\n", "\n", "*Attention*, les adresses mémoires changent possiblement à chaque\n", "exécution, ne vous fiez pas à celles de l'exemple pour vérifier votre\n", "résultat.\n", "\n", "```python\n", ">>> dict3 = {\n", "... \"prénom\": \"John\",\n", "... \"nom\": \"Doe\",\n", "... \"âge\": 42,\n", "... \"animal\":{\n", "... \"nom\": \"Ulysse\",\n", "... \"type\": \"chien\"\n", "... }\n", "...}\n", ">>> print_key_val_id(dict3)\n", "prénom: John [140051913451376]\n", "nom: Doe [140051913451440]\n", "âge: 42 [140053133116944]\n", "animal: {'nom': 'Ulysse', 'type': 'chien'} [140051918196672]\n", "nom: Ulysse [140051913523376]\n", "type: chien [140051913523504]\n", "```" ] }, { "cell_type": "markdown", "id": "96d01bda", "metadata": {}, "source": [ "## Exercice 4: numération romaine\n", "\n", "Écrivez une fonction qui prend en entrée un entier entre 1 et 4999 et\n", "qui retourne sa valeur en [numération romaine](https://fr.wikipedia.org/wiki/Numération_romaine) (chaîne de caractères).\n", "```python\n", ">>> arab2roman(1984)\n", "MCMLXXXIV\n", "```\n", "Vous construirez progressivement la chaîne en utilisant les définitions suivantes (établissez d'abord l'algorithme à la main):\n", "```python\n", ">>> roman_symbols = dict(M=1000, CM=900, D=500, CD=400, C=100, XC=90, L=50, XL=40, X=10, IX=9, V=5, IV=4, I=1) # {symbol: value}\n", ">>> roman_values = { val: key for key, val in roman_symbols.items() } # {value: symbol}\n", "```\n", "Inversement, écrivez une fonction qui prends une chaîne en notation romaine et qui retourne sa valeur en chiffres arabes.\n", "```python\n", ">>> roman2arab(\"MCMLXXXIV\")\n", "1984\n", "```\n", "Vérifiez la cohérence de vos convertisseurs pour tous les entiers de 1 à 4999." ] }, { "cell_type": "code", "execution_count": 1, "id": "a9fa755b-4470-4b5e-b50d-1e78ae556739", "metadata": {}, "outputs": [], "source": [ "roman_symbols = dict(M=1000, CM=900, D=500, CD=400, C=100, XC=90, L=50, XL=40, X=10, IX=9, V=5, IV=4, I=1) # {symbol: value}\n", "roman_values = { val: key for key, val in roman_symbols.items() } # {value: symbol} " ] }, { "cell_type": "code", "execution_count": 2, "id": "bfc726fb-3db5-4b3c-8530-3dab8f0000ce", "metadata": {}, "outputs": [], "source": [ "def arab2roman(num):\n", " \"\"\"\n", " Convertit un nombre arabe en nombre romain (chaîne de caractères).\n", " \n", " >>> arab2roman(3)\n", " III\n", " >>> arab2roman(14)\n", " XIV\n", " >>> arab2roman(99)\n", " XCIX\n", " >>> arab2roman(509)\n", " DIX\n", " >>> arab2roman(1984)\n", " MCMLXXXIV\n", " >>> arab2roman(4888)\n", " MMMMDCCCLXXXVIII\n", " \"\"\"\n", " roman = \"\"\n", "\n", " return roman" ] }, { "cell_type": "code", "execution_count": 4, "id": "be36fceb-1165-4b37-b1e1-c88e1f25b6be", "metadata": {}, "outputs": [], "source": [ "def roman2arab(roman):\n", " \"\"\"\n", " Convertit un nombre romain (chaîne de caractères) en nombre arabe.\n", " \n", " >>> roman2arab(\"III\")\n", " 3\n", " >>> roman2arab(\"XIV\")\n", " 14\n", " >>> roman2arab(\"DIX\")\n", " 509\n", " >>> roman2arab(\"MCMLXXXIV\")\n", " 1984\n", " >>> roman2arab(\"MMMMDCCCLXXXVIII\")\n", " 4888\n", " \"\"\"\n", " num = 0\n", "\n", " return num" ] }, { "cell_type": "code", "execution_count": null, "id": "faac43fa-73ef-4ed2-af7c-2d92f877d565", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" }, "nbsphinx": { "orphan": true }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": true, "title_cell": "Table des matières", "title_sidebar": "Sommaire", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }