2015-08-26 3 views
1

J'essaye d'écrire un programme pour trouver une paire de nombres pour une somme particulière. Il utilise un dictionnaire pour stocker les numéros et trouver la paire en conséquence. Le code est le suivant:KeyError utilisant le dictionnaire en Python

def printpairs(A, arr_size, sum): 
    hash = {} 
    for i in A: 
     hash[i] = None 
    for i in range(0,arr_size): 
     temp = sum - A[i] 
     if (temp >= 0 and hash[temp] == 1): 
      print sum, A[i], temp 
     hash[A[i]] = 1 


A = [1,4,45,6,10,8] 
printpairs(A, 6, 16) 

Je reçois l'erreur:

Keyerror : 15 

Je ne reçois pas où je me trompe.

+1

S'il vous plaît toujours après tracebacks plein – Alik

+0

Vous n'avez pas besoin passer dans 'arr_size'; vous pouvez faire 'arr_size = len (A)' si vous en avez besoin. Mais vous n'en avez pas besoin; vous pouvez itérer directement sur 'A'. En outre, il est recommandé de ne pas utiliser sum et d'autres noms de built-ins comme noms de variables. – Cyphase

Répondre

3

quelques notes qui vous aideront à comprendre votre problème:

  • hash a la même taille que A, dans votre exemple, il est 6 et ses clés sont les éléments A
  • Dans la première itération, temp est 16 - A[0] ->16 - 1 -> 15
  • hash[temp] n'existe pas depuis A ne contient pas 15

S'il vous plaît noter que vous n'avez pas besoin de passer la taille de la liste, vous pouvez l'avoir dans la fonction en utilisant len. Aussi, lorsque vous avez ce genre de problèmes, pensez à utiliser le débogueur, il vous aidera à trouver votre problème plus rapidement que les gens sur Stack Overflow.

+0

Pouvez-vous suggérer un débogueur? Merci. – deep

1

Python déclenche une KeyError chaque fois qu'un objet dict() est demandé (en utilisant le format a = adict[key]) et la clé est pas dans le dictionnaire .

Si vous ne voulez pas avoir une exception, mais préférez un défaut valeur utilisée à la place, vous pouvez utiliser la méthode get():

A.get(15, 'default_value')