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 :

Problème de variable global


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut Problème de variable global
    Bonjour,

    J'essaye de faire un programme qui dessine une suite de carré et de triangle prédéfinis mais j'ai un problème avec la couleur.

    Voici deux bouts de mon script pour comprendre mon problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from test_carre import*                 
    from test_triangle import*              
    from compare_turtle_couleur import*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    print"ATTENTION, les couleur sont à saisir en ANGLAIS!"
    print""
    print"Pour le carré."
    couleurC=raw_input("Entrez votre couleur : ")
    base=couleurC                          
    compare_turtle_couleur(base)
    PS : si ce n'est pas assez claire dites le moi, je peux vous afficher la totalité de mon script.

    Et voilà le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "E:/test_test2forum", line 5, in <module>
        from compare_turtle_couleur import*
    SyntaxError: name 'base' is local and global (E:/compare_turtle_couleur.py, line 3)
    Sachant que j'ai créer au préalable cette fonction (qui fonctionne très bien quand je le lance seul mais en enlevant la ligne 'global base' car sinon j'ai cette erreure : "There's an error in your program: ***name 'base' is local and global (compare_turtle_couleur.py, line 3))) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def compare_turtle_couleur(base):
        "Cette fonction permet de vérifier que le couleur saisi soit reconnu par TurtleGraphic."
        global base
        c=0
        while c==0:
            if base in ['pink','red','purple','brown','black','gray','white','blue','yellow','orange','green']:
                c=1
            else:
                print"Couleur non valide. Rappel : la couleur est à saisir en anglais."
                base=raw_input("veuillez en saisir une autre s.v.p : ")
                c=0
    Je comprend bien d'où vient le problème mais je n'arrive pas à y remédier.
    J'ai beau relire et relire mon bouquin ou les pages internet je n'y vois toujours pas plus clair. Je ne vois pas comment il faut utiliser la variable global (d'ailleurs est-ce bien elle qu'il faut utiliser ?) autre que comme je l'ai utilisé.

    En me pardonnant toute ma "néophilité", est-que quelqu'un pourrait éclairer ma lanterne s'il vous plaît ?

    Merci.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut
    "global base" est en conflit avec le paramètre "base" de la fonction.
    La question a vous poser est: pourquoi avez vous besoin de "global base".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut
    Bonjour,

    Tout d'abord merci de ton aide.

    J'ai besoin de "global base" pour que mon script générale prenne en compte le changement de couleur qui s'opère dans mon module compare_turtle_couleur.

    D'après mon cour : "Lorsque nous définissons des variables à l'intérieur du corps d'une fonction, ces variables ne sont accessibles qu'à la fonction elle même. On dit que ces variables sont des variables locales. Les variables définies à l'extérieur d'une fonction sont des variables globales. Le contenu est "visible" de l'intérieure d'une fonction, mais la fonction ne peut pas le modifier."

    Voilà ce que je comprend : je dois définir ma variable "base" qui est une variable local au sein de mon module compare_turtle_couleur, pour quelle deviennent "visible" et compréhensible à l'extérieure de cette fonction pour que mon script général puisse s'en servir par la suite. C'est pour ça qu'il faut que je la définisse comme une variable global et non local.

    Mais est-ce que j'ai bien comprit ?

    Vous pensez que je n'ai pas besoin de "global base" ou est-ce moi qui utilise mal l'outil 'global' ?

    J'ai essayer de retirer cette ligne "global base" dans mon module compare_turtle_couleur mais voilà le message d'erreur qui s'affiche quand je lance le 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
    17
    18
    19
    20
    21
    Pour le triangle.
    Entrez votre couleur : gris
    Couleur non valide. Rappel : la couleur est à saisir en anglais.
    veuillez en saisir une autre s.v.p : vert
    Couleur non valide. Rappel : la couleur est à saisir en anglais.
    veuillez en saisir une autre s.v.p : blue
    Entrez la taille du premier triangle (entre 10 et 100) : 25
     
    Traceback (most recent call last):
      File "G:\test_test2forum", line 56, in <module>
        carre(tailleC,couleurC)
      File "G:\test_carre.py", line 7, in carre
        color(couleurC)
      File "<string>", line 1, in color
      File "C:\Python26\lib\lib-tk\turtle.py", line 2132, in color
        pcolor = self._colorstr(pcolor)
      File "C:\Python26\lib\lib-tk\turtle.py", line 2602, in _colorstr
        return self.screen._colorstr(args)
      File "C:\Python26\lib\lib-tk\turtle.py", line 1105, in _colorstr
        raise TurtleGraphicsError("bad color string: %s" % str(color))
    TurtleGraphicsError: bad color string: gris
    Mon script générale n'a pas prit en compte le changement de couleur qui s'est opéré au sein de mon module.

    J'avoue que je suis un peu perdue.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print"ATTENTION, les couleur sont à saisir en ANGLAIS!"
    print""
    print"Pour le carré."
    base=raw_input("Entrez votre couleur : ")
    base=compare_turtle_couleur(base)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def compare_turtle_couleur(base):
        "Cette fonction permet de vérifier que le couleur saisi soit reconnu par TurtleGraphic."
        while True:
            if base in ['pink','red','purple','brown','black','gray','white','blue','yellow','orange','green']:break
            print"Couleur non valide. Rappel : la couleur est à saisir en anglais."
            base=raw_input("veuillez en saisir une autre s.v.p : ")
        return base
    c'est plus joli.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    josmiley vous a indiqué qu'une fonction peut retourner quelque chose qui peut être utile pour modifier le contexte de l'appelant.

    Sur le fond, je n'aime pas la construction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    base=raw_input("Entrez votre couleur : ")
    base=compare_turtle_couleur(base)
    De fait, çà dit... Mr l'utilisateur quelle couleur choisissez vous? Ah bon... allons demander à "compare_turtle_couleur" que vous m'avez donné une information valide... Puis tiens donc "compare_turtle_couleur" doit aussi redemander à l'utilisateur une couleur si elle n'est pas 'bonne' et retourner, in fine, la bonne couleur choisie...

    Ne serait-il pas plus 'simple' de dire:
    couleur_carre = saisie_couleur()
    et faire que saisie_couleur gère le dialogue utilisateur, la vérification, les essais successif,... en bref se débrouille pour retourner une couleur 'valide'?
    L'intérêt est de réduire les échanges d'informations entre l'appelant et "saisir_couleur" à "retourne moi une couleur 'valide' peut importe comment tu la récupères".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def saisie_couleur()
        "Cette fonction permet de vérifier que le couleur saisi soit reconnu par TurtleGraphic."
        couleur = raw_input("Entrez votre couleur : ")
        while True:
            if couleur in [ 'pink', 'red', 'purple', 'brown', 'black', 'gray', 'white', 'blue', 'yellow', 'orange', 'green ']:break
            print"Couleur non valide. Rappel : la couleur est à saisir en anglais."
            couleur = raw_input("veuillez en saisir une autre s.v.p : ")
        return couleur
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def saisie_couleur()
        "Cette fonction permet de vérifier que le couleur saisi soit reconnu par TurtleGraphic."
        couleur = raw_input("Entrez votre couleur : ")
        while couleur not in [ 'pink', 'red', 'purple', 'brown', 'black', 'gray', 'white', 'blue', 'yellow', 'orange', 'green ']
            print"Couleur non valide. Rappel : la couleur est à saisir en anglais."
            couleur = raw_input("veuillez en saisir une autre s.v.p : ")
        return couleur

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

Discussions similaires

  1. Problème sur Variable globale
    Par diamonds dans le forum Langage
    Réponses: 1
    Dernier message: 16/03/2007, 10h52
  2. Réponses: 4
    Dernier message: 04/02/2007, 19h39
  3. Réponses: 2
    Dernier message: 25/12/2006, 19h08
  4. Problème de variable globale
    Par Oberown dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/08/2006, 11h57
  5. Problème de variable globale
    Par Tournevyks dans le forum Général Python
    Réponses: 6
    Dernier message: 29/06/2006, 11h16

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