Python 我怎样才能使我的Vigenè;重新加密原始邮件中的忽略空格

Python 我怎样才能使我的Vigenè;重新加密原始邮件中的忽略空格,python,vigenere,Python,Vigenere,我试图制作一个Vigenère密码,但我似乎找不到一种方法来实现一个在输入消息然后打印最后一个消息时忽略空白的功能。例如:我输入起始消息:“python计算”,然后输入密钥:“堆栈”如果程序忽略了原始消息中的空格:“isukzg wppannjqr”,我希望得到的是:“isukzgwppannjqr”。任何人都知道我如何解决这个问题。我已经考虑过使用ORD,但我还没有找到一种实现它的方法。代码如下: def translateMessage(key, message, mode): tr

我试图制作一个Vigenère密码,但我似乎找不到一种方法来实现一个在输入消息然后打印最后一个消息时忽略空白的功能。例如:我输入起始消息:“python计算”,然后输入密钥:“堆栈”如果程序忽略了原始消息中的空格:“isukzg wppannjqr”,我希望得到的是:“isukzgwppannjqr”。任何人都知道我如何解决这个问题。我已经考虑过使用ORD,但我还没有找到一种实现它的方法。代码如下:

def translateMessage(key, message, mode):
    translated = ""

    keyIndex = 0
    key = key.upper()

    for symbol in message:
        xyz = alphabet.find(symbol.upper())
        if xyz != -1:
            if mode == 'encrypt' or 'e':
                xyz += alphabet.find(key[keyIndex]) + 1
            elif mode == 'decrypt' or 'd':
                xyz -= alphabet.find(key[keyIndex]) + 1

            xyz %= len(alphabet)

            if symbol.isupper():
                translated += alphabet[xyz]
            elif symbol.islower():
                translated += alphabet[xyz].lower()

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0

    return translated

if __name__ == '__main__':
    fetch_user_inputs()

您只需在
translateMessage()
中添加一个else语句,就可以像这样向输出中添加空格

def translateMessage(key, message, mode):
    translated = ""

    keyIndex = 0
    key = key.upper()

    for symbol in message:
        xyz = alphabet.find(symbol.upper())
        if xyz != -1:
            if mode == 'encrypt' or 'e':
                xyz += alphabet.find(key[keyIndex]) + 1
            elif mode == 'decrypt' or 'd':
                xyz -= alphabet.find(key[keyIndex]) + 1

            xyz %= len(alphabet)

            if symbol.isupper():
                translated += alphabet[xyz]
            elif symbol.islower():
                translated += alphabet[xyz].lower()

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0
        else : translated += symbol #this will add space as it is

    return translated

您只需在
translateMessage()
中添加一个else语句,就可以像这样向输出中添加空格

def translateMessage(key, message, mode):
    translated = ""

    keyIndex = 0
    key = key.upper()

    for symbol in message:
        xyz = alphabet.find(symbol.upper())
        if xyz != -1:
            if mode == 'encrypt' or 'e':
                xyz += alphabet.find(key[keyIndex]) + 1
            elif mode == 'decrypt' or 'd':
                xyz -= alphabet.find(key[keyIndex]) + 1

            xyz %= len(alphabet)

            if symbol.isupper():
                translated += alphabet[xyz]
            elif symbol.islower():
                translated += alphabet[xyz].lower()

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0
        else : translated += symbol #this will add space as it is

    return translated

您可以做得更好,此代码甚至可以返回格式和空格,例如大写字母、小写字母

def shift_dict(Caesar, Shift):
  dic_len = len(Caesar)
  Shift = Shift % dic_len
  list_dic = [(k,v) for k, v in iter(Caesar.items())]
  Shifted = {
    list_dic[x][0]: list_dic[(x - Shift) % dic_len][1]
    for x in range(dic_len)
  }
  return Shifted

Viginere = {
  "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
}
VFU = {
  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"
}
VFL = {
  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"
}

Asker = int(input("Do you want to... 1. Encode, or 2. Decode? "))
X = 0
Lister = []
Text = list(str(input("")))
Key = list(str(input("")).upper())
Z = 0

if Asker == 1:
  for i in range(len(Text)):
    Shift = Viginere[Key[(Z % len(Key))]]
    if Text[X].isalpha():
      LetterNum = Viginere[Text[X].upper()]
      Helper = (LetterNum + Shift) % 26
      if Text[X].isupper():
        Lister.append(VFU[Helper])
      else:
        Lister.append(VFL[Helper])
    else:
      Lister.append(Text[X])
      Z -= 1
    X += 1
    Z += 1
  print(*Lister, sep = "")
