2017-09-21 10 views
0

辞書を使用してシーザー暗号を書きました。このコードは、空白やコンマなどの辞書の一部ではない文字が入力されるまで完全に機能します。私は他の文でこれらの例外を処理することにしましたが、コードはelse文をスキップ保持し、エラーを返します:マイコードがIf-Elseブロックのelseステートメントをスキップします

"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) 

答えて

0

コードが正しくインデントではありません - else文はif下にインデントする必要があります、forではありません。現在、間違った字下げは、for節 `, which means it will be executed after the for`ループのelse節を正しく終わらせます。

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

また、私は条件が 'Actual_Keyの文字でなければならないと思う: – jdehesa

+1

おそらく単なる間違いであると思われます。実際の問題は、常に真である最初のif文です – Maresh

0

あなたが天井のように見えるように見えます。他の文は、あなたのif文よりも、同じレベルにする必要があります:

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それから来るいつものように、messageになります。したがって、最初のif文は常に真です。

letterがあなたのdictionaryに存在するかどうかを確認する必要があります。

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) 
関連する問題