Что делает исходный код этого модуля? - PullRequest
162 голосов
/ 02 мая 2011

Если вы откроете интерпретатор Python и наберете «импортировать это», как вы знаете, он напечатает:

Дзен Питона, Тим Питерс

Красиво лучшечем безобразно.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем сложное.
Плоское лучше, чем вложенное.
Разреженное лучше, чем плотное.
Читаемость имеет значение.
Особые случаи не являются достаточно особыми, чтобы нарушать правила.
Хотя практичность превосходит чистоту.
Ошибки никогда не должны проходить бесшумно.
Если явно не молчать.
Перед лицомНеоднозначность, откажитесь от соблазна догадаться.
Должен быть один - и, предпочтительно, только один - очевидный способ сделать это.
Хотя этот способ может быть неочевиден сначала, если вы не голландец.
Сейчас лучше, чем никогда.
Хотя никогда не бывает лучше, чем прямо сейчас.
Если реализацию сложно объяснить, это плохая идея.
Если реализацию легко объяснить,это может быть хорошей идеей.
Пространства имен - это одна из отличных идей - давайте сделаем еще больше!

В исходном коде Python (Lib / this.py) этот текст создан любопытным фрагментом кода:

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])

Ответы [ 5 ]

156 голосов
/ 02 мая 2011

Это называется rot13 кодировка:

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

Создает таблицу перевода как для заглавных (это то, для чего 65), так и для строчных (это то, что для 97) символов.

print "".join([d.get(c, c) for c in s])

Печать переведенной строки.

22 голосов
/ 02 мая 2011

Если вы хотите сделать подстановку ROT13 вручную - или в своей голове - вы можете проверить это, потому что 13 * 2 = 26 (количество букв английского алфавита), это по сути обмен:

a <-> n
b <-> o
c <-> p
...
m <-> z

A <-> N
B <-> O
C <-> P
...
M <-> Z 

против lbh cenpgvfr ибат рабхту, lbh'yy riraghnyyl znfgre gur Mra bs EBG-13 nytbevguz naq ernq guvf Xyvatba ybbxvat grkgf jvgubhg pbzchgre uryc. * 100 *

9 голосов
/ 02 мая 2011

Шифр ​​замещения, rot13 .

7 голосов
/ 25 мая 2016

Это шифр замещения (как упоминалось в предыдущих ответах). Исторически говоря, это Цезарь .

https://www.google.de/search?q=caesar+cipher&cad=h

6 голосов
/ 14 сентября 2016

Используется кодировка ROT13 .Это используется потому, что это шутка.

Вы также можете использовать функции Python для декодирования строки.

Только Python 2:

import this
print(this.s.decode('rot13'))

Python 2 & 3:

import codecs
print(codecs.decode(this.s, 'rot-13'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...