UnboundLocalError: local variable referenced before assignment

Où les mésaventures d'un jeu d'aventure

Le problème exposé dans ce sujet a été résolu.

Bon, désolé, je débutes complètement avec la programmation alors j'amène des questions pas de très haut niveau. J'étais à peu prés sur que j'arriverais à écrire un jeu d'aventure texte avec mes petites connaissances mais j'ai bloqué avec une erreur qui me dit que j'ai référencé une variable locale. J'ai un peu cherché ces histoires de variables locales, variables globales. Fais des expériences, mais j'ai fais buggé davantage le programme. J'aimerais pouvoir faire des instances de mon joueur, de mes objets et des lieux quand je commance une nouvelle partie. Voici le code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# -*- coding:Utf-8 -*-
'''simple jeu d'aventure'''

#bibliothèques

import time, random


#variables

ACTIONS = ["aller", "regarder", "ouvrir", "prendre"]

#classes

class objet():
    def __init__(self, name):
        self.name = name

class joueur():
    def __init__(self):
        self.name = input("Quel est votre nom ?")

class lieu():
    def __init__(self, name):
        self.name = name



#fonctions


def nouvelle_partie():

    print("C'est partie !")
    #mise à zéro des variables
    score = 0

    #création des instances
    joueur = joueur()
    couteau = objet("couteau")
    marteau = objet("tomate")
    chambre = lieu("chambre")

    #jeu
    print("Debug 01 :", joueur.name, couteau.name, chambre.name, tomate.name)

def menu():
    print("Jeux d'aventure")
    nouvelle_partie()
    time.sleep(1)

#programme

if __name__ == '__main__':
    menu()

Edit : L'erreur quand je lance le programme :

1
2
3
4
5
6
7
8
Traceback (most recent call last):
  File ".\02_jeu_aventure_texte.py", line 57, in <module>
    menu()
  File ".\02_jeu_aventure_texte.py", line 51, in menu
    nouvelle_partie()
  File ".\02_jeu_aventure_texte.py", line 41, in nouvelle_partie
    joueur = joueur()
UnboundLocalError: local variable 'joueur' referenced before assignment
+0 -0

Certains développeurs Python (dont le créateur Guido van Rossum) ont écrit la PEP8 qui est un guide décrivant une manière de coder (nommage, indentation, etc). Pour ce qui est du nommage des classes, ils utilisent CapWords soit MaSuperClasse contrairement aux variables où ils utilisent lowercase avec des underscore soit ma_super_variable. Ça évite justement d'avoir des UnboundLocalError et permet même pour les humains de différencier facilement les variables des classes ! ;)

Libre à toi de suivre ces recommandations ou seulement quelques-unes ou aucunes. :)

+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