elif Asker == 2:
  for i in range(len(Text)):
    Shift = Viginere[Key[(Z % len(Key))]]
    if Text[X].isalpha():
      LetterNum = Viginere[Text[X].upper()]
      Helper = (LetterNum - Shift) % 26
      if Text[X].isupper():
        Lister.append(VFU[Helper])
      else:
        Lister.append(VFL[Helper])
    else:
      Lister.append(Text[X])
      Z -= 1
    X += 1
    Z += 1
  print(*Lister, sep = "")

这将很容易解决您的问题,它甚至会要求您输入字符串和键!这是python magic的定义。

您可以做得更好,这段代码甚至可以返回格式和空格,例如大写字母、小写字母

def shift_dict(Caesar, Shift):
  dic_len = len(Caesar)
  Shift = Shift % dic_len
  list_dic = [(k,v) for k, v in iter(Caesar.items())]
  Shifted = {
    list_dic[x][0]: list_dic[(x - Shift) % dic_len][1]
    for x in range(dic_len)
  }
  return Shifted

Viginere = {
  "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
}
VFU = {
  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"
}
VFL = {
  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"
}

Asker = int(input("Do you want to... 1. Encode, or 2. Decode? "))
X = 0
Lister = []
Text = list(str(input("")))
Key = list(str(input("")).upper())
Z = 0

if Asker == 1:
  for i in range(len(Text)):
    Shift = Viginere[Key[(Z % len(Key))]]
    if Text[X].isalpha():
      LetterNum = Viginere[Text[X].upper()]
      Helper = (LetterNum + Shift) % 26
      if Text[X].isupper():
        Lister.append(VFU[Helper])
      else:
        Lister.append(VFL[Helper])
    else:
      Lister.append(Text[X])
      Z -= 1
    X += 1
    Z += 1
  print(*Lister, sep = "")
elif Asker == 2:
  for i in range(len(Text)):
    Shift = Viginere[Key[(Z % len(Key))]]
    if Text[X].isalpha():
      LetterNum = Viginere[Text[X].upper()]
      Helper = (LetterNum - Shift) % 26
      if Text[X].isupper():
        Lister.append(VFU[Helper])
      else:
        Lister.append(VFL[Helper])
    else:
      Lister.append(Text[X])
      Z -= 1
    X += 1
    Z += 1
  print(*Lister, sep = "")

这将很容易解决您的问题,它甚至会要求您输入字符串和键!这是python魔法的定义。

您显式忽略在
字母表中未找到的所有符号(
xyz=alphabet.find(symbol.upper())
如果xyz!=-1:
),其中包括忽略空格。如果您忽略了在输出中添加空格,为什么您希望在输出中包含空格?那么我如何只允许空格?我会使用x.isspace()吗?
mode=='decrypt'或'd'
应该是['decrypt','d']
中的
mode=='decrypt'或mode=='d'
模式。也要考虑<代码>解密'StastStand(模式)< /C> > @ Mal物理学家,我尝试了这些,我又恢复了语法错误。当我测试这些的时候,我也注意到解密和加密是一样的。我不知道为什么这不起作用,因为我在解密elif之后有了
xyz-=
。我很难相信语法错误在mutt建议中。虽然您当前的语法是合法的,但它并没有像您看起来那样做。您显式忽略在
字母表中未找到的所有符号(
xyz=alphabet.find(symbol.upper())
如果xyz!=-1:
),其中包括忽略空格。如果您忽略了在输出中添加空格,为什么您希望在输出中包含空格?那么我如何只允许空格?我会使用x.isspace()吗?
mode=='decrypt'或'd'
应该是['decrypt','d']
中的
mode=='decrypt'或mode=='d'
模式。也要考虑<代码>解密'StastStand(模式)< /C> > @ Mal物理学家,我尝试了这些,我又恢复了语法错误。当我测试这些的时候,我也注意到解密和加密是一样的。我不知道为什么这不起作用,因为我在解密elif之后有了
xyz-=
。我很难相信语法错误在mutt建议中。虽然您当前的语法是合法的,但它并没有像您看起来那样做。您可以通过执行
VFU=dict((v,k)代表Viginere.items()中的k,v)使其更加简洁。
VFL=dict((v,k.lower())代表Viginere.items()中的k,v)
您可以通过执行
VFU=dict((v,k)使其更加简洁对于Viginere.items()中的k,v和Viginere.items()中的k,v,VFL=dict((v,k.lower())