#!/usr/bin/env python # coding: utf-8 # # Septième exercice en Python (Niveau Lycée) # # *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. # ## Version classique # 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. # In[2]: def mul(n): chaine = str(n) # Transformation nombre en chaine liste = list(chaine) # puis en liste produit = 1 # Initialisation du résultat du produit for c in liste: produit *= int(c) # int = convertir chaine en entier return produit # In[3]: mul(999) # On peut également utiliser une librairie comme `operator` ou `numpy` : # In[4]: import numpy as np def mul(n): liste = list(str(n)) # Nombre en liste return np.prod([int(v) for v in liste]) # "prod" pour produit # In[5]: mul(999) # Ce qui donne ce programme pour la version classique : # In[6]: def persistence(n): compteur = 0 while n > 9: compteur += 1 n = np.prod([int(v) for v in list(str(n))]) return compteur # In[7]: persistence(999) # ## Version récursive # 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 : # #
persistence(39) = 1 + persistence(3 * 9)
#                 = 1 + persistence(27)
#                 = 1 + (1 + persistence(2 * 7)) 
#                 = 1 + 1 + persistence(14)
#                 = 1 + 1 + (1 + persistence(1 * 4))
#                 = 1 + 1 + 1 + persistence(4)              
#                 = 1 + 1 + 1 + 0
#                 = 3
# Programme final version récursive : # In[8]: import numpy as np def persistence(n): if n < 10: return 0 p = np.prod([int(v) for v in list(str(n))]) return 1 + persistence(p) # In[9]: persistence(999)