Protée des variables

a marqué ce sujet comme résolu.

Bonjour à tous.

J’ai fais un programme pour mon projet de terminale, mais je dois résoudre un problème de portée de variables qui m’empeche d’avancer :

Dans un premier script Perso_pour_mer.py, j’initalise un variable pm = 0 au tout début. Puis dans le fonction PersoMer() contenue dans ce script, je modifie cette variable pm avec ce code: global pm pm = 1 print(pm)

Je souhaite désormais récupérer la variable pm = 1 dans la fonction LieuForet() contenue dans un second script Lieu_pour_foret.py, comment faire ? Je n’arrive pas a récupérer la variable pm = 1 mais seulement le pm = 0.

Merci d’avance de votre aide

Bonjour,

Est-ce que tu pourrais présenter ton code ? Difficile de t’orienter sans, peut-être que ta fonction n’est pas appelée ou qu’il y a un problème entre modules.

De manière générale évite le mot-clé global qui met facilement le bazar, et si tu veux comprendre un peu plus ces histoires de portée, je peux te conseiller de lire https://zestedesavoir.com/tutoriels/3163/variables-scopes-et-closures-en-python/

Edit : Ah oui, je n’avais pas vu que tu parlais de « second script », et donc de deuxième module. Une variable dite globale en Python est en fait locale à un module.

Ce que tu peux faire dans ton second module c’est d’importer import Perso_pour_mer et ensuite utiliser Perso_pour_mer.pm qui sera bien la variable de l’autre module.

Je viens d’essayer mais cela ne fonctionne pas malheureusement, voici donc les 2 modules concernés:

Perso_pour_mer.py

import pygame from pygame.locals import from PIL import Image from Zone_mer import pygame.init()

pm = 0

def PersoMer():

####### Création de la fenêtre #################################################

fenetremp = pygame.display.set_mode((1920,1080), pygame.FULLSCREEN)
pygame.display.set_caption('ERWAY - ')

continuer = 1

fond_ecranmp = pygame.image.load("Flou Mer.png")
fenetremp.blit(fond_ecranmp, (0,0))
pygame.display.flip()

####### Création de la bulle ###################################################

pygame.draw.rect(fenetremp,(0,0,0),pygame.Rect(390,100,1520,610))
pygame.draw.rect(fenetremp,(255,255,255),pygame.Rect(400,110,1500,590))

####### Ajout du texte #########################################################

pygame.font.init()
font = pygame.font.SysFont('Minecraft z2font', 100)
text1 = font.render("Maison des animaux et de la nature,",0, (0,0,0))
fenetremp.blit(text1,(420,125))
text2 = font.render("Mon air est le plus pure.",0, (0,0,0))
fenetremp.blit(text2,(420,225))
text3 = font.render("Souvent rasée,",0, (0,0,0))
fenetremp.blit(text3,(420,325))
text4 = font.render("Je commence à manquer,",0, (0,0,0))
fenetremp.blit(text4,(420,425))
text5 = font.render("Alors que je suis indispensable à la vie.",0, (0,0,0))
fenetremp.blit(text5,(420,525))
text4 = font.render("Qui suis-je ?",0, (0,0,0))
fenetremp.blit(text4,(420,625))

####### Ajout du Personnage ####################################################

perso = pygame.image.load("perso_mer.png")
fenetremp.blit(perso, (0, 726))
pygame.display.flip()

####### Gestion du chemin ######################################################

pm = 1
print(pm)

####### Gestion des touches + souris ###########################################

while continuer == 1:
    for event in pygame.event.get():

        if event.type == KEYUP and event.key == K_ESCAPE:
            continuer = 0
pygame.display.flip()

pygame.quit()

####### Fin de la fonction #####################################################

Et voici Lieu_pour_foret.py

import pygame from pygame.locals import * from PIL import Image import Perso_pour_mer pygame.init()

def LieuForet():

####### Création de la fenêtre #################################################

fenetrefl = pygame.display.set_mode((1920,1080), pygame.FULLSCREEN)
pygame.display.set_caption('ERWAY - La Tente')

continuer = 1

fond_ecranfl = pygame.image.load("Flou Foret.png")
fenetrefl.blit(fond_ecranfl, (0,0))
pygame.display.flip()

####### Création de la bulle ###################################################

pygame.draw.rect(fenetrefl,(0,0,0),pygame.Rect(390,100,1520,610))
pygame.draw.rect(fenetrefl,(255,255,255),pygame.Rect(400,110,1500,590))

####### Ajout du texte #########################################################

pygame.font.init()
font = pygame.font.SysFont('Minecraft z2font', 100)
text1 = font.render("Abituée au froid",0, (0,0,0))
fenetrefl.blit(text1,(420,175))
text2 = font.render("Je vois des gens toute l'année,",0, (0,0,0))
fenetrefl.blit(text2,(420,275))
text3 = font.render("Soit pour marcher,",0, (0,0,0))
fenetrefl.blit(text3,(420,375))
text4 = font.render("Ou pour glisser malgré les diffcultés.",0, (0,0,0))
fenetrefl.blit(text4,(420,475))
text5 = font.render("Qui suis-je ?",0, (0,0,0))
fenetrefl.blit(text5,(420,575))

####### Ajout du lieu ##########################################################

lieu = pygame.image.load("lieu_foret.png")
fenetrefl.blit(pygame.transform.scale(lieu, (500, 500)),(0,600))
pygame.display.flip()

####### Gestion du chemin ######################################################

if Perso_pour_mer.pm == 1:
    lf = 2
    print(lf)

####### Gestion des touches + souris ###########################################

while continuer == 1:
    for event in pygame.event.get():

        if event.type == KEYUP and event.key == K_ESCAPE:
            continuer = 0
            pygame.display.flip()
pygame.display.flip()

pygame.quit()

####### Fin de la fonction #####################################################

Ces 2 modules font partit d’une multitude d’autres qui composent un jeu vidéo, je peux vous envoyer le dossier contenant toutes les ressources afin que vous puissez étudier tout le programme si vous le souhaitez.

Salut,

Pense aux balises code ```python / ``` pour délimiter le bloc de code et le colorer.

De ce que je vois, ta variable pm n’est pas déclarée comme globale dans la fonction PersoMer, donc tu définis une variable locale à la fonction.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte