我用字典写了一个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)
答案 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)