{
"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
}