Что делает исходный код модуля "this"?



Если вы открываете интерпретатор Python и набираете "import this", как вы знаете, он печатает:




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



красивое лучше, чем уродливое.

Явное лучше, чем неявное.

Простое лучше, чем сложное.

Сложное лучше, чем сложное.

Плоское лучше, чем вложенное.

Разреженное лучше, чем плотное.

Читаемость имеет значение.

Особые случаи не настолько особые, чтобы нарушать правила.

Хотя практичность превосходит чистоту.

Ошибки никогда не должны проходить бесшумно.

Если явно не замолчать.

Перед лицом двусмысленности откажитесь от соблазна угадать.

Должен быть один-и предпочтительно только один-очевидный способ сделать это.

Хотя этот путь может быть не очевиден сначала, если вы не голландец.

Сейчас лучше, чем никогда.

Хотя никогда не бывает часто лучше, чем право сейчас.

Если реализация трудно объяснить, это плохая идея.

Если реализацию легко объяснить, это может быть хорошей идеей.

Пространства имен-это одна отличная идея-давайте сделаем больше из них!




в источнике 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])
211   5  

5 ответов:

Это называется алгоритма 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])

выводит переведенную строку.

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

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

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

Vs lbh cenpgvfr ybat rabhtu, lbh'YY riraghnyyl znfgre gur Mra bs EBG-13 nytbevguz naq ernq guvf Xyvatba ybbxvat grkgf jvgubhg pbzchgre uryc.

это шифр замены, алгоритма ROT13.

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

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

Я думаю, что так лучше:

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

и это все...

Comments

    Ничего не найдено.