问题:“ this”模块的源代码是做什么的?
如您所知,如果您打开Python解释器并输入“ import this”,它将输出:
提姆·彼得斯(Tim Peters)撰写的《 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])
回答 0
这称为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])
打印转换后的字符串。
回答 1
如果您想用手或在头上进行ROT13替换,则可以检查一下,因为13 * 2 = 26(英语字母的字母数),它实际上是一种互换:
a <-> n
b <-> o
c <-> p
...
m <-> z
A <-> N
B <-> O
C <-> P
...
M <-> Z
与lbh cenpgvfr ybat rabhtu,lbh’yy riraghnyyl znfgre gur Mra bs EBG-13 nytbevguz naq ernq guvf Xyvatba ybbxvat grkgf jvgubhg pbzchgre uryc。
回答 2
这是一个替换密码rot13。
回答 3
它使用ROT13编码。之所以使用它是因为这是个玩笑。
您还可以使用Python函数解码字符串。
仅限Python 2:
import this
print(this.s.decode('rot13'))
Python 2和3:
import codecs
print(codecs.decode(this.s, 'rot-13'))
回答 4
这是一个替换密码(如前面的答案中所述)。从历史上讲,这是凯撒密码。