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 :

Fonction retrouvant les nombres narcissiques


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut Fonction retrouvant les nombres narcissiques
    def narcisse(k):
    for k in range(200):
    n=str(k)
    for lettre in n:
    puissance=len(n)
    chiffre=int(lettre)
    somme=0
    somme=somme+pow(chiffre,puissance)

    if (somme==k):
    print "le nombre", k,"est narcissique"
    =================================================
    Ci-dessus, mon code permettant de lister tout les nombres narcissiques de 0 à 199, mais le shell ne me marque aucun message d'erreur !
    Quelqu'un à une idée ?
    Je pensais que le 'if' était mal positionné mais je ne peux pas le mettre ailleurs sous peine d'avoir un message d'erreur pendant la compilation !

    Merci d'avance de votre aide,
    shepounet
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Bonsoir.

    Utilise les balises [ CODE][ /CODE] stp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def narcisse(k):
        for k in range(200):
    Pourquoi passer un nombre k en parametre à ta fonction puisque aussitôt après il est remplacé par 0 puis 1 puis 2... jusqu'à 199?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def narcisse():
     somme=0
     for k in range(200):
      n=str(k)
      for lettre in n:
       puissance=len(n)
       chiffre=int(lettre)
       somme=somme+pow(chiffre,puissance)
     
       if (somme==k):
        print "le nombre", k,"est narcissique"
    =========================================
    Voilà, désolé je suis nouveau

    J'ai essayé de compiler le code sans l'argument, malheureusement ca ne marche pas beaucoup mieux

  4. #4
    Membre éclairé Avatar de ctiti60
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Salut,

    Question bête : tu appelles bien cette fonction quelque part ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut non
    Hum...

    Comment il faut faire pour appeller une fonction ? Faut qu'elle soit incluse dans un autre programme c'est bien ca ?

    Je vais essayer (c'est mes premiers essais en python)

  6. #6
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Ajoute nascissique() au bas de ton programme.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #-*-coding:Utf-8-*-
    def narcisse():
     somme=0
     for k in range(200):
      n=str(k)
      for lettre in n:
       puissance=len(n)
       chiffre=int(lettre)
       somme=somme+pow(chiffre,puissance)
     
    narcisse() 
    if (somme==k):
     print "nombre narcissique"
    Je dois appeler ma fonction comme ça ? Il me dit que somme n'est pas définit :/

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    il suffit d'ajouter afin d'exécuter la fonction

    Merci à tous,
    shepounet

  9. #9
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Hello,

    Par curiosité, j'ai regardé la définition des nombres narcissiques sur wikipedia, et ton programme ne semble pas permettre de les trouver tous.

    D'ailleurs le somme = 0 dans ton code source ne semble pas au bon endroit... il faudrait le mettre dans la boucle for k in range(...


    Utilises-tu la même definition?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Salut,

    Oui j'utilise la même définition, j'ai fixé la limite des nombres narcissiques a 200. Car le plus grand nombre narcissique a 39 chiffres, et mon simple core 2 duo mettrait plusieurs années pour tous les trouver.

    Pour le somme=0, je crois qu'effectivement sa place serait dans la boucle "pour" (chose que j'ai modifié dans le nouveau code).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #-*-coding:Utf-8-*-
    def narcisse():
     l=input('Donnez une limite dans la recherche des nombres narcissiques \n')
     for k in range(l):
      somme=0
      n=str(k)
      for lettre in n:
       puissance=len(n)
       chiffre=int(lettre)
       somme=somme+pow(chiffre,puissance)
       if(somme==k):
        print k," est un nombre narcissique"
     
    print narcisse()
    Voilà le code final, l'utilisateur choisit lui même la valeure limite.
    Merci de ton intérêt.
    Amicalement
    shepounet

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Si vous voyez quelque chose pour améliorer mon code, je suis preneur.

  12. #12
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut


    Plusieurs petits points:

    * Tu ne cherches pas les nombres narcissiques en utilisant le seconde règle,
    ex: 81 est narcissique selon la seconde règle: 81 = (8+1)^2

    * Tu limites l'application de la première règle à l'utilisation d'une puissance égale à la longueur du nombre testé
    ex: 4150 est narcissique (4150 = 4^5 + 1^5 + 5^5).

    * Les nombres de 1 à 9 ne sont pas narcissiques, l'exposant devant être supérieur à 1.

    ps: je suppose que cette recherche s'effectue dans le cadre d'étude, c'est pour cela que je me permet de te signaler ces oublis.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Ce programme rentre effectivement dans le cadre de mes études :

    * Je recherche les nombres narcissiques selon la 1ère règle :
    "Un nombre narcissique est un entier naturel dont la somme des puissances de chacun des chiffres le composant est égal à lui-même.
    L'exposant peut être tout entier supérieur à 1, mais il doit être toujours identique."

    * je dois définir une ligne pour dire que si puissance=1 alors le nombre n'est pas narcissique

    * Tu as raison pour la seconde règle, cependant je ne vais prendre en compte que la 1ère règle pour mon code. Les deux règles sont contradictoires :
    - pour la première règle :
    3025 n'est pas narcissique

    - pour la deuxième règle :
    3025 est narcissique

    c'est casse tête
    Merci de ton aide !
    shepounet

  14. #14
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    * je dois définir une ligne pour dire que si puissance=1 alors le nombre n'est pas narcissique
    Je te conseille de commencer avec un exposant = 2 puis d' incrémenter jusqu'à ce la somme obtenue soit supérieur au nombre à tester (le nombre n'est alors pas narcissique) ou que la somme soit égale au nombre (donc que ce nombre soit narcissique).

    Tu as raison pour la seconde règle, cependant je ne vais prendre en compte que la 1ère règle pour mon code. Les deux règles sont contradictoires :
    Un nombre n'a pas besoin de vérifier les deux propriétés pour être narcissique, une seule est nécessaire et suffisante.

    Pour la structure de ton code, je te conseille de créer une fonction isNarciss par exemple qui renverrait la valeur du nombre si il est narcissique ou False, cela te permet tester plus facilement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in xrange(10000, 20000):
        t = isNarciss(i)
        if t: print t

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    Merci de tout tes conseils, je vais les appliquer sur mon code (je le reposterai).
    J'avais déjà créé la fonction permettant de tester la narcissité d'un nombre.

    Merci de ton aide
    shepounet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction capter les nombres
    Par cisco.nat dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 11/07/2013, 15h06
  2. Fonction qui définie les nombres des chiffres
    Par aliassaf dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/04/2009, 01h38
  3. Réponses: 3
    Dernier message: 23/08/2007, 00h39
  4. fonction enlever les zero en fin de nombre decimal
    Par calitom dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2007, 17h01
  5. Retrouver les valeurs des paramètres des fonctions d'une DLL
    Par Bernard Martineau dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 10h42

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