2017-09-21 1 views
0

Ich schrieb eine Caesar-Chiffre mit Wörterbüchern. Der Code funktioniert einwandfrei, bis ein Zeichen eingegeben wird, das nicht Teil des Wörterbuchs ist, z. B. ein Leerzeichen oder ein Komma. Ich beschloss, diese Ausnahmen mit einer anderen Aussage zu handhaben, aber der Code hält die else-Anweisung übersprungen und gibt den Fehler:Mein Code überspringt die Else-Anweisung von If-Else Block

"Key Error: ' '".

Actual_Key = {"A":0, "B":1, "C":2, "D":3, "E":4, "F":5, "G":6, "H":7, "I":8, 
"J":9, "K":10, "L":11, "M":12, "N":13, "O":14, "P":15, "Q":16, "R":17, 
"S":18, "T":19, "U":20, "V":21, "W":22, "X":23, "Y":24, "Z":25} 

Reverse_Key = {0:"A", 1:"B", 2:"C", 3:"D", 4:"E", 5:"F", 6:"G", 7:"H", 
8:"I", 9:"J", 10:"K", 11:"L", 12:"M", 13:"N", 14:"O", 15:"P", 16:"Q", 
17:"R", 18:"S", 19:"T", 20:"U", 21:"V", 22:"W", 23:"X", 24:"Y", 25:"Z"} 

encrypted_message = "" 

message = input("Please enter your message: \n> ").upper() 
key = int(input("Enter a key number between 0 and 26 \n> ")) 

for letter in message: 
    if letter in message: 
     new_value = Actual_Key[letter] + key 

     if new_value >= 26: 
      new_value = new_value - 26 

     citext = str(Reverse_Key[new_value]) 

     encrypted_message += citext 

else: 
    encrypted_message += letter 

print (encrypted_message) 

Antwort

0

Der Code nicht eingerückt ist richtig - die else Anweisung muss unter der if werden eingekerbt nicht die for. Derzeit macht die falsche Einrückung eine else Klausel ** für die for Klausel , which means it will be executed after the für "Schleife" korrekt beendet.

for letter in message: 
    if letter in message: 
     new_value = Actual_Key[letter] + key 

     if new_value >= 26: 
      new_value = new_value - 26 

     citext = str(Reverse_Key[new_value]) 

     encrypted_message += citext 

    else: # Note the indentation here! 
     encrypted_message += letter 
+0

Auch ich denke, die bedingte in Actual_Key 'wenn Brief sein sollte:' – jdehesa

+1

identation wahrscheinlich nur ein Einfügen Fehler. Das eigentliche Problem ist die erste if-Anweisung, die immer wahr ist – Maresh

0

sieht aus wie Sie haben den richtigen Einzug gesetzt. Die else-Anweisung sollte als Ihre if-Anweisung auf dem gleichen Niveau sein:

for letter in message: 
    if letter in message: 
     new_value = Actual_Key[letter] + key 

     if new_value >= 26: 
     new_value = new_value - 26 

     citext = str(Reverse_Key[new_value]) 

     encrypted_message += citext 

    else: 
     encrypted_message += letter 

print (encrypted_message) 
2

Letter wird immer in message sein, wie es aus es ist. Ihre erste if-Aussage ist also immer wahr.

Sie müssen überprüfen, ob letter in Ihrem Wörterbuch ist.

for letter in message: 
    if letter in Actual_key: 
     new_value = Actual_Key[letter] + key 

     if new_value >= 26: 
      new_value = new_value - 26 

     citext = str(Reverse_Key[new_value]) 

     encrypted_message += citext 

    else: 
     encrypted_message += letter 

print (encrypted_message) 
Verwandte Themen