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 :

Eviter de refaire un calcul depuis le début


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2018
    Messages : 10
    Par défaut Eviter de refaire un calcul depuis le début
    Bonjour,
    J'aimerai eviter de refaire le calcul de binomfrep < 0.975 depuis le debut.
    Merci de votre aide.
    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
    # coding: utf-8 
     
    import math
    import os 
    nombre = int(input("Quel est le nombre essaie?\n"))
    prob = float(input("Quel est la probabilité de succes?\n"))
    k = 0
    m = 0
    def binomfdp(n,p,k) :
    	return ((math.factorial(n)) / (math.factorial(k) * math.factorial(n-k))) * pow(p,k) * pow(1-p,n-k)
     
    def binomfrep(n,p,k) :
    	l = 0.0
    	for i in range (0,k+1):
    		l = l + binomfdp(n, p, i)
    	return l
     
     
    while binomfrep(nombre, prob, k) <= 0.025:
    	k = k + 1
    print("A=",k)
     
    while binomfrep(nombre, prob, m) < 0.975 :
    	m = m+1
    print("B=",m)
    os.system("Pause")

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Si vous voulez éviter de refaire le calcul depuis le début, il faut savoir associer un triplet (n,p,k) au résultat pour récupérer le calcul déjà fait ou faire le calcul et le stocker pour le coup suivant.
    Le mot clef la dedans est "associer".... car çà doit vous faire penser à (n,p,k) comme une clef qui aura pour valeur le résultat si elle existe... et donc à l'utilisation d'un dict(ionnaire).

    Après c'est des détails (mais çà se corse): vous gérez vous même le dictionnaire dans la fonction (et il y a des changements) ou vous utilisez un "decorator" (qui s'appelle memoize dans ce cas particulier) qui permettra d'ajouter cette fonctionnalité (on n'appelle pas la fonction lorsqu'on connaît le résultat) sans modifier le corps de la fonction existante. (et qui est disponible sous le nom de lru_cache dans functools).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2018
    Messages : 10
    Par défaut
    Merci de ton aide mais j'avoue ne pas avoir tout saisie.
    Peut tu me réexpliquer stp?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par bastabman Voir le message
    Merci de ton aide mais j'avoue ne pas avoir tout saisie.
    Peut tu me réexpliquer stp?
    Avez vous ouvert un tuto. pour comprendre comment fonctionne un dictionnaire et essayé de vous en servir dans ce cas là? Si ce n'est pas le cas, impossible de vous expliquer ce que vous n'avez pas encore cherché à comprendre par vous même. Dans le cas contraire, montrez ce que vous avez essayé de faire, expliquez les difficultés rencontrées,...
    *
    On peut coder pour vous mais çà se résumerait à recopier l'exemple que vous avez déjà dans la documentation de lru_cache .

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2018
    Messages : 10
    Par défaut
    Je pense avoir résolu mon probleme.
    En réalité je ne voit pas ce qu'un dict pourrait m'apporté.
    J'ai juste fait en sorte de m prend la valeur de k +1 afin de redemarrer a partir de k+1.
    Merci quand même de ton aide.
    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
    import math
    import os 
    nombre = int(input("Quel est le nombre essaie?\n"))
    prob = float(input("Quel est la probabilité de succes?\n"))
    k = 0
     
    def binomfdp(n,p,k) :
    	return ((math.factorial(n)) / (math.factorial(k) * math.factorial(n-k))) * pow(p,k) * pow(1-p,n-k)
     
    def binomfrep(n,p,k) :
    	l = 0.0
    	for i in range (0,k+1):
    		l = l + binomfdp(n, p, i)
    	return l
     
     
    while binomfrep(nombre, prob, k) <= 0.025:
    	k = k + 1
    print("A=",k)
     
    m = k +1
    while binomfrep(nombre, prob, m) < 0.975 :
    	m = m+1
    print("B=",m)
    os.system("Pause")

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par bastabman Voir le message
    Je pense avoir résolu mon probleme.
    En réalité je ne voit pas ce qu'un dict pourrait m'apporté.
    Et bien bravo: il n'y a que vous pour avoir le nez dans le guidon et trouver une solution spécifique à votre problème. Le "dict" ou lru_cache sont des solutions plus générales.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. [Framework Manager] Moyenne depuis le début de l'année
    Par aureliegro dans le forum Cognos
    Réponses: 2
    Dernier message: 29/05/2008, 15h35
  2. calcul depuis une requete
    Par berti dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2008, 10h10
  3. [Calcul] Bug lors d'un calcul depuis une saisie TextBox.
    Par telodo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/09/2007, 01h15
  4. Calcul de dates : début de semaine, de mois, de trimestre
    Par pyxosledisciple dans le forum Access
    Réponses: 13
    Dernier message: 22/02/2006, 08h07
  5. Réponses: 23
    Dernier message: 29/07/2004, 00h52

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