IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Explication d'une fonction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut Explication d'une fonction
    Bonjour a tous,
    je souhaiterais avoir quelque précision sur une fonction que j'ai récupéré sur wikipédia, mais dont je ne comprend pas certains points.

    En effet, nous voyons bien que c'est une fonction récursive et que l'on déclara à l'aide de lambda une sous fonction sur la même ligne.
    Mais ce que je ne comprend pas c'est la conditionnelle et la boucle for passé en paramètre dans erato().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def eratosthene(n):
          erato = lambda l: l and [l[0]] + erato([i for i in l if i%l[0]])
          return erato(range(2,n+1))
    Voilà je souhaiterais quelque précision.
    Et aussi avec cette fonction je souhaiterais trouver les nombres premiers jumeaux.

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Salut,

    pour la condition l and [l[0]] + erato([i for i in l if i%l[0]])

    Si l est une liste vide erato te retourne une liste vide
    Dans le cas contraire, on va retourner une nouvelle liste composée du premier élément de l et du retour de la fonction erato avec comme param tous les éléments de l dont le modulo par l[0] est différent de 0 (c'est une list comprehension).

    pour avoir la même chose avec les nombres premiers jumeaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def jumeaux(n):
        l = eratosthene(n)
        return [(i, i+2) for i in l if i+2 in l]

  3. #3
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Merci a toi pour cette réponse qui m'a apporté des explications précise.

    Je ne sais pas si tu pourra répondre à deux petites questions encore qui sont:
    -Quand je met n à 10000 cela me retourne une erreur comme quoi je dépasse la mémoire.
    Enfin je crois que c'est cela. Pourrait tu me donner des informations là-dessus?

    -Faudrait aussi que dans l'affichage je puisse mettre en couleur les nombres premiers faisant partie d'une progression arithmètique d'au moins trois terme.(Une couleur par progression) Il me semble pas que cela soit possible dans ma fonction actuelle mais je dois surement me tromper.

    Je dois aussi vous avouer que mon niveau en math est ridicule...Enfin merci de votre aide.

    Amicalement Thibaud

  4. #4
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    Je ne sais pas si tu pourra répondre à deux petites questions encore qui sont:
    -Quand je met n à 10000 cela me retourne une erreur comme quoi je dépasse la mémoire.
    Enfin je crois que c'est cela. Pourrait tu me donner des informations là-dessus?
    Moi aussi ça me fait une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <type 'exceptions.RuntimeError'>: maximum recursion depth exceeded
    Vu que c'est une fonction récursive, c'est pas très étonnant, le résultat est stocké sur la pile, et au bout d'un moment y'en a trop...

    Jusqu'à 7800 ça passe en tous cas

    Pour ce qui est des couleurs, je l'avais fait à l'époque, y'a des codes à insérer dans tes print pour en changer, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print '\033[01;32m%s\033[0m' % 'hello world'
    imprimera un hello world en vert (le 32 dans la ligne)

    pour les codes couleurs une ligne de ce style devrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in xrange(29, 49): print '\033[01;%.2dm%s\033[0m' % (i, str(i))
    donc du coup après pour trouver les nombres premiers d'une suite arithmétique c'est assez simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    suite = range(50) # enfin la suite que tu as
    nbpremiers = eratosthene(50)
    for i in suite:
        if i in nbpremiers:
            print '\033[01;32m%.2s\033[0m' % i,
        else: print i,

  5. #5
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Merci pour tout Oizo2nuit,

    cela m'a beaucoup servit.
    J'ai encore une question mais si tu ne sais pas c'est pas grave:
    En fait, je dois vérifier le théorème de Fermat et la conjecture de Goldbach sur un grand nombre entier.
    Alors si tu connais ou si tu as déjà fait cela m'intéresse beaucoup.

    EDIT: Il y a aussi le crible d'Atkin si quelqu'un là déjà implémenté en python cela m'intéresse aussi.

    encore merci
    Bonne fin de journée

  6. #6
    Membre très actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Par défaut
    Arf vous n'avez pas l'air de savoir tant pis je vais essayer de trouver par moi même mais si une âme charitable pouvait m'aidé se serait gentil.


    Amicalement Thibaud

Discussions similaires

  1. Explication d'une fonction
    Par isitien dans le forum jQuery
    Réponses: 4
    Dernier message: 08/02/2011, 18h06
  2. explication d'une fonction
    Par med_tijani dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/08/2008, 14h19
  3. Explication Cast dans une Fonction
    Par krugarka dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/01/2007, 09h17
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo