Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vigenere没有用python加密我的邮件_Python_Vigenere - Fatal编程技术网

Vigenere没有用python加密我的邮件

Vigenere没有用python加密我的邮件,python,vigenere,Python,Vigenere,所以我一直在完成一项任务,这项任务使用了创建凯撒和维格纳密码。我已经创建了凯撒密码,维格纳的密码也差不多完成了。我遇到的问题是实际的加密本身。在我的代码中,我已经从标点符号和大写字母方面解决了所有问题,但当我只是使用print来测试我的函数时,它只是向我吐出了相同的短语。我不确定问题是我的函数在完成函数的其余部分之前读取了关键字,还是我遗漏了什么。任何帮助都将不胜感激 def alphabet_position(letter): alphabet_pos = {'A':0, 'a':0,

所以我一直在完成一项任务,这项任务使用了创建凯撒和维格纳密码。我已经创建了凯撒密码,维格纳的密码也差不多完成了。我遇到的问题是实际的加密本身。在我的代码中,我已经从标点符号和大写字母方面解决了所有问题,但当我只是使用print来测试我的函数时,它只是向我吐出了相同的短语。我不确定问题是我的函数在完成函数的其余部分之前读取了关键字,还是我遗漏了什么。任何帮助都将不胜感激

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在上面指出的,您的代码中还存在一些其他问题,但这一问题直接导致您的输出与输入相同。