“这个”模块的源代码在做什么?

2025-04-15 09:19:00
admin
原创
26
摘要:问题描述:如果您打开 Python 解释器并输入“import this”,那么如您所知,它会打印:《Python 之禅》,作者:Tim Peters 美丽胜过丑陋。 明确胜过含蓄。 简单胜过复杂。 复杂胜过繁琐。扁平胜过 嵌套。稀疏胜过密集。 可读性 很重要。 特殊情况不足以特殊到打破规则。 尽管...

问题描述:

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

《Python 之禅》,作者:Tim Peters

美丽胜过丑陋。

明确胜过含蓄。

简单胜过复杂。

复杂胜过繁琐。扁平胜过

嵌套。稀疏胜过密集。
可读性

很重要。
特殊情况不足以特殊到打破规则。
尽管实用性胜过纯粹性。
错误永远不应该默默地过去。
除非明确地被压制。
面对歧义,拒绝猜测的诱惑。
应该有一种——最好只有一种——显而易见的方法来做到这一点。
尽管除非你是荷兰人,否则这种方法一开始可能并不明显。
现在总比没有好。尽管没有通常比现在
更好。
如果实现很难解释,那它就是一个坏主意。
如果实现很容易解释,那它可能是一个好主意。
命名空间是一个非常棒的主意——让我们多做些这样的事!

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

解决方案 1:

这被称为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])

打印翻译后的字符串。

解决方案 2:

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

解决方案 3:

它使用ROT13编码。之所以使用 ROT13 编码,是因为这是一个玩笑。

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

仅限 Python 2:

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

Python 2 和 3:

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

解决方案 4:

这是一个替换密码,rot13。

解决方案 5:

这是一种替代密码(如前面的答案所述)。从历史上看,它是凯撒密码。

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用