我在 python 中编写 ADFGVX 密码时遇到问题

I'm having trouble writing the ADFGVX cipher in python

首先,如果有人不知道 ADFGVX 密码是如何工作的,这里有一个视频:

https://www.youtube.com/watch?v=T0xfKiU9Rr4&t=11s

假设你现在知道密码是如何工作的,现在让我们看看我的问题:

首先,我们需要创建波利比乌斯广场。我通过创建 table:

来做到这一点
table = 
["THEMAN",
"DLORIB",
"CFGHJK",
"PQRSUV",
"WXYZ12",
"345678"]

接下来,我们需要创建一个包含坐标的字典:

coordinatesdict={}

我们可以创建一个循环来将坐标添加到字典中。

for string in table:
    for letter in string:
        coordinatesdict[letter] = [string.index(letter), table.index(string)]

当我打印字典时,我期待的是:

{T:[0,0],H:[1,0],E:[2,0].....}
#And so on and so forth.

我得到的结果却让我大惑不解:

{'T': [0, 0], 'H': [3, 2], 'E': [2, 0], 'M': [3, 0], 'A': [4, 0], 'N': [5, 0], 'D': [0, 1], 'L': [1, 1], 'O': [2, 1], 'R': [2, 3], 'I': [4, 1], 'B': [5, 1], 'C': [0, 2], 'F': [1, 2], 'G': [2, 2], 'J': [4, 2], 'K': [5, 2], 'P': [0, 3], 'Q': [1, 3], 'S': [3, 3], 'U': [4, 3], 'V': [5, 3], 'W': [0, 4], 'X': [1, 4], 'Y': [2, 4], 'Z': [3, 4], '1': [4, 4], '2': [5, 4], '3': [0, 5], '4': [1, 5], '5': [2, 5], '6': [3, 5], '7': [4, 5], '8': [5, 5]}

疯狂并没有就此停止。我调试了循环并将其更改为:

for string in table:
    for letter in string:
        print(letter)
        print([string.index(letter), table.index(string)])

这是我在 运行 循环后得到的:

T [0, 0] H [1, 0] 乙 [2, 0] 米 [3, 0] 一种 [4, 0] 否 [5, 0] 丁 [0, 1] 大号 [1, 1] 欧 [2, 1] R [3, 1] 我 [4, 1] 乙 [5, 1] C [0, 2] F [1, 2] G [2, 2] H [3, 2] 杰 [4, 2] 钾 [5, 2] P [0, 3] 问 [1, 3] R [2, 3] 小号 [3, 3] ü [4, 3] V [5, 3] W [0, 4] X [1, 4] 是 [2, 4] Z [3, 4] 1个 [4, 4] 2个 [5, 4] 3个 [0, 5] 4个 [1, 5] 5个 [2, 5] 6个 [3, 5] 7 [4, 5] 8个 [5, 5]

显然,当我将它们单独打印出来时,它们是正确的,但是当我将它们插入字典时,一切都出错了。对此有解释吗?如果是这样,有没有办法解决这个问题?

首先,我没有查看 ADFGVX 密码,因为我认为它更像是您在这里面临的 python 问题。
这里的问题是 table 包含 2 个包含 "H" 的字符串,即 "THEMAN""CFGHJK"
您编写代码的方式是说 coordinatesdict 将对应于键 "H" 的值更新为新的每当它看到一个值。
由于您的代码在位置 (2,3) 处看到一个新的 "H" 它会更新 [= 的值11=] 变为 coordinatesdict['H']=[3,2] 因此您会看到意想不到的结果。

简而言之,您使用了错误的数据结构(即 dictionary)来解决您的问题。您可以尝试 defaultdict 或任何其他数据结构来解决您的问题。