Nombres et chiffres

Jean-PierreBoudine Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
Jean-PierreBoudine Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je souhaite, en partant d'un nombre entier N, faire le produit de ses chiffres, et recommencer tant que le résultat comporte plus d'un chiffre (le nombre d'étapes est la "persistance" de l'entier). Je commence par écrire N sous la forme de la liste de ses chiffres et j'ai facilement le produit

li=[9,9,9]
def prod(li) :
p=1
for k in li:
p*=k
return p
print prod(li)

Mais maintenant, j'ai un nombre, pas la liste dont j'ai besoin pour itérer.
D'où ma question : y a-t-il un code pour passer du nombre abcd à la liste [a,b,c,d] ?
Merci d'avance. JP

1 réponse

goussedail
 
Bonjour.

Oui, tu peux transformer ton nombre en liste de chiffres.
Il faut d'abord convertir le nombre en chaîne de caractères.

p = str(p)


Ensuite appliquer list dessus.

liste = list(str(p))


On obtient alors une liste de chaînes de caractères.

Comme tu travailles sur des entiers, il faut retransformer les éléments en entier, il est inutile de convertir la chaîne en liste, car les chaînes sont itérables.

liste = []
for i in str(p):
    liste.append(int(i))


En python, il y a les compréhensions de listes qui permettent de faire cela en une ligne.

liste = list(int(i) for i in str(p))


Il n'est pas nécessaire de convertir le générateur en liste, puisque l'usage est unique, et il y a seulement besoin de le parcourir.

genp = (int(i) for i in str(p))


Ce qui pourrait donner dans ton cas avec de la récursivité.

def prod(iterable):
    p = 1
    for k in iterable:
        p *= k
    if p > 9:
        l = (int(n) for n in str(p))
        return prod(l)
    return p

li = [9, 9, 9]
print(prod(li))


PS :
Lorsque tu postes du code sur le forum, il faut utiliser les balises codes, bouton <>.
0
Jean-PierreBoudine Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, j'ai appris des choses. Je vais assimiler ça. Il faut que je trouve le moyen de compter les étapes, c'est ça, la persistance.
prod(999) = 729, prod(729)=126 prod(126) = 12 et pro(12)=2.
999 est de persistance 4.
Bonne nuit !
JP
0