我的代码跳过了If-Else块的else语句

时间:2017-09-21 10:41:35

标签: python dictionary if-statement

我用字典写了一个Caesar密码。代码完美地工作,直到输入不是字典的一部分的字符,例如空格或逗号。我决定用else语句处理这些异常,但代码一直跳过else语句并返回错误:

  

"关键错误:' '"

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)

3 个答案:

答案 0 :(得分:2)

Letter将始终位于message,因为它来自它。所以你的第一个if语句总是如此。

您需要检查您的词典中是否有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)

答案 1 :(得分:0)

代码没有正确缩进 - else语句需要缩进if,而不是for。目前,错误的缩进使else子句为for子句** , which means it will be executed after the for循环正确终止。

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

答案 2 :(得分:0)

看起来你没有设置正确的缩进。 else语句应与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)