2016-08-01 3 views
1

J'ai écrit le code suivant pour imprimer un dictionnaire alphabétique majuscule/minuscule dont les valeurs peuvent être décalées d'un entier. Il continue de renvoyer une seule entrée (par exemple, {Z: z}), même si lorsque j'utilise une instruction print dans la boucle for, je vois le dictionnaire entier imprimé comme prévu, quel que soit le décalage. Des idées sur pourquoi il ne retournerait qu'une seule entrée seraient grandement appréciées?Dictionnaire Python ne renvoyant qu'une seule entrée?

def dictionary(self, shift):  
    ''' 
    For Caesar cipher. 

    shift (integer): the amount by which to shift every letter of the 
    alphabet. 0 <= shift < 26 

    Returns: a dictionary mapping a letter (string) to 
      another letter (string). 
    ''' 

    #create empty dictionary 
    alphaDict = {} 

    #retrieve alphabet in upper and lower case 
    letters = string.ascii_lowercase + string.ascii_uppercase 

    #build dictionary with shift 
    for i in range(len(letters)): 
     if letters[i].islower() == True: 
      alphaDict = {letters[i]: letters[(i + shift) % 26]} 
     else: 
      alphaDict = {letters[i]: letters[((i + shift) % 26) + 26]} 

    return alphaDict 
+3

Vous continuez à remplacer votre dict par une nouvelle dictée à entrée unique. – user2357112

Répondre

2

Au lieu de mettre en alpha dict être une nouvelle dict d'entrée à chaque utilisation, commencez par un vide dict et ajouter des valeurs aux touches que vous voulez.

#build dictionary with shift 
for i in range(len(letters)): 
    if letters[i].islower() == True: 
     alphaDict[letters[i]] = letters[(i + shift) % 26] 
    else: 
     alphaDict[letters[i]] = letters[((i + shift) % 26) + 26] 

return alphaDict 
+0

Merci beaucoup, n'avait aucune idée que je manquais ça! –

2

Vous créez un nouveau dictionnaire à chaque boucle plutôt que de l'ajouter. Vous voulez créer une nouvelle paire key - value pour le dictionnaire chaque boucle.

for i in letters: 
     if i.islower() == True: 
      alphaDict[i] = letters[(letters.index(i) + shift) % 26]} 
     else: 
      alphaDict[i] = letters[((letters.index(i) + shift) % 26) + 26]} 

return alphaDict 
+0

Un grand merci pour la perspicacité! –