Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/10/2022, à 13:41

chris7522

[RESOLU] Variable Globale (python)

Bonjour a toutes et a tous ,
Je voudrai savoir si ma variable ' global clickable' (dont la valeur va  pouvoir etre modifié) doit etre declaré au préalable a l' éxterieur de ma fonction ?

Voici le bout de code :

import pygame
pygame.init()
clock=pygame.time.Clock()

yellow=(255,255,0)
black=(0,0,0)
white=(255,255,255)
grey=(150,150,150)
green=(0,255,0)

alienimage=pygame.image.load('data/R11E.png')

first=True
second=False
third=False
fourth=False
fifth=False

def button(win,msg,x,y,w,h,itext,atext,col):
    mouse = pygame.mouse.get_pos()
    if msg=='Back to Title Screen':
        size=20
        w+=50
    elif msg=='Pause':
        size=20
    elif msg=='Use':
        size=15
    else:
        size=35
    if x<mouse[0]<x+w and y<mouse[1]<y+h:
        pygame.draw.rect(win,col,(x,y,w,h))
        font1=pygame.font.SysFont('comicsansms',size)
        text=font1.render(msg,1,atext)
        win.blit(text, (round(x + (w/2 - text.get_width()/2)),round( y + (h/2 - text.get_height()/2))))
        click=pygame.mouse.get_pressed()
        [b]global clickable[/b]
        if click[0]==1:
            loop=True
            while loop:
                e=False
                for event in pygame.event.get():
                    if event.type==pygame.MOUSEBUTTONUP:
                        e=True
                if e:
                    return True
            
        else:
            return False
    else:
        pygame.draw.rect(win,col,(x,y,w,h),1)
        font1=pygame.font.SysFont('comicsansms',size)
        text=font1.render(msg,1,itext)
        win.blit(text, (round(x + (w/2 - text.get_width()/2)),round( y + (h/2 - text.get_height()/2))))

font1=pygame.font.SysFont('comicsansms',20)

Dernière modification par chris7522 (Le 06/10/2022, à 15:25)

Hors ligne

#2 Le 05/10/2022, à 14:05

Compte supprimé

Re : [RESOLU] Variable Globale (python)

Bonjour,
Pourquoi ne joues tu pas avec l'invite de commande pour voir ce qu'il en est?

>>> def truc():
	global var
	var = "yop"

	
>>> truc()
>>> print(var)
yop
>>>

#3 Le 05/10/2022, à 18:39

chris7522

Re : [RESOLU] Variable Globale (python)

Je te remercie de ton aide . J'ai bien compris le fonctionnement de la variable globale mais est il obligatoire de la déclaré d'abord en dehors de la fonction ?
Je crois avoir des lacunes importantes dans ce domaine !

Hors ligne

#4 Le 05/10/2022, à 19:13

iznobe

Re : [RESOLU] Variable Globale (python)

Bonsoir en general , je me rapelle plus trop pour python , mais lorsqu ' on declare une variable dans une fonction , elle ne peut pas etre globale .
c ' est ce qu ' on apelle la portée des variables .

