“this”模块的源代码是什么?

时间:2011-05-02 09:56:38

标签: python

如果您打开Python解释器,并输入“import this”,如您所知,它会打印:

  

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 个答案:

答案 0 :(得分:154)

这称为rot13编码:

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

构建转换表,包括大写(这是65用于)和小写(这是97用于)chars。

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

打印翻译后的字符串。

答案 1 :(得分:20)

如果您想手动或在脑海中进行 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。

答案 2 :(得分:9)

这是替换密码rot13

答案 3 :(得分:7)

它是替代密码(如前面的答案所述)。从历史上看,它是Caesar cipher

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

答案 4 :(得分:6)

它使用ROT13编码。这是因为它是一个笑话。

您还可以使用Python函数来解码字符串。

仅限Python 2:

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

Python 2&amp; 3:

import codecs
print(codecs.decode(this.s, 'rot-13'))