2017-09-21 90 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)