Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème dans une boucle

Sujet résolu
    10 octobre 2012 à 8:43:55

    bonjour,
    comme le titre l'indique j'ai un soucis dans une boucle
    je suis sur le projet Euler N°34

    Citation : projet Euler n°34

    145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.

    Find the sum of all numbers which are equal to the sum of the factorial of their digits.

    Note: as 1! = 1 and 2! = 2 are not sums they are not included.



    voici mon code :

    def fact(num):
        
        l=[i for i in range(1,n+1)]
        res = 1
        for i in l:
            res *= i
        return(res)
    
    while True:
        n=int(input("entre le nombre : "))
        if n ==0:
            break
        else:
            print("factoriel de {0} = {1}".format(n,fact(n)))
            g=[i for i in str(n)]
            print("liste g = ",g)
            for i in g:
                print("factoriel de {0} = {1}".format(i,fact(i)))
        print("")
    


    voici le script en action :

    >>> ================================ RESTART ================================
    >>>
    entre le nombre : 4
    factoriel de 4 = 24
    liste g = ['4']
    factoriel de 4 = 24

    entre le nombre : 12
    factoriel de 12 = 479001600
    liste g = ['1', '2']
    factoriel de 1 = 479001600
    factoriel de 2 = 479001600

    entre le nombre : 0
    >>>



    or le résultat escompté est différent :

    entre le nombre : 12
    factoriel de 12 = 479001600
    liste g = ['1', '2']
    factoriel de 1 = 1
    factoriel de 2 = 2



    c'est la que j'ai besoin de votre aide pour comprendre pourquoi il ne prend pas chaque terme de ma liste
    pour calculer son factoriel ...

    merci pour votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      10 octobre 2012 à 10:18:59

      Dans fact tu n'utilises pas num.
      En argument de fact tu passe une chaîne.
      12! == ...
      • Partager sur Facebook
      • Partager sur Twitter
        11 octobre 2012 à 7:29:00

        merci pour ta réponse !!
        effectivement, je ne me servais pas de num ....
        la réponse était sous mes yeux!!
        probleme résolu

        voici le nouveau code :

        def fact(num):
            
            l=[i for i in range(1,num+1)]
            res = 1
            for i in l:
                res *= i
            return(res)
        
        while True:
            n=int(input("entre le nombre : "))
            if n <=0:
                break
            else:
                #print("factoriel de {0} = {1}".format(n,fact(n)))
                g=[i for i in str(n)]
                som=0
                for i in g:
                    print("{0}! = {1}".format(i,fact(int (i))))
                    som += fact(int(i))
            print("somme des nombres du factoriel de {0} est {1}".format(n, som))
            print()
        


        >>> ================================ RESTART ================================
        >>>

        entre le nombre : 145
        1! = 1
        4! = 24
        5! = 120
        somme des nombres du factoriel de 145 est 145

        entre le nombre : 0
        >>>

        • Partager sur Facebook
        • Partager sur Twitter

        problème dans une boucle

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown