Partage
  • Partager sur Facebook
  • Partager sur Twitter

UnboundLocalError

    29 novembre 2020 à 10:13:08

    Bonjour !

    En fait j'ai un petit problème... Je suis actuellement sur un projet de compteur de points pour le tennis, sauf que quand j'execute le code suivant, je me retrouve avec un UnboundLocalError: local variable 'point1' referenced before assignment :

    from tkinter import *
    from tkinter.messagebox import *
    import time
    
    #definition des variable principales :
    
    point1 = int(0)
    point2 = int(0)
    
    
    
    
    jeux1 = int(0)
    
    jeux2 = int(0)
    
    
    
    
    sets1 = 0
    
    sets2 = 0
    
    fenetrePrincipale = Tk()
    
    tieBreak = False
    
    ptsTieBreak1 = 0
    ptsTieBreak2 = 0
    
    
    #joueur 1 :
    
    def joueur1():
        
        
        if tieBreak == True:
            print("tie break")
        
            
        elif point1 == 40:
            
            if point2 == 40 :
            
                point1 = str("AD")
                
        elif point2 == "AD":
               
            point1 = int(40)
            point2 = int(40)
                
        elif point1 == 40 or point2 == 40 or point1 == "AD" :
                
            if point1 == 40 or point1 == "AD":
                    
                jeux1 += 1
                point1 = 0
                point2 = 0
                
            elif point1 == 30:
                
                point1 = 40
                
            elif point1 == 15:
                
                point1 = 30
                
            elif point1 == 0:
                
                point1 = 15
                
        
        print(point1)
    boutonJoueur1 = Button(fenetrePrincipale, text="JOUEUR 1", command=joueur1)
    boutonJoueur1.pack()
    

    En fait je n'ai fait que le joueur 1, mais je suis quand même bloqué !

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2020 à 10:56:12

      Salut,

      C'est normal, le problème vient du fait que tu essaies de redéfinir une variable globale depuis ta fonction. Normalement il me semble que tkinter fournisse un type IntVar pour ce genre de choses.

      • Partager sur Facebook
      • Partager sur Twitter
        29 novembre 2020 à 11:05:25

        point1 est une variable globale et rien n'empêche d'utiliser une variable de même nom dans la fonction: il suffit de la créer avant d'y accéder.

        Par exemple si j'écris:

        def f():
             a = 1
             print (a)
        
        

        J'accède à la variable après l'avoir créée, elle est locale.

        def f():
             print (a)
             a = 1
        Si je peux accéder à la variable, c'est qu'elle est globale... Et la créer ensuite suppose fabriquer une variable locale du même nom, ce qui est interdit sans avoir ajouté global a.
            
        • Partager sur Facebook
        • Partager sur Twitter
          29 novembre 2020 à 11:42:56

          @entwanne  

          D'accord, est ce que tu peux me donner un code, je crois que je n'ai rien compris...

          • Partager sur Facebook
          • Partager sur Twitter
            29 novembre 2020 à 11:54:02

            JVscript a écrit:

            Bonjour !

            En fait j'ai un petit problème... Je suis actuellement sur un projet de compteur de points pour le tennis, sauf que quand j'execute le code suivant, je me retrouve avec un UnboundLocalError: local variable 'point1' referenced before assignment :


            Ton erreur vient de la ligne 45 mais potentiellement de toutes les lignes dans le code de ta fonction joueur1 où tu affectes une variable définie à l'extérieur, et il y en a un paquet :D. C'est une erreur très courante.

            Tu pourrais y remédier en les déclarant en global dans le corps de ta fonction (ligne 35) mais ce serait une très mauvaise solution tout simplement parce que ta fonction est mal construite, elle est sans argument et sans return et c'est avec cela qu'une fonction doit le plus souvent communiquer avec son environnement (et pas au travers de variables globales).

            Je ne suis pas sûr que tu connaisses suffisamment Python pour te lancer dans ce genre de programme, rien que quand je vois que tu écris point1 = int(0), après si c'est un exercice qu'on t'a imposé, bien sûr tu n'y peux rien.

            Donc mon conseil  : apprends un minimum Python et construis des fonctions qui aient des paramètres appropriés et qui aient des return ou qui modifient les arguments qu'elle reçoit.

            -
            Edité par PascalOrtiz 29 novembre 2020 à 11:56:54

            • Partager sur Facebook
            • Partager sur Twitter
              29 novembre 2020 à 12:35:57

              En fait, je ne l'avais pas mis avant, mais j'essayais juste de remédier à ça, avant le forum.

              • Partager sur Facebook
              • Partager sur Twitter

              UnboundLocalError

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown