2017-08-05 51 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個地方向前和向後更容易。

相關問題