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 :

fractale newton ,UnboundLocalError: local variable 'b' referenced before assignment


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 2
    Par défaut fractale newton ,UnboundLocalError: local variable 'b' referenced before assignment
    Bonjour,
    je suis en train de creer un petit programme de math et je me retrouve avec le message d'erreur suivant: UnboundLocalError: local variable 'b' referenced before assignment.
    Ayant chercher depuis des heures sans resoudre le probleme,je souhaiterai savoir si quelqu'un à une idée voici mon programme:

    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
    def limite(z0):
        z=z0
        u=1
        v=(-1+sqrt(3)*j)/2
        w=(-1-sqrt(3)*j)/2
        while abs((z**3)-1)<=1/3:
            z=z-((z**3)-1)/(3*(z**2))
            if abs(z-u)<=1/3 :
                b=0
            elif abs(z-v)<=1/3 :
                b=1
            elif abs(z-w)<=1/3 :
                b=2
            else:
                b=3    
        return b

    Puis j'ai tenté d’initialiser la valeur b mais avec plusieurs tests,cela me donne toujours la valeur initialisée
    Merci par avance.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 013
    Par défaut
    Bonjour,

    Imaginons qu'on ne rentre pas dans vos conditions, comment on fait pour retourner b ?

  3. #3
    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
    Bonjour,

    remarque préliminaire : avant de poster, pensez à utiliser la balise CODE (= bouton # au dessus de l'éditeur)
    --> votre code ne peut pas être copié/collé tel que : il faut recréer l’indentation, ce qui est source d’ambiguïté (on ne sait pas si le if est dans la boucle while).

    ensuite : j'ai copié le code, recréé l'indentation et en ajoutant la globale j qui n'est pas définie dans votre extrait de code (je lui ai affecté 1j, le i des nombres complexes) :
    Avec le if en dehors du while (ce qui est le plus logique), ça fonctionne.
    Avec le if à l’intérieur du while, on obtient l'erreur.
    C'est tout simple : selon la valeur d'entrée z0, la condition du while peut être fausse et la boucle n'est pas exécutée, et dans ce cas, on arrive sur le return sans que b soit affecté.
    --> il faut soit initialiser b avant le while, soit sortir le if du while (ce qui est probablement ce que vous vouliez faire...)

    Pour info, voici ma version de votre 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
    15
    16
    17
    18
    19
    from math import sqrt
    j = 1j
     
    def limite(z0):
        z=z0
        u=1
        v=(-1+sqrt(3)*j)/2
        w=(-1-sqrt(3)*j)/2
        while abs((z**3)-1)<=1/3:
            z=z-((z**3)-1)/(3*(z**2))
        if abs(z-u)<=1/3 :
            b=0
        elif abs(z-v)<=1/3 :
            b=1
        elif abs(z-w)<=1/3 :
            b=2
        else:
            b=3 
        return b

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 2
    Par défaut
    Merci beaucoup pour vos conseils!Ils m'ont sincèrement été d'une grande aide.J'ai revu mon programme et ça colle.

Discussions similaires

  1. [Python 3.X] "local variable referenced before assignment"
    Par LithiumAsWell dans le forum Général Python
    Réponses: 1
    Dernier message: 11/02/2019, 08h00
  2. Réponses: 2
    Dernier message: 29/12/2015, 17h46
  3. local variable 'z' referenced before assignment
    Par djidji22 dans le forum Tkinter
    Réponses: 1
    Dernier message: 08/06/2012, 11h50
  4. Réponses: 6
    Dernier message: 10/08/2008, 16h42

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