Wenn Sie einen Python-Interpreter öffnen und "import this" eingeben, wird bekanntlich Folgendes ausgegeben:
Das Zen von Python, von Tim Peters
Schön ist besser als hässlich.
Explizit ist besser als implizit.
Einfach ist besser als komplex.
Komplex ist besser als kompliziert.
Wohnung ist besser als verschachtelt.
Spärlich ist besser als dicht.
Lesbarkeit zählt.
Sonderfälle sind nicht speziell genug, um gegen die Regeln zu verstoßen.
Obwohl Praktikabilität die Reinheit übertrifft.
Fehler sollten niemals stillschweigend vergehen.
Sofern nicht ausdrücklich zum Schweigen gebracht.
Verweigern Sie angesichts von Zweideutigkeiten die Versuchung zu raten.
Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun.
Obwohl dieser Weg zunächst vielleicht nicht offensichtlich ist, es sei denn, Sie sind Niederländer.
Jetzt ist besser als nie.
Obwohl nie oft besser ist alsgerade jetzt.
Wenn die Implementierung schwer zu erklären ist, ist es eine schlechte Idee.
Wenn die Implementierung leicht zu erklären ist, kann dies eine gute Idee sein.
Namespaces sind eine großartige Idee - lasst uns mehr davon machen!
In der Python-Quelle (Lib / this.py) wird dieser Text durch einen merkwürdigen Code generiert:
s = """Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
d = {}
for c in (65, 97):
for i in range(26):
d[chr(i+c)] = chr((i+13) % 26 + c)
print "".join([d.get(c, c) for c in s])
import codecs; print(codecs.decode(s, "rot-13"))
. Das Schreiben des Algorithmus von Hand war nur eine weitere Verschleierung des Ostereies.'Gur Mra bs Clguba, ol Gvz Crgref'.decode('rot13')
.this
ist auch Teil des Witzes, weil andere Sprachen (zB Java)this
ähnlich wie Python verwendenself
. Tippenimport this
sieht genauso sinnlos aus wie Tippenimport java.self;
.Wenn Sie die ROT13- Substitution von Hand oder in Ihrem Kopf vornehmen möchten, können Sie dies überprüfen, da 13 * 2 = 26 (die Anzahl der Buchstaben des englischen Alphabets) im Wesentlichen ein Austausch ist:
Vs lbh cenpgvfr ybat rabhtu, lbh'yy riraghnyyl znfgre gur Mra bs EBG-13 nytbevguz naq ernq guvf Xyvatba
quelle
Es ist eine Substitutions-Chiffre, rot13 .
quelle
Es verwendet die ROT13- Codierung. Dies wird verwendet, weil es ein Witz ist.
Sie können auch Python-Funktionen verwenden, um Zeichenfolgen zu dekodieren.
Nur Python 2:
Python 2 & 3:
quelle
import codecs
. Ich weiß nicht, ob der Import von Codecs noch erforderlich ist oder ob die Verfügbarkeit vondecode
mit einer bestimmten Version von Python automatisch erfolgt ist. Könnten Sie auf die Dokumentation des von Ihnen verwendeten verlinkendecode
?import this
und es wird direkt ohne zusätzlichen Code gedruckt.Es ist eine Substitutions-Chiffre (wie in den vorherigen Antworten erwähnt). Historisch gesehen ist es die Caesar-Chiffre .
https://www.google.de/search?q=caesar+cipher&cad=h
quelle