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 :

Probleme avec les GLOBAL


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut Probleme avec les GLOBAL
    Bonjour à tous.

    Je voudrais vous poser une petite question.
    La fonction Global sert à dire que la variable choisi pourra être changer par la suite et que celle- ci sera enregistrer avec la nouvelle valeur ?
    OU JE ME TROMPE ?

    D'ou mon code

    global J
    J = 1
    print J
    J += 1
    A chaque fois il devrais me rajouter +1 à la variable J, mais cela ne marche pas.
    Donc soit j'ai rien comprit au Global ( mais même en relisant le cours je pense toujours la même chose)
    Soit je mit prend mal.

    Quelqu'un pourrait m'éclaircir sur se point s'il vous plait

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut
    L'utilisation d'une variable global permet d'avoir une variable visible et modifiable dans tout ton programme (fonctions, méthodes, classes, etc...) .

    Petit exemple sans l'utilisation de 'global':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var = 1
    def test():
        var = 2
    print var
    Petit exemple en utilisant 'global':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    global var
    var = 1
    def test():
        global var
        var = 2
    test()
    print var
    Je ne suis pas expert dans les variables global (dont je déconseille l'utilisation) mais j'espère que cet exemple t'a aidé.

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Bonjour et merci de la réponse.
    Tu me déconseille les GLOBAL, j'en suppose que tu as une meilleur façon alors pour résoudre mon problème lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def throw_it():
        x = randrange(1,7)
        txt.configure(text="Valeur du dé : " +str(x))
     
        J = 1
        print J
        J += 1
    Je voudrais cas chaque appuie sur le bouton qui throw_it incrémenter la variable de +1

  4. #4
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Une solution, à voir si elle applicable à ton cas. Tu encapsules ta fonction dans une classe, et tu mémorises le compteur dans une variable de classe que tu interroges quand nécessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    class Test():
        def __init__(self):
            self.nbr_appui = 0
     
        def throw_it(self):
            self.nbr_appui += 1
     
    t = Test()
    print t.nbr_appui
    t.throw_it()
    print t.nbr_appui

  5. #5
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut Par Return et par Classe
    Je pense comme DelphiManiac qu'il serait de mieux d'utiliser une classe. Sinon cela est possible avec un return de fonction.

    Personnellement je n'ai jamais eu besoin d'utiliser de global.

    Voila deux exemples :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    import random
     
    print "Avec un return---------------------------"
    def throwIt(numTour,nomsJoueurs):
        tirageDe = random.randrange(1,7)
        print
        print "Valeur du dé : " +str(tirageDe)
        print "Joueur n°"+str(numTour%2)+" "+nomsJoueurs[numTour%2]
        numTour+=1
        return numTour
     
    nomsJoueurs=["Marius","César"]
    numTour=0
    for i in range(10):
        numTour=throwIt(numTour,nomsJoueurs)
     
    print "Avec une classe--------------------------"
    class Jeux:
        def __init__(self,nomsJoueurs,numTourInit=0):
            self.nomsJoueurs=nomsJoueurs
            self.numTour=numTourInit
     
        def throwIt(self):
            tirageDe = random.randrange(1,7)
            print
            print "Valeur du dé : " +str(tirageDe)
            print "Joueur n°"+str(self.numTour%2)+" "+self.nomsJoueurs[self.numTour%2]
            self.numTour+=1
     
    jeux=Jeux(["Marius","César"])
    for i in range(10):
        jeux.throwIt()

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Merci les gars
    Je vais étudier sa
    Mais petit truck que je n'avait pas dit LOL
    C'est que je me suis arrêter a l'étape 9 du tuto donc pas encore vu les classes ^^ ( je voulait juste évaluer mes connaissances avec le peu acquis )
    Mais merci quand même sa donne envie de continuer a découvrir

  7. #7
    Membre confirmé Avatar de moumine
    Profil pro
    Étudiant
    Inscrit en
    Août 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2008
    Messages : 237
    Par défaut
    Citation Envoyé par haulier Voir le message
    Bonjour à tous.

    Je voudrais vous poser une petite question.
    La fonction Global sert à dire que la variable choisi pourra être changer par la suite et que celle- ci sera enregistrer avec la nouvelle valeur ?
    OU JE ME TROMPE ?

    D'ou mon code

    global J
    J = 1
    print J
    J += 1
    A chaque fois il devrais me rajouter +1 à la variable J, mais cela ne marche pas.
    Donc soit j'ai rien comprit au Global ( mais même en relisant le cours je pense toujours la même chose)
    Soit je mit prend mal.

    Quelqu'un pourrait m'éclaircir sur se point s'il vous plait
    Salut,

    Dans ton cas, c'est normal qu'il n'incrémente pas ta variable "J" vu que tu la remet à "1" à chaque fois..
    (Si c'est une boucle!)
    A+

  8. #8
    Membre confirmé Avatar de moumine
    Profil pro
    Étudiant
    Inscrit en
    Août 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2008
    Messages : 237
    Par défaut
    Re salut,

    Tu peux essayer sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    global J
    J=1
    print J
    while J<20:              # Boucle qui va incrémenter "J" (20fois).
        J=J+1
    print J
    def test_du_J():
        print J              # Quelle soit à l'intérieur de la fonction ou pas la variable reste globale.
    test_du_J()              # Appel de la fonction "test_du_J()".
    Dans mon cas, la variable "J" est globale (donc tu peux la modifier comme tu le désire).
    Mais c'est vraiment déconseiller. Je crois même qu'il ont abandonné "global" dans la version 3 de python (si je dis pas de bêtise ).
    Bonne journée

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Non, ça ne sert à rien de déclarer une variable 'global' au top-level; toute déclaration de variable à ce niveau est d'office dans le namespace global. (Dans l'exemple de quentinlecler la déclaration 'global var' au top-level est inutile aussi).

    Dans ton exemple, on ne peut PAS modifier la variable J dans la fonction test_du_J. Toute tentative d'assignation à J créera une nouvelle variable J dans le namespace local de la fonction, qui masquera le J global. On ne peut qu'accéder à J en lecture seule par le système habituel des portées imbriquées.

    Au contraire, la déclaration 'global' ne s'utilise que lorsqu'on n'est pas dans le namespace global, pour indiquer que la variable en question se trouve dans le namespace global (ou doit y être créée, le cas échéant), et pas local.

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

Discussions similaires

  1. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32
  4. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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