2017-02-20 3 views
1

S'il vous plaît voir ci-dessous des exemples:Comment effectuer un travail de définition?

import pygame 
pygame.init() 
x = 800 
y = 600 
programDisplay = pygame.display.set_mode((x,y)) 
pygame.display.set_caption('Title') 
pygame.display.update() 
programExit = False 
while not programExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True 
pygame.quit() 
quit() 

Deuxième exemple:

import pygame 
pygame.init() 
x = 800 
y = 600 
programDisplay = pygame.display.set_mode((x,y)) 
pygame.display.set_caption('Title') 
pygame.display.update() 
programExit = False 
def programQuit(): 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True 
while not programExit: 
    programQuit() 
pygame.quit() 
quit() 

Comment faire la définition du travail 2ème exemple si le résultat est le même que dans le premier exemple? Pensez que cela pourrait être quelque chose à voir avec les variables globales et locales, mais cela n'a pas fonctionné.

+0

Ne donnez pas le même nom à ProgramQuit que la variable programExit – Carcigenicate

+0

J'ai supprimé le paramètre mais je ne sais toujours pas comment le faire fonctionner. – Tomasz

Répondre

0

Ici, je l'ai fixé

import pygame 
pygame.init() 
x = 800 
y = 600 
programDisplay = pygame.display.set_mode((x,y)) 
pygame.display.set_caption('Title') 
pygame.display.update() 
programExit = False 

def checkForProgramQuit(): 
    global programExit 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True 



while not programExit: 
    checkForProgramQuit() 
    programDisplay.fill((255,255,255)) 
    pygame.display.update() 

pygame.quit() 
quit() 

la variable programExit vous modifiez était locale à la fonction.

0

Carcigenticate a tout à fait raison, mais voici quelques notes sur ce qui se passe ici et quelques pratiques qui vont l'éviter à l'avenir.

programExit = False 
def programQuit(programExit=False): 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      programExit = True # Issue 1 

while not programExit: 
    programQuit() 

Le problème 1 est que cette affectation crée une nouvelle variable dans la portée de la fonction et définit sa valeur. Il ne modifie pas la valeur de la variable de niveau du programme.

Une meilleure façon de procéder consiste à faire en sorte que la fonction repasse à son résultat en tant que valeur de retour comme celle-ci.

def programContinue(): 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      return False 
    return True 

while programContinue(): 
    pass 

également en inversant la logique booléenne renvoyée par la fonction, je pense que les choses deviennent un peu plus clair et on peut se débarrasser du « non ». Exprimer la clause while de cette façon me semble un peu plus clair. L'instruction 'pass' pourrait utilement être remplacée par un enregistrement ou la mise à jour de l'affichage de la réponse de C.