{ "cells": [ { "cell_type": "markdown", "id": "7b33ad92", "metadata": {}, "source": [ "# Septième exercice en Python (Niveau Lycée)" ] }, { "cell_type": "markdown", "id": "7f4e9974", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "60fae855", "metadata": {}, "source": [ "*Résumé en français* : Ecrire une fonction qui admet en paramètre un nombre entier positif et qui retourne le nombre de fois où vous devez multiplier ses chiffres pour obtenir un seul chiffre." ] }, { "cell_type": "markdown", "id": "755fa541", "metadata": {}, "source": [ "## Version classique" ] }, { "cell_type": "markdown", "id": "7d7bf9bc", "metadata": {}, "source": [ "On doit compter (variable `compteur`) combien de fois il faut multiplier les chiffres entre eux jusqu'à obtenir un seul chiffre. Ce nombre d'itérations étant inconnu, nous allons naturellement utiliser une boucle **Tant Que** (`while`). Maintenant, comment faire la multiplication des chiffres d'un nombre ? On peut par exemple **transformer** ce nombre en **chaine** puis en **liste** et multiplier les éléments de cette liste grâce à une boucle." ] }, { "cell_type": "code", "execution_count": 2, "id": "7190588b", "metadata": {}, "outputs": [], "source": [ "def mul(n):\n", " chaine = str(n) # Transformation nombre en chaine\n", " liste = list(chaine) # puis en liste\n", " produit = 1 # Initialisation du résultat du produit\n", " for c in liste:\n", " produit *= int(c) # int = convertir chaine en entier\n", " return produit " ] }, { "cell_type": "code", "execution_count": 3, "id": "ab2f3607", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "729" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mul(999)" ] }, { "cell_type": "markdown", "id": "04952584", "metadata": {}, "source": [ "On peut également utiliser une librairie comme `operator` ou `numpy` :" ] }, { "cell_type": "code", "execution_count": 4, "id": "c7596ea6", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "def mul(n):\n", " liste = list(str(n)) # Nombre en liste\n", " return np.prod([int(v) for v in liste]) # \"prod\" pour produit" ] }, { "cell_type": "code", "execution_count": 5, "id": "7a163b64", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "729" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mul(999)" ] }, { "cell_type": "markdown", "id": "7a7aef7f", "metadata": {}, "source": [ "Ce qui donne ce programme pour la version classique :" ] }, { "cell_type": "code", "execution_count": 6, "id": "ab411e7f", "metadata": {}, "outputs": [], "source": [ "def persistence(n):\n", " compteur = 0\n", " while n > 9:\n", " compteur += 1\n", " n = np.prod([int(v) for v in list(str(n))])\n", " return compteur " ] }, { "cell_type": "code", "execution_count": 7, "id": "3ddb3512", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ " persistence(999)" ] }, { "cell_type": "markdown", "id": "ebf47515", "metadata": {}, "source": [ "## Version récursive" ] }, { "cell_type": "markdown", "id": "85a4d639", "metadata": {}, "source": [ "Si un nombre est plus petit que 10, sa **persistence** est **0**. Sinon, sa **persistence** est **1 +** la **persistence** du **produit de ses chiffres**. Par exemple :\n", "\n", "
persistence(39) = 1 + persistence(3 * 9)\n",
    "                = 1 + persistence(27)\n",
    "                = 1 + (1 + persistence(2 * 7)) \n",
    "                = 1 + 1 + persistence(14)\n",
    "                = 1 + 1 + (1 + persistence(1 * 4))\n",
    "                = 1 + 1 + 1 + persistence(4)              \n",
    "                = 1 + 1 + 1 + 0\n",
    "                = 3
" ] }, { "cell_type": "markdown", "id": "7b8ad345", "metadata": {}, "source": [ "Programme final version récursive :" ] }, { "cell_type": "code", "execution_count": 8, "id": "a5aaf28e", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "def persistence(n):\n", " if n < 10: return 0\n", " p = np.prod([int(v) for v in list(str(n))])\n", " return 1 + persistence(p) " ] }, { "cell_type": "code", "execution_count": 9, "id": "f8b3c126", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "persistence(999)" ] } ], "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.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }