Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

problème avec exec()

+2 votes

voici la fonction 'generer brique':

def generer_briques():
    for i in range(1,7):
        exec('brique'+str(i)+'=Brique(canvas,"blue",'+str(51*i)+',50,'+str((50*i)+50)+',75)')

elle fonctionne mais dans la fonction 'boucle principale':

for i in range(1,7):
    exec('brique'+str(i)+'.dessiner()')

me renvoie :

exec('brique'+str(i)+'.dessiner()')
  File "<string>", line 1, in <module>
NameError: name 'brique1' is not defined 
demandé 22-Aou-2015 par ju
edité 22-Aou-2015 par jc

il semblerait que exec() ne mémorise pas que tu as 6 instances de Brique() quand tu fais l'appel à .dessiner() dans le 2nd exec().

1 Réponse

+4 votes
 
Meilleure réponse

exec() est souvent piégeant, il y a beaucoup de mauvaises raisons de l'utiliser et finalement peu de bonnes. Dans ton cas, pas besoin de exec(), au contraire.

Tu veux un groupe de briques ? fais une liste !

def generer_briques():
    briques = []
    for i in range(1, 7):
        briques.append(Brique(canvas, 'blue', 51*i, 50, 50*(i+1), 75))
    return briques

utilisation :

briques = generer_briques()
for brique in briques:
    brique.dessiner()

Dans ton code d'origine, tes brique0/brique1/... sont locales à la fonctions generer_briques() est inconnues à l'extérieur de cette fonction. C'est pour ça que tu obtiens une NameError.

répondu 23-Aou-2015 par bubulle (2,256 points)
edité 24-Aou-2015 par bubulle

pour la portée des variables j'ai capté entre temps
pour le tableau c est cool c'est ce que je voulais en fait mais je ne savais pas comment le mettre en place
merci !

...