Help in python : UnboundLocalError: local variable 'n' referenced before assignment

aaaaaaaaaaaaaah

a marqué ce sujet comme résolu.

Salut,

Il serait plus lisible d’avoir le code entre balises de code, dont la syntaxe est la suivante :

 ```py
 ton code ici
 ```

Tu dois rendre n accessible avant de t’en servir en faisantn = n + 1. Tu peux penser l’avoir fait avec ta variable globale, mais Python ne sait pas que c’est une globale et donc croit qu’elle n’existe pas. Tu dois spécifier que c’est une globale au début de play en ajoutant global n.

C’est ce que je fais dans cet exemple minimal :

n = 0

def fun():
    global n
    n = n + 1

fun()

Ceci dit, utiliser une globale me paraît un peu inadapté. Je pense que tu pourrais réfléchir à passer n en argument de play() (et probablement aussi d’autres choses utiles pour la fonction et mise à jour au cours du jeu.

Yo!

SpihcNess

Oy ! :pirate:

Tu peux mettre la variable n en tant que globale, ou bien la passer en argument à ta fonction play. Étant donné que ta fonction est récursive, il faut la repasser en argument à chaque appel, après l’avoir incrémentée si nécesasire. (play(n+1) ou play(n) selon le cas).

Dans ton exemple, tu peux laisser n en global je suppose, mais je te conseille vivement de ne pas prendre cette habitude si tu veux pouvoir débugguer des programmes plus complexes à l’avenir. La gestion d’état partagé (telle une variable globale), c’est assez dur à gérer quand un programme devient non trivial.

+0 -0

Salut,

Si ta variable n n’est pas utile à l’extérieur de play, tu peux aussi la définir directement à l’intérieur de la fonction (sans même avoir besoin d’un paramètre).

Plus globalement1, je peux te conseiller la lecture de ce tutoriel pour comprendre comment se produit cette erreur : https://zestedesavoir.com/tutoriels/3163/variables-scopes-et-closures-en-python/


  1. Pun intended

Salut,

Si ta variable n n’est pas utile à l’extérieur de play, tu peux aussi la définir directement à l’intérieur de la fonction (sans même avoir besoin d’un paramètre).

Plus globalement1, je peux te conseiller la lecture de ce tutoriel pour comprendre comment se produit cette erreur : https://zestedesavoir.com/tutoriels/3163/variables-scopes-et-closures-en-python/

1: Pun intended

entwanne

Sa fonction est récursive, donc chaque n local sera initialisé à 0 après chaque appel récursif de play().

Cela étant dit, je ne vois pas l’intérêt d’une fonction ici. Une boucle à la place de la fonction et des continue à la place des récursions marcheraient tout aussi bien (et le n serait initialisé une seule fois, avant la boucle).

+0 -0
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