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.
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.
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
mul(999)
729
On peut également utiliser une librairie comme operator
ou numpy
:
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
mul(999)
729
Ce qui donne ce programme pour la version classique :
def persistence(n):
compteur = 0
while n > 9:
compteur += 1
n = np.prod([int(v) for v in list(str(n))])
return compteur
persistence(999)
4
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 :
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)
persistence(999)
4