Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2036 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [Python] [Résolu] Variables globales

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Python] [Résolu] Variables globales

n°1956576
Profil sup​primé
Posté le 10-01-2010 à 19:05:45  answer
 

Bonsoir,  
 
Me revoilà avec une nouvelle question. Comme je débute en Python, je risque d'en avoir souvent (patapay).
 
Lorsque je lance l'exécution du programme suivant, Python m'indique que y2 n'est pas définie. J'ai un peu de mal à faire la distinction entre variables locales et variables globales. Même chose avec les autres langages.
 
Quelqu'un pourrait-il m'aider à faire tourner mon* programme et m'expliquer simplement en quoi ces deux types de variables sont différents.
 
Je sais déjà que les variables locales sont définies à l'intérieur d'une fonction et les variables globales à l'extérieur, mais à part ça...
 
Le script :
 

Citation :

from Tkinter import *
from random import randrange
 
def drawline():
    "Tracé d'une ligne dans le canevas can1"
    global x1, y1, x2, y2, coul
    can1.create_line(x1, y1, x2, y2, width=2, fill=coul)
 
y2, y1 = y2+10, y1-10
 
def changecolor():
    "Changement aléatoire de la couleur du tracé"
    global coul
    pal=['purple', 'cyan', 'maroon', 'green', 'red', 'blue', 'orange', 'yellow', 'pink', 'silver']
    c = randrange(10)
    coul = pal[c]
 
x1, y1, x2, y2 = 10, 190, 190, 10          
coul = 'dark green'                          
 
fen1 = Tk()
can1 = Canvas(fen1, bg='dark grey', height=200, width=200)
can1.pack(side=LEFT)
bou1 = Button(fen1, text='Quitter', command=fen1.quit)
bou1.pack(side=BOTTOM)
bou2 = Button(fen1, text='Tracer une ligne', command=drawline)
bou2.pack()
bou3 = Button(fen1, text='Autre couleur', command=changecolor)
bou3.pack()
 
fen1.mainloop()                              
fen1.destroy()


 
* Programme récupéré en fait sur le Net
 
Merci d'avance.

Message cité 1 fois
Message édité par Profil supprimé le 26-01-2010 à 19:20:25
mood
Publicité
Posté le 10-01-2010 à 19:05:45  profilanswer
 

n°1956625
KangOl
Profil : pointeur
Posté le 10-01-2010 à 22:18:05  profilanswer
 

http://pragprog.com/titles/gwpy/practical-programming


---------------
Nos estans firs di nosse pitite patreye...
n°1956627
Profil sup​primé
Posté le 10-01-2010 à 22:34:33  answer
 


J'ai pas spécialement envie de m'acheter un bouquin, surtout en anglais.

n°1956640
KangOl
Profil : pointeur
Posté le 10-01-2010 à 23:38:39  profilanswer
 

Tu veux apprendre à programmer ou pas ?
Et si t'aimes pas l'anglais, arrêtes tout de suite, tu arriveras à pas grand chose...


---------------
Nos estans firs di nosse pitite patreye...
n°1959826
Sve@r
Posté le 22-01-2010 à 21:05:58  profilanswer
 


 
Bonsoir
 
J'arrive un peu en retard mais c'est parce que je viens plus trop souvent dans cette partie du forum.
 
Bon, tout d'abord parlons de ton programme. Tu remarqueras que la ligne 13, celle qui pose problème, est totalement hors contexte. Pourquoi remplir des valeurs qui seront écrasées par celles de la ligne 22 ?
Cette simple réflexion permet ensuite d'en déduire que la ligne 13 doit probablement appartenir à la fonction "drawline()" mais qu'il manque la tabulation qui l'indique. Sans cette dernière, l'interpréteur cherche à exécuter cette ligne avant l'appel à la fonction. Et alors la variable y2 n'est pas encore définie
Il te suffit juste de décaler cette ligne pour la mettre au même niveau que celle qui la précède. Evidemment si ce programme récupéré sur le net avait été un poil plus propre, la fin de fonction y serait indiquée et t'aurais trouvé l'erreur plus facilement
 
Voici un code qui fonctionne

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3.  
  4. from Tkinter import *
  5. from random import randrange
  6.  
  7. def drawline():
  8.    "Tracé d'une ligne dans le canevas can1"
  9.    global x1, y1, x2, y2, coul
  10.    can1.create_line(x1, y1, x2, y2, width=2, fill=coul)
  11.    y2, y1 = y2+10, y1-10
  12. # drawline()
  13.  
  14. def changecolor():
  15.    "Changement aléatoire de la couleur du tracé"
  16.    global coul
  17.    pal=['purple', 'cyan', 'maroon', 'green', 'red', 'blue', 'orange', 'yellow', 'pink', 'silver']
  18.    c = randrange(10)
  19.    coul = pal[c]
  20. # changecolor()
  21.  
  22. x1, y1, x2, y2 = 10, 190, 190, 10        
  23. coul = 'dark green'                        
  24.  
  25. fen1 = Tk()
  26. can1 = Canvas(fen1, bg='dark grey', height=200, width=200)
  27. can1.pack(side=LEFT)
  28. bou1 = Button(fen1, text='Quitter', command=fen1.quit)
  29. bou1.pack(side=BOTTOM)
  30. bou2 = Button(fen1, text='Tracer une ligne', command=drawline)
  31. bou2.pack()
  32. bou3 = Button(fen1, text='Autre couleur', command=changecolor)
  33. bou3.pack()
  34.  
  35. fen1.mainloop()                            
  36. fen1.destroy()


 
Maintenant les globales: ben une variable globale est, comme son nom l'indique, une variable qui est connue dans la globalité du programme. Maintenant, beaucoup de programmeurs préfèrent éviter de les utiliser car quand une variable globale part en torche, difficile de trouver à quel endroit elle s'est mise à déconner. Surtout que Python est assez riche de possibilités pour te permettre de ne pas en avoir besoin.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1960084
Profil sup​primé
Posté le 24-01-2010 à 21:06:11  answer
 

Sve@r > encore une erreur d'indentation. Cela dit, je commence à moins en faire. J'ai bien avancé dans l'apprentissage de ce langage et je commence à m'habituer à son extrême rigueur.
 
Je retiens l'idée d'indiquer la fin de la fonction [:bien]
 
Quant aux variables globales, j'essaierai de les utiliser le moins possible alors :D  
 
Merci d'avoir pris le temps de me répondre :jap:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [Python] [Résolu] Variables globales

 

Sujets relatifs
Perdu dans un code Python![Résolu] mise en page xsl
[Python] [Résolu] Liste[RESOLU] Ascenseur qui descend et qui s'arrete besoin d'aide
superposition de swf (insoluble)[Python] Questions de nOob
Concaténer plusieurs variables dans une seule avec séparateur?[Resolu] Tableau nb cours par categorie (Moodle)
[RESOLU] [MYSQL] Retrouver mot de passe d'un user 
Plus de sujets relatifs à : [Python] [Résolu] Variables globales


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR