gpt4 book ai didi

python - 在进行 ROT13 操作时,为什么要交错 maketrans 而不是按顺序输入每个字母?

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:33 25 4
gpt4 key购买 nike

在此答案中:

https://stackoverflow.com/a/3269756/3225934

Paul Rubel(然后是 wjandra)像这样交错输入文本:

rot13 = string.maketrans( 
"ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz",
"NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")

而不是

rot13 = string.maketrans( 
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
"NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm")

这是为什么呢?

我本来会直接问他,但由于我的分数水平,我不允许做一些疯狂的事情,比如问一个澄清的问题,这样我就可以更好地理解解决方案。

最佳答案

输出没有区别:两者都会生成字典。现在,由于输入有点不同,字典也可能不同。但是 Python 中的字典不是有序的,因此这意味着没有人可以用它做出假设。两者生成相同的字典:

>>> str.maketrans( 
... "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
... "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm")
{65: 78, 66: 79, 67: 80, 68: 81, 69: 82, 70: 83, 71: 84, 72: 85, 73: 86, 74: 87, 75: 88, 76: 89, 77: 90, 78: 65, 79: 66, 80: 67, 81: 68, 82: 69, 83: 70, 84: 71, 85: 72, 86: 73, 87: 74, 88: 75, 89: 76, 90: 77, 97: 110, 98: 111, 99: 112, 100: 113, 101: 114, 102: 115, 103: 116, 104: 117, 105: 118, 106: 119, 107: 120, 108: 121, 109: 122, 110: 97, 111: 98, 112: 99, 113: 100, 114: 101, 115: 102, 116: 103, 117: 104, 118: 105, 119: 106, 120: 107, 121: 108, 122: 109}
>>> str.maketrans(
... "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz",
... "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
{65: 78, 66: 79, 67: 80, 68: 81, 69: 82, 70: 83, 71: 84, 72: 85, 73: 86, 74: 87, 75: 88, 76: 89, 77: 90, 78: 65, 79: 66, 80: 67, 81: 68, 82: 69, 83: 70, 84: 71, 85: 72, 86: 73, 87: 74, 88: 75, 89: 76, 90: 77, 97: 110, 98: 111, 99: 112, 100: 113, 101: 114, 102: 115, 103: 116, 104: 117, 105: 118, 106: 119, 107: 120, 108: 121, 109: 122, 110: 97, 111: 98, 112: 99, 113: 100, 114: 101, 115: 102, 116: 103, 117: 104, 118: 105, 119: 106, 120: 107, 121: 108, 122: 109}

我认为的原因是,人眼更容易验证字符串确实移动了 13 个位置。该字母表包含 26 个字符,位于 'm''n' 之间。如果我们写:

rot13 = string.maketrans( 
"ABCDEFGHIJKL<b>M</b>abcdefghijklmNOPQRSTUVWXY<b>Z</b>nopqrstuvwxyz",
"NOPQRSTUVWXYZnopqrstuvwxyz<b>A</b>BCDEFGHIJKLM<b>a</b>bcdefghijklm")

请注意以粗体显示的字符。人们可以看到,第一行字符序列结束的地方,它在第二行继续,反之亦然。因此,我们在源代码中有两点可以轻松检查我们是否仍然正确。这比计算前后 13 位要容易。

关于python - 在进行 ROT13 操作时,为什么要交错 maketrans 而不是按顺序输入每个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com