Partage
  • Partager sur Facebook
  • Partager sur Twitter

Définir une fonction à partir d'une liste

    17 février 2016 à 21:13:57

    Bonjour, je pense que la réponse à ma question sera facile pour quelqu'un qui sait...

    Je dois trouver le plus grand commun diviseur à partir d'une liste d'entiers positifs, en utilisant une fonction. J'ai pu le faire à partir d'une suite de nombres et ça fonctionne bien, mais comment écrire la fonction qui accepte une liste comme paramètre? J'ai essayé find_gcd([*n]): mais la syntaxe est incorrecte. Merci pour votre aide. Voici mon script :

    def find_gcd(*n):
        def _find_gcd(a, b):   #greatest common divisor euclidean algorithm
            while b != 0:
                (a, b) = (b, a % b)
            return a
        p = _find_gcd(n[0], n[1])
        for x in (n[2:]):
            p = _find_gcd(p, x)
        return p
    print (find_gcd(12,24,6,1))
    6



    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      17 février 2016 à 21:49:13

      Pourquoi tu utilises l'unpacking d'arguments ? Pourquoi tu nommes un tuple n ? Pourquoi tu définis la fonction gcd à l’intérieur de la fonction find_gcd ?


      find_gcd = lambda ls: reduce(gcd, ls)
      
      • Partager sur Facebook
      • Partager sur Twitter
        17 février 2016 à 22:54:38

        Y a un truc qui me titille : tu as réussi à faire la fonction qui prend un nombre indéfini de paramètres, mais tu ne sais pas faire celle qui prend une liste en paramètre ?

        • Partager sur Facebook
        • Partager sur Twitter
          17 février 2016 à 23:05:05

          Je suis novice dans Python, c'est pourquoi je ne comprends pas" lambda" ni" reduce", je ne peux pas utiliser des formules que je ne comprends pas, je suis obligée de rester à mon niveau de compréhension.

          J'ai nommé ma fonction find_gcd() et, comme paramètre, j'ai mis un nombre inconnu d'entiers positifs, que j'ai appelés *n.

          Ensuite, en utilisant l'algorithme d'Euclide, j'ai cherché le plus grand commun diviseur de n[0] et n[(1] que j'ai nommé p.

          Puis j'ai voulu chercher le plus grand commun diviseur de p et de n[2]. Une fois que celui-ci est trouvé, je cherche le plus grand commun diviseur entre celui-ci et n[3]. Et ainsi de suite jusqu'à ce que j'arrive au bout de tous les nombres donnés, ce que j'ai formulé ainsi :  for x in (n[2:]):

          Ceci est un raisonnement qui est sans doute long (je ne cherche pas la vitesse d'exécution) mais un débutant peut le comprendre. S'il y a des erreurs dans mon script, je serais heureuse de savoir à quel endroit pour que je puisse l'améliorer. Le seul point noir qui m'embête est que je dois donner une LISTE comme paramètre de départ. J'ai essayé plusieurs façons de contourner ce problème sans aboutir à rien. Par exemple :

          def find_gcd(n[:]):

          C'était cela ma question. Merci de m'avoir répondu, celthon.

          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2016 à 23:07:33

            Ça me semble toujours aussi étrange, on apprend normalement à recevoir un paramètre avant d'apprendre à en recevoir N, m'enfin… Pour avoir une liste en paramètre, donc :

            def find_gcd(n):
                ...
            
            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2016 à 23:21:26

              entwanne, je n'ai pas la science infuse et Python est encore un grand mystère pour moi qui se dévoile peu à peu.

              Il y a énormément de choses à retenir d'un seul coup et il y a beaucoup de sources d'information de partout. Le plus grand commun diviseur, je l'avais travaillé dans un exercice Python où il fallait chercher le plus petit commun multiple de deux nombres. Je me débrouille bien en mathématiques et surtout en algèbre, mais le langage informatique est encore à apprendre et tout le monde n'est pas doué de la même façon. C'est pourquoi je suis très reconnaissante à ce forum et aux personnes qui se donnent la peine de me fournir des explications, d'autant plus que c'est généralement très rapide. 

              Alors merci à toi et à tous.

              • Partager sur Facebook
              • Partager sur Twitter

              Définir une fonction à partir d'une liste

              × 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