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 :

UnboundLocalError: local variable 'moyenne' referenced before assignment


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club

    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1
    Billets dans le blog
    1
    Par défaut UnboundLocalError: local variable 'moyenne' referenced before assignment
    bonjour,

    voici les fonctions utilisées

    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
    def moyenne(L):
        S=0# initialisation 
        for i in range(len(L)):                                                     #pour i variant de 0 a la longueur de L -1
            S+=L[i]
        moyenne=S/len(L)
        return moyenne
     
    def ecart_type(L):
        from math import sqrt
        S=0
        moyenne=moyenne(L)
        for i in range(len(L)):
            S=(L[i]-moyenne)**2
        ecart_type=sqrt(S/len(L))
        return ecart_type
     
    ecart_type=ecart_type(liste)
    il y a une erreur sur la ligne moyenne=moyenne(L) où L est une liste ne contenant que des valeurs numériques.
    l'erreur "UnboundLocalError: local variable 'moyenne' referenced before assignment" est retournée par le mode debug de IDLE.

    je ne comprends pas pourquoi.

    Merci pour votre aide.

    Larry11

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par larry11 Voir le message
    je ne comprends pas pourquoi.
    Il n'est pas très sain d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def moyenne(L):
        ...
        moyenne=S/len(L)
        ...
     
    def ecart_type(L):
        ...
        moyenne=moyenne(L)
        ...
        ecart_type=sqrt(S/len(L))
        ...
     
    ecart_type=ecart_type(liste)
    car en Python une variable aura le type de sa dernière assignation.
    Dit autrement, après la dernière assignation (ecart_type=ecart_type(liste)) ecart_type sera un entier et vous ne pourrez plus utiliser la fonction homonyme.

    Avec "moyenne", c'est plus compliqué car vous faites cela dans le contexte d'une fonction... Et Python vous interdit de créer une variable locale "moyenne" en utilisant aussi une variable globale "moyenne" (le fait que l'objet associé soit "function" est un détail) sans préciser que les deux sont la même variable "globale" avec le mot clé global.

    En Python, on écrirait cela ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from math import sqrt
     
    def moyenne(L):
        return sum(L) / len(L)
     
    def ecart_type(L):
        m = moyenne(L)
        return sqrt(sum( (n - m) ** 2 for n in L)/len(L))
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par larry11 Voir le message
    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
    def moyenne(L):
        S=0# initialisation 
        for i in range(len(L)):                                                     #pour i variant de 0 a la longueur de L -1
            S+=L[i]
        moyenne=S/len(L)
        return moyenne
     
    def ecart_type(L):
        from math import sqrt
        S=0
        moyenne=moyenne(L)
        for i in range(len(L)):
            S=(L[i]-moyenne)**2
        ecart_type=sqrt(S/len(L))
        return ecart_type
     
    ecart_type=ecart_type(liste)
    il y a une erreur sur la ligne moyenne=moyenne(L) où L est une liste ne contenant que des valeurs numériques.
    l'erreur "UnboundLocalError: local variable 'moyenne' referenced before assignment" est retournée par le mode debug de IDLE.
    Bonsoir,
    Quand on cherche les ennuis, on les trouve…
    Nommer une variable de la même façon qu'une fonction, est vraiment à proscrire…
    Et dans la fonction "moyenne" utiliser en plus une variable moyenne…

    Enfin bon… Il n'y a que quelques noms à changer…
    Clodion

Discussions similaires

  1. local variable 'z' referenced before assignment
    Par djidji22 dans le forum Tkinter
    Réponses: 1
    Dernier message: 08/06/2012, 11h50
  2. Aide sur erreur variable referenced before assignment
    Par steph70 dans le forum Tkinter
    Réponses: 8
    Dernier message: 15/10/2009, 08h16
  3. Réponses: 6
    Dernier message: 10/08/2008, 16h42
  4. erreur:The local variable may not have been initialized
    Par wiss20000 dans le forum Langage
    Réponses: 7
    Dernier message: 22/03/2007, 15h18
  5. Réponses: 2
    Dernier message: 20/09/2006, 18h10

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