The Zen of Python——this.py文件的解析

在python的IDLE中,输入

import this

便会出现The Zen of Python(Python之禅),打开安装路径中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]))

该段代码利用了凯撒密码的思想,将26个英文字母顺序后移一定的位数,使得原字母映射到新的字母上,实现字母的一一对应,从而实现加密。现在一行行的来解析这段代码。

 

第一行s=“""Gur Mra bs Clguba...""”定义了一个字符串变量。

 

d = {}

然后定义了一个空的字典类型的变量。

 

 

for c in (65, 97):

程序员应该对于65和97这两个数字有一定的敏感性,在ASCII码中,65对应大写字母A,97对应小写字母a,(65,97)是元组类型,该句循环在元组中遍历,执行循环体中的代码。

 

 

for i in range(26):

range返回一个列表[0,1,2,..,25],循环遍历列表。26很显然与26个字母有关。

 

 

        d[chr(i+c)] = chr((i+13) % 26 + c)

该句定义了字典中的对应关系。举个例子,第一个循环遍历到第一个元素,c=65,第二个循环i=0,于是i+c=65,chr(i+c)是强制类型转换,转为字符型,即chr(65)变成A,等号右边同理,变成第13个字母M。第二个循环遍历后,就完成了大写字母的加密对应关系。小写字母同理。

 

 

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

输出,d.get(c,c)网上查了一下,作用是从字典d中找到c(键)对应的值并返回,如果没有查找到对应的键值对则返回c本身,由此可见它的作用就是遇到单词之间的空格时返回空格本身,不至于在字典中查找不到而出现ERROR。

 

凯撒密码中加密和解密是不同的两个系统,而代码中采用位移13的重要原因是任何字母位移两次即变成原来的字母。由此可见该段代码既可以用来加密也可以用来解密,13的作用非常巧妙。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python禅机》是一本关于Python编程语言的指导原则和哲学的PDF文档。它概述了Python社区对编写Python代码的最佳实践和编码风格的一系列理念。 首先,它强调了Python的简洁和可读性。Python编码应该简洁明了,代码行数应尽量保持简短,不要使用复杂的语法和冗余的代码。可读性也极为重要,在同样功能的实现中,应该选择更易于理解和阅读的实现方式。 其次,该文档强调了Python的可执行性和直观性。Python鼓励程序员编写可执行的、易于测试和验证的代码。此外,Python也注重代码的直观性,即代码应该以一种清晰、直接和自然的方式表达思想,减少歧义和模棱两可。 此外,《Python禅机》还强调了Python社区的合作和开放精神。Python鼓励程序员彼此合作、分享和学习,通过交流和互助来提高编程水平。它也鼓励开源软件的开发和使用,通过共享代码来促进创新和进步。 最后,该文档提到了Python的错误处理和异常处理机制。Python鼓励程序员显式地处理错误和异常,以提高代码的健壮性和可靠性。此外,它还鼓励程序员记录错误信息以便调试和修复错误。 总结来说,《Python禅机》强调了Python的简洁、可读性、可执行性、直观性、合作精神以及错误处理。它是Python社区对编写Python代码的基本原则和哲学的总结,对于提高编程水平和编写高质量的Python代码非常有价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrbone11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值