2017-08-05 52 views
0

在这样的回答:当做一个ROT13操作时,为什么你会错开maketrans,而不是按顺序输入每个字母表?

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

保罗鲁贝尔(然后wjandra)蹒跚他的文字录入像这样:

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

而不是

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

这是为什么?

我会直接问他,但是因为我的观点水平,我不允许做一些疯狂的事情,比如要求澄清问题,这样我就可以更好地理解解决方案。

+1

我的猜测是,你可以很容易地验证它是旋转了13个位置,因为如果你读了第二行,它只是继续第一行离开的地方。 –

回答

1

还有没有什么区别输出:都产生一个字典。现在由于输入有点不同,字典也可能不同。但是字典并不是用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( 
    "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", 
    "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")

注意字符用黑体字。我们可以看到,第一行的字符序列结束后,它将继续在第二行,反之亦然。所以在这里我们在源代码中有2个点,我们可以很容易地检查我们是否仍然正确。这比计算13个地方向前和向后更容易。

相关问题