Vigenere没有用python加密我的邮件
所以我一直在完成一项任务,这项任务使用了创建凯撒和维格纳密码。我已经创建了凯撒密码,维格纳的密码也差不多完成了。我遇到的问题是实际的加密本身。在我的代码中,我已经从标点符号和大写字母方面解决了所有问题,但当我只是使用print来测试我的函数时,它只是向我吐出了相同的短语。我不确定问题是我的函数在完成函数的其余部分之前读取了关键字,还是我遗漏了什么。任何帮助都将不胜感激Vigenere没有用python加密我的邮件,python,vigenere,Python,Vigenere,所以我一直在完成一项任务,这项任务使用了创建凯撒和维格纳密码。我已经创建了凯撒密码,维格纳的密码也差不多完成了。我遇到的问题是实际的加密本身。在我的代码中,我已经从标点符号和大写字母方面解决了所有问题,但当我只是使用print来测试我的函数时,它只是向我吐出了相同的短语。我不确定问题是我的函数在完成函数的其余部分之前读取了关键字,还是我遗漏了什么。任何帮助都将不胜感激 def alphabet_position(letter): alphabet_pos = {'A':0, 'a':0,
def alphabet_position(letter):
alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2, 'D':3,
'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6, 'H':7, 'h':7, 'I':8,
'i':8, 'J':9, 'j':9, 'K':10, 'k':10, 'L':11, 'l':11, 'M':12, 'm':12,
'N': 13, 'n':13, 'O':14, 'o':14, 'P':15, 'p':15, 'Q':16, 'q':16,
'R':17, 'r':17, 'S':18, 's':18, 'T':19, 't':19, 'U':20, 'u':20, 'V':21,
'v':21, 'W':22, 'w':22, 'X':23, 'x':23, 'Y':24, 'y':24, 'Z':25, 'z':25
}
pos = alphabet_pos[letter]
return pos
def rotate_character(char, rot):
if (ord(char) >= 97) and (ord(char) <= 122): # lowercase
return chr(97+(alphabet_position(char)+rot)%26)
elif (ord(char) >= 65) and (ord(char) <=90): # uppercase
return chr(65+(alphabet_position(char)+rot)%26)
else:
return char
def encrypt(text, key):
encrypted = []
starting_index = 0
for letter in text:
# if it's alphanumerical, keep it that way
# find alphabet position
rotation = alphabet_position(key[starting_index])
# if it's a space or non-alphabetical character, append and move on
if letter != alphabet_position:
encrypted.append(letter)
elif letter.isalpha():
encrypted.append(rotation(letter, rotation))
#if we've reached last index, reset to zero, otherwise + by 1
if starting_index == (len(key) - 1):
starting_index = 0
else:
starting_index += 1
return ''.join(encrypted)
def字母表位置(字母):
字母表_pos={'A':0,'A':0,'B':1,'B':1,'C':2,'C':2,'D':3,
“d”:3,“E”:4,“E”:4,“F”:5,“F”:5,“G”:6,“H”:7,“I”:8,
“i”:8,“J”:9,“J”:9,“K”:10,“K”:10,“L”:11,“M”:12,“M”:12,
N:13,N:13,O:14,O:14,P:15,P:15,Q:16,Q:16,
“R”:17,“R”:17,“S”:18,“S”:18,“T”:19,“T”:19,“U”:20,“U”:20,“V”:21,
“v”:21,“W”:22,“W”:22,“X”:23,“X”:23,“Y”:24,“Y”:24,“Z”:25,“Z”:25
}
pos=字母表_pos[字母]
返回位置
def rotate_字符(字符、旋转):
如果(ord(char)>=97)和(ord(char)=65)和(ord(char)您的问题在于这一行:
if letter != alphabet_position:
由于字母位置是一个函数,它总是与字母不同。因此,您执行下一条指令,将字母作为结果的附件。您的问题在于这一行:
if letter != alphabet_position:
由于字母表位置是一个函数,它总是与字母不同。因此,您执行下一条指令,该指令将字母作为结果的附录。此行:
if letter != alphabet_position:
不知道字母
是否为字母。它只是将字母
(一个字符串)的值与字母位置
(一个函数)的值进行比较,它们永远不会相等。因此它总是运行该代码块,只将字母添加到加密的
您可以为此使用string.isalpha()
函数
if not letter.isalpha():
您还可以将字母表\u pos
字典设置为全局变量,并使用:
if letter not in alphabet_pos:
这一行:
if letter != alphabet_position:
不知道字母
是否为字母。它只是将字母
(一个字符串)的值与字母位置
(一个函数)的值进行比较,它们永远不会相等。因此它总是运行该代码块,只将字母添加到加密的
您可以为此使用string.isalpha()
函数
if not letter.isalpha():
您还可以将字母表\u pos
字典设置为全局变量,并使用:
if letter not in alphabet_pos:
您从未调用rotate\u character()
旋转(字母,旋转)
无效,因为旋转
是一个数字。如果字母!=字母位置:
不检查字母
是否为字母。字母位置()如果字母不是字母,则
会出错。您没有任何检查。与其使用字典,为什么不直接使用ord(letter.lower)-97
?我们刚在课堂上学习了字典,所以我的老师希望我们使用字典。字母位置()
只引用第一个只有字母的函数?或者该函数没有在那里被调用?您从未调用rotate\u character()
rotation(字母,旋转)
无效,因为旋转
是一个数字。如果字母!=字母表位置:
不检查字母
是否为字母表。字母表位置()如果字母不是字母表位置()
将出错。您对此没有任何检查。为什么不使用ord代替字典(letter.lower)-97
?我们刚在课堂上学习了字典,所以我的老师希望我们使用字典。是不是字母表位置()
只引用第一个只有字母的函数?或者该函数没有在那里被调用?那么这是否意味着它像更改条件一样简单?或者我是否需要重新编写该语句及其上面的一些语句?我觉得条件上面的行也是错误的,因为它包含该函数。正如Barmar指出的那样上面,您的代码中还存在一些其他问题,但这一个问题直接导致您的输出与输入相同。那么这是否意味着更改该条件就这么简单?或者我需要重新编写该语句和上面的一些语句?我觉得条件上面的行也是错误的,因为它在正如Barmar在上面指出的,您的代码中还存在一些其他问题,但这一问题直接导致您的输出与输入相同。