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 :

Crible d'eratostene liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut Crible d'eratostene liste
    bonjour,

    Il y a un bug dans la console, il est écrit :
    "RuntimeError: maximum recursion depth exceeded in cmp"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    liste_entiers = [];
     
    entier_max = input("saisir un entier : ");
     
    for i in range(1, entier_max +1):
    	liste_entiers.append(i);
     
    def suppr_multiples(liste, num):
     
    	if num > len(liste)/2:
    		return liste;
     
    	go_on = False
     
    	for i in range(len(liste)):
    		if liste[i] > num:
    			if liste[i]%num == 0:
    				liste[i] = 0;
     
    	while go_on != True:
    		if liste[num] == 0:
    			num += 1
    		else:
    			go_on = True
     
    	suppr_multiples(liste, num);
     
    suppr_multiples(liste_entiers, 2);

    J'ai bien regardé, je ne vois pas d'où ça peut venir, avez-vous une idée ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    tu as atteint la limite de la pile d'appel de Python (elle est de 1000). pour augmenter cette limite voir:

    http://docs.python.org/library/sys.h...recursionlimit

  3. #3
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Salut, ton code comporte un bug quelque part, qui le fait récurser (!) indéfiniment…

    En voici une version fonctionnelle, et plus efficace je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    entier_max = int(input("saisir un entier : "))
     
    # Une liste-comprehension est bien plus élégante ici…
    liste_entiers = [i for i in range(1, entier_max+1)]
     
    def suppr_multiples(liste, num):
        if num > len(liste)/2:
            return liste
     
        new_num = 0  # On va stocker ici le prochain nombre premier.
        # enumerate retourne un tuple (index_de_l’élément, élément).
        for i, el in enumerate(liste):
            if el > num:
                # Si num divise el, supprimer cet élément de la liste.
                if not el % num:
                    del liste[i]
                # Sinon, si le nouveau nombre premier n’a pas encore été trouvé, c’est celui-ci*!
                elif not new_num:
                    new_num = el
     
        # Petit test final…
        if not new_num or num > len(liste)/2:
            return liste
     
        return suppr_multiples(liste, new_num)
     
    print(suppr_multiples(liste_entiers, 2))

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    Merci a tous les 2. Tu es adorable MOnt29.

  5. #5
    Membre éclairé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Billets dans le blog
    1
    Par défaut
    Juste comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_entiers = range(1, entier_max+1)
    Ça marche aussi.

  6. #6
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Citation Envoyé par Captain'Flam Voir le message
    Juste comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_entiers = range(1, entier_max+1)
    Ça marche aussi.
    Oulala, la honte… J’avais pas vu ça !

Discussions similaires

  1. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  2. Réponses: 2
    Dernier message: 04/10/2002, 09h13
  3. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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