编写Caesar和Vigenere密码。
我的代码工作正常(我认为)。
我对代码的关注,文本中有空格。我需要钥匙拿起,移动空间,并在有另一个角色时返回...
Ex: $ python vigenere.py
Type a message:
'The crow flies at midnight!'
Encryption key: boom
Correct output: Uvs osck rmwse bh auebwsih!
output I receive:
uvs drow tzufs mu muenwsit
你可以看到序列丢失后的第一个单词,因为它将m键应用于没有字符的空格... 我希望这是有道理的。
这是我的代码。我在第30行尝试纠正这个问题,但它没有帮助。 (如果文字中的字母=='': starting_index = starting_index - 1)
import string
def alphabet_position(letter):
if letter.isupper():
letter = ord(letter) - 65
else:
letter = ord(letter) - 97
return letter
def rotate_character(char, rot):
alpha = 'abcdefghijklmnopqrstuvwxyz'
new = alphabet_position(char) + rot
if char.isupper():
if new < 26:
new = new + 65
return chr(new)
elif new < 0 :
return char
elif new >= 26:
return char
else:
new = new + 97
return chr(new)
def encrypt(text, key):
alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
encrypted = []
starting_index = 0
for letter in text:
if letter in text == ' ':
starting_index = starting_index - 1
rotation = alphabet_position(key[starting_index])
if not letter in alpha:
encrypted.append(letter)
elif letter.isalpha():
encrypted.append(rotate_character(letter, rotation))
if starting_index == (len(key) - 1):
starting_index = 0
else:
starting_index += 1
return ''.join(encrypted)