2010-07-18 4 views
2
while stack.isEmpty() != 1: 
      fin = stack.pop() 
     print fin   - output is (1,1) 
     k = final.get(fin) 
     return k 

def directionToVector(direction, speed = 1.0): 
    dx, dy = Actions._directions[direction] 
    return (dx * speed, dy * speed) 
    directionToVector = staticmethod(directionToVector) 

mais quand je fais ce retour, il me donne une erreur et dernier est le répertoire que je l'ai fait avec des listes de clés et des valeursErreur dans l'exécution python code- problème dictionnaire

L'erreur est:

File "line 212, in directionToVector 
    dx, dy = Actions._directions[direction] 
KeyError: 'W' 
+0

Je pense 'sans stack.isEmpty():' a l'air un peu mieux – SiggyF

+0

Ou 'en pile:' supposant qu'il est une liste. –

+0

ys ... bt cela ne fait pas de différence dans la sortie – Shilpa

Répondre

0

Cette erreur

KeyError: 'W' 

signifie que la clé demandée (« W ») n'est pas une des clés qui sont stockés dans e e dictionnaire. C'est parce que votre clé de dictionnaire est «ouest» pas «W» (voir votre previous question). Essayez ceci:

key = { 'N' : 'north', 'S' : 'south', 'E' : 'east', 'W' : 'west' }[direction] 
dx, dy = Actions._directions[key] 

Sinon, assurez-vous que vous passez la chaîne « west » directionToVector et non la chaîne « W ».

+0

Mais je dois garder la clé comme (1,1), (4,5) .. dans ce format afin que je puisse revenir à mon chemin en faisant référence à cette touche et obtenir la direction liée à cette clé. Je ne peux pas changer la finction "def directionvector" ... Je ne suis pas autorisé à le faire .... – Shilpa

+1

Je pense que vous confondez les clés avec des valeurs. Les clés sont "ouest", "nord", etc, et les valeurs sont (1, 1), (4, 5), etc. – ars

+0

@Shilpa: Pourquoi n'êtes-vous pas autorisé à changer la définition? Votre professeur a dit ça? D'ailleurs vous n'avez pas besoin de changer la définition, juste comment elle s'appelle. –

1

Actions._directions est probablement un dictionnaire, donc la ligne:

dx, dy = Actions._directions[direction] 

lors de l'exécution (basé sur le message d'erreur) est:

dx, dy = Actions._directions["W"] 

et il se plaint qu'il n'y a pas de touche "W" dans ce dictionnaire. Vous devriez donc vérifier que vous avez réellement ajouté cette clé avec une certaine valeur. Sinon, vous pouvez faire quelque chose comme:

dx, dy = Actions._directions.get(direction, (0, 0)) 

où (0, 0) peut être une valeur par défaut que vous choisissez quand il n'y a pas de clé. Une autre possibilité est de gérer l'erreur explicitement:

try: 
    dx, dy = Actions._directions[direction] 
except KeyError: 
    # handle the error for missing key