Python - 从字符串中读取 table 中的两个字母

Python - Read two letters in table from string

我正在做一个 ADFGVX 密码编码器和解码器,我有一个 polybius 方块,我需要在其中读取两个字母。

reversesquare = {'AA': '1', 'AD': '2', 'AF': '3', 'AG': '4', 'AV': '5', 'AX': '6',
                 'DA': '7', 'DD': '8', 'DF': '9', 'DG': '0', 'DV': 'Q', 'DX': 'W',
                 'FA': 'E', 'FD': 'R', 'FF': 'T', 'FG': 'Y', 'FV': 'U', 'FX': 'I',
                 'GA': 'O', 'GD': 'P', 'GF': 'A', 'GG': 'S', 'GV': 'D', 'GX': 'F',
                 'VA': 'G', 'VD': 'H', 'VF': 'J', 'VG': 'K', 'VV': 'L', 'VX': 'Z',
                 'XA': 'X', 'XD': 'C', 'XF': 'V', 'XG': 'B', 'XV': 'N', 'XX': 'M'}
def Decrypt_Final(sortedcipher):
    mensagemcifrada = ""
    for letter in sortedcipher:  # Esta a ler letra a letra quando devia ser 2 de uma vez
        if letter in reversesquare:
            mensagemcifrada += (reversesquare[letter])
    return mensagemcifrada

我有这个函数,它将接受一个字符串(sortedcipher),例如:GXFXVVFXGDFA

我希望我的程序每次循环读取两个字母,例如“GX”“FX”....并在匹配时在我的 reversesquare 中找到。

您可以使用这样的偏移量压缩字符串:

for a, b in zip(sortedcipher, sortedcipher[1:]):
      pair = a + b
      # pair now contains "GF", "FX" and so on..

另一种选择是使用列表理解:

def Decrypt_Final(sortedcipher):
    # turns the cipher into a list of strings where each element
    # contains two characters from the string
    letters = (sortedcipher[i:i+2] for i in range(0, len(sortedcipher), 2))
    return [reversesquare[letter] for letter in letters]

下面是一个“单行”,虽然可读性较差。

def Decrypt_Final(sortedcipher):
  return "".join([
    reversesquare[sortedcipher[i:i+2]]
      for i in range(0, len(sortedcipher), 2)
    ]
  )