si tu apelles une variable globale dans une fonction pas de probleme cela fonctionne ( declarée en dehors d' une fonction donc )  , par contre il ne faut pas la modifier ni la declarer dans une fonction .

ma_variable_globale = test
fonction () {
ma_variable_globale = ko
print ma_variable_globale # donnera : ko
}
print ma_variable_globale # donnera : test

source de confusion tres souvent donc a eviter a tout prix !
j ' ecris du pseudo code , c' est meme pas du python , mais le principe reste le meme ( en theorie ) .

Tu peux par contre demander a ta fonction de retourner une ou des variables standard , meme un tableau de variables si besoin .

il y a des cours sur le net pour ce genre de choses et des milliers d' exemple pour tous les langages wink

Dernière modification par iznobe (Le 05/10/2022, à 19:19)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#5 Le 05/10/2022, à 21:34

pingouinux

Re : [RESOLU] Variable Globale (python)

Bonsoir,
Sans la déclaration global dans la fonction :

$ cat script1.py
var = 5
print('avant la fonction', var)

def f():
   var = 7
   print('dans la fonction', var)

f()
print('après la fonction', var)
$ python3 script1.py
avant la fonction 5
dans la fonction 7
après la fonction 5

Avec la  déclaration global dans la fonction :

$ cat script2.py
var = 5
print('avant la fonction', var)

def f():
   global var
   var = 7
   print('dans la fonction', var)

f()
print('après la fonction', var)
$ python3 script2.py
avant la fonction 5
dans la fonction 7
après la fonction 7

Hors ligne

#6 Le 06/10/2022, à 14:40

chris7522

Re : [RESOLU] Variable Globale (python)

Merci beaucoup a tous les trois d'avoir pris la peine de me répondre et pour vos éclaircissements .
J'ai bien compris la portée des variables et la nécessité de faire précéder le nom de la variable par " global " pour que la valeur de celle-ci , si elle est modifié dans la fonction , puisse l'être aussi en dehors de cette fonction .
Le soucis dans le code que je vous ai proposé est que ma variable " global clickable " dans la fonction " def button () " n'est pas déclaré avant en dehors de la fonction . J'ai regardé du début du fichier ( import pygame ...) jusqu'à :
font1=pygame.font.SysFont('comicsansms',20) et je ne vois rien ...

Hors ligne

#7 Le 06/10/2022, à 14:59

pingouinux

Re : [RESOLU] Variable Globale (python)

La variable n'a pas besoin d'être déclarée en dehors de la fonction, si tu ne l'utilises pas avant qu'elle soit définie.

$ cat script3.py
#var = 5
#print('avant la fonction', var)

def f():
   global var
   var = 7
   print('dans la fonction', var)

f()
print('après la fonction', var)
$ python3 script3.py
dans la fonction 7
après la fonction 7
$ cat script4.py
#var = 5
#print('avant la fonction', var)

def f():
   global var
#  var = 7
   print('dans la fonction', var)

f()
print('après la fonction', var)
$ python3 script4.py
Traceback (most recent call last):
  File "/tmp/tst/script4.py", line 9, in <module>
    f()
  File "/tmp/tst/script4.py", line 7, in f
    print('dans la fonction', var)
NameError: name 'var' is not defined. Did you mean: 'vars'?

Hors ligne

#8 Le 06/10/2022, à 15:24

chris7522

Re : [RESOLU] Variable Globale (python)

Ok parfaitement claire ! smile
Encore Merci !

Hors ligne

#9 Le 06/10/2022, à 21:36

chris7522

Re : [RESOLU] Variable Globale (python)

Il y a quand même un truc pas super clair , dans le message d'erreur de ton dernier exemple, il dit que la variable " var" n'est pas définie , alors qu'elle a été déclarée : " global var" dans la fonction . Il a fallu que tu commente " var = 7 " , pour déclencher l'erreur .
Il faut absolument affecter une valeur a cette variable ?

Hors ligne

#10 Le 06/10/2022, à 21:43

pingouinux

Re : [RESOLU] Variable Globale (python)

Pour utiliser la variable (dans le print), elle doit avoir une valeur (être définie). Le fait de la déclarer ne suffit pas.

Hors ligne

#11 Le 06/10/2022, à 21:57

chris7522

Re : [RESOLU] Variable Globale (python)

Ok d'accord . Merci

Hors ligne

#12 Le 07/10/2022, à 07:27

Compte supprimé

Re : [RESOLU] Variable Globale (python)

Précisons tout de même que l'usage de la commande global est à déconseiller.
Il est considéré comme étant une mauvaise pratique(évolution des variables difficile à suivre/ débug).
On utilisera plutôt return pour transmettre à l'espace global un objet défini dans une fonction, ou on utilisera des objets tel que list(), dict(), ...