2017-09-21 94 views
0

我用字典寫了一個凱撒密碼。代碼完美工作,直到輸入不是字典部分的字符(如空格或逗號)。我決定來處理與else語句的異常,但代碼保持跳過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來說,錯誤的縮進使它成爲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,因爲它是從它的到來。所以你的第一個陳述總是如此。

您需要檢查letter是否在您的詞典中。

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)