2017-09-14 4 views
-1

J'ai essayé de créer un jeu de test pour apprendre les classes et comment elles fonctionnent. Mon programme, qui est la suivante:NameError: name '' n'est pas défini - Vu après avoir essayé d'obtenir des entrées

print('The Dark Tunnel 2: Electric Boogaloo') 
    win = False 
    class Room(object): 

     def __init__(self, location): 
     self.location = location 

     def move(self): 
     self.move = move 
print(rooms[self.move]) 

     def look(self): 
     self.look = look 
     print(secrets[self.look]) 
    rooms = {'north': 'You are in a dark room.', 'south': 'You are in a bloody room.', 'west': 'You are in a wet room.', 'east': 'You are in a grungy room.'} 
    secrets = {'north': 'There doesn\'t seem to be anything you missed.', 'south': 'There is an old coin by your feet.', 'west': 'There is too much water at your feet.', 'east': 'Is there someone behind those bars?'} 
    while win == False: 
     action = input('> ') 
     if action in rooms: 
     Room.move(action) 
     else: 
     Room.look(action) 

Après l'entrée « nord » que je pensais éteignaient «Vous êtes dans une pièce sombre je suis:

Traceback (most recent call last): 
    File "program.py", line 20, in <module> 
    Room.move(action) 
    File "program.py", line 9, in move 
    self.move = move 
    NameError: name 'move' is not defined 
+0

Le problème est exactement ce que dit l'erreur: vous ne définissez pas 'move', et pourtant vous l'appelez. –

+1

Vous ne savez pas ce que vous faites dans la fonction 'move'. –

+0

Dans la fonction de déplacement, j'essayais de faire ressortir la valeur de ce que vous avez entré dans "action" –

Répondre

2

Si vous voulez que votre méthode move d'accepter un argument appelé move, alors vous devez spécifier ce paramètre lorsque vous définissez la méthode:

def move(self, move): 
    self.move = move 

Sauf que votre attribut ne move eds pour avoir un nom différent de votre méthode move; sinon, vous remplacez la méthode self.move par la valeur fournie.

def set_move(self, move): 
    self.move = move 

Ensuite, vous devez appeler à l'aide d'un exemple de Room, pas la classe elle-même.

r = Room('some location') 
... 
r.set_move(action) 
+0

Merci. Tu es un vrai frère –