2016-08-01 5 views
1

Ich habe den folgenden Code geschrieben, um ein Groß-/Kleinbuchstaben-Wörterbuch zu drucken, dessen Werte um eine ganze Zahl verschoben werden können. Es gibt nur einen Eintrag zurück (z. B. {Z: z}), obwohl ich, wenn ich eine print-Anweisung in der for-Schleife verwende, das gesamte Wörterbuch wie erwartet ausgedruckt sehe, egal, um was für eine Verschiebung es sich handelt. Irgendwelche Gedanken darüber, warum es nur einen Eintrag zurückgeben würde, würden sehr geschätzt werden?Python-Wörterbuch nur 1 Eintrag zurückgeben?

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

Sie ersetzen Ihr Diktat durch ein neues Ein-Eintrag-Diktat. – user2357112

Antwort

2

Statt alpha dict der Einstellung ein neuer Eintrag dict mit jedem Gebrauch zu sein, beginnen Sie mit einem leeren dict und fügen Sie Werte an den Tasten, die Sie wollen.

#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

Vielen Dank, hatte keine Ahnung, dass ich das vermisst habe! –

2

Sie erstellen ein neues Wörterbuch für jede Schleife, anstatt sie anzuhängen. Sie möchten ein neues key - value-Paar für das Wörterbuch für jede Schleife erstellen.

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

Vielen Dank für die Einsicht! –

Verwandte Themen