2017-08-05 2 views
0

In dieser Antwort:Wenn Sie eine ROT13-Manipulation machen, warum würden Sie die Geldtransfers staffeln und jedes Alphabet nicht nacheinander eingeben?

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

Paul Rubel (und dann wjandra) wie so seine Texteingabe taumelt:

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

statt

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

Warum ist das?

Ich hätte ihn direkt gefragt, aber wegen meines Punktestandes darf ich nichts Verrücktes machen wie eine klärende Frage stellen, damit ich die Lösung besser verstehen kann.

+1

Meine Vermutung ist, dass Sie leicht überprüfen können, dass es um 13 Stellen gedreht ist, denn wenn Sie die zweite Zeile lesen, geht es einfach weiter, wo die erste Zeile übrig ist. –

Antwort

1

Es gibt kein Unterschied in Ausgabe: beide produzieren ein Wörterbuch. Da die Eingabe etwas anders ist, kann das Wörterbuch auch anders sein. Aber Wörterbücher sind in Python nicht geordnet, das bedeutet, dass niemand damit Vermutungen anstellen kann. Beide produzieren das gleiche Wörterbuch:

>>> 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} 

Der Grund, warum ich glaube, ist, dass es einfacher ist für das menschliche Auge zu überprüfen, dass die Zeichenfolge in der Tat 13 Positionen verschoben werden. Das Alphabet enthält 26 Zeichen, und es ist auf halbem Wege zwischen 'm' und 'n'. Wenn wir schreiben:

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

Beachten Sie die fettgedruckten Zeichen. Man kann sehen, dass dort, wo die Zeichenfolge in der ersten Zeile endet, sie in der zweiten Zeile fortfährt und umgekehrt. Hier haben wir also 2 Punkte im Quellcode, wo wir leicht überprüfen können, ob wir noch richtig sind. Dies ist einfacher als 13 Orte vorwärts und rückwärts zu berechnen.

Verwandte Themen