我在 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 或任何其他数据结构来解决您的问题。
首先,如果有人不知道 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 或任何其他数据结构来解决您的问题。