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 :

Demande explication sur boucle itérative et factorielle [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut Demande explication sur boucle itérative et factorielle
    Bonjour
    Je cherche une fonction en Python pour calculer la factorielle d'un nombre mais je n'ai pas trouvé.. ça existe ?
    Sinon j'ai fait ce petit script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def fact(x):
      f=1
      for i in range(x):
        f=f+f*i
      return f
    >>> from fact import *
    >>> fact(8)
    40320
    est-ce correct comme code ?
    merci

  2. #2
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Salut,

    Alors si ton code te fournit le résultat attendu alors c'est qu'il est correct.

    Après sans vouloir faire de la pub à une personne de ce forum (Tyrtamos), je te pousserai à faire un tour par ici : factorielle si tu veux voir plusieurs solutions.

    Sinon tu as dans le module math une fonction déjà toute faite :-)

    En espérant avoir pu t'aider.

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Regarde ici

  4. #4
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Salut,

    Alors si ton code te fournit le résultat attendu alors c'est qu'il est correct.

    Après sans vouloir faire de la pub à une personne de ce forum (Tyrtamos), je te pousserai à faire un tour par ici : factorielle si tu veux voir plusieurs solutions.

    Sinon tu as dans le module math une fonction déjà toute faite :-)

    En espérant avoir pu t'aider.
    Citation Envoyé par VinsS Voir le message
    Salut,

    Regarde ici

    Merci à vous deux !
    Cordialement

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ptitjoz Voir le message
    est-ce correct comme code ?
    Bonjour

    C'est une situation peu banale: ton code merdoie... mais il fonctionne.

    Pourquoi merdoie-t-il ? Parce qu'il ne représente pas la définition de la factorielle. La factorielle de (par exemple) 5, c'est 1x2x3x4x5. On s'attendrait donc à trouver un algo représentatif de cette formule. Par exemple for i in range(1, n+1): f=f*i. Or là, il y a ce f=f+f*i qui décontenance tout lecteur habitué à la factorielle (depuis quand une factorielle inclut-elle une addition ???).

    Pourquoi fonctionne-t-il ? Parce que cette dernière addition permet de rétablir la vraie multiplication qui ne se fait pas entièrement du fait que le range s'arrête trop tôt.
    Si par exemple je veux multiplier un truc par 500, je peux écrire "truc=truc * 500" ou bien écrire "truc=truc * 499 + truc". La seconde écriture, bien qu'assez inusitée et donc assez surprenante (et aussi bien plus lourde) fonctionne. Toutefois, la première reste quand-même bien plus simple et à écrire, et à relire.

    Toi tu as utilisé la seconde.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def fact(x):
      f=1
      for i in range(2, x+1):
        f=f*i
      return f
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre du Club
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Points : 51
    Points
    51
    Par défaut
    Bonsoir @Sve@r

    Merci pour ta réponse explicative. En effet mon code ne me paraissait pas très lisible et quelque peu compliqué à comprendre du premier abord. C'est un peu pour cela que je demandais un avis.

    Mon idée de départ était de rajouter à la variable le nouveau produit. Même si ça fonctionne, je me range à ton avis que ce n'est pas vraiment bien pensé...

    Ta solution est bien, facile à comprendre et répond bien à la définition de la factorielle.

    Arriver à un résultat, même correct, demande tout de même une logique qui était pas la meilleure.

    Merci d'avoir pris le temps de répondre.

    Bien cordialement

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

Discussions similaires

  1. demande explication sur boucle "FOR"
    Par maori dans le forum Général Python
    Réponses: 4
    Dernier message: 02/01/2009, 17h37
  2. demande explication sur scope
    Par ranell dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 12/01/2008, 21h32
  3. Réponses: 7
    Dernier message: 21/10/2007, 01h50
  4. Demande explication sur 1 CSS
    Par tigunn dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 02/03/2007, 17h27
  5. Demande explication sur un composant ADO
    Par Golork dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/07/2005, 20h22

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