收录于话题#Python挑战6个
有这么一个网站“http://www.pythonchallenge.com/”,里面有33个使用python去完成的挑战,通过这些挑战可以令我们更熟悉python。今天我们来挑战第2关。第2关网址:http://www.pythonchallenge.com/pc/def/map.html
先来看下图片和下面的文字。图片里有一本笔记本,上面写着“K→M、O→Q、E→G”。图片下面的黄色英文意思是“每一个人解决这题之前会思考两次”。最下面的紫色英文则是一串乱七八糟的字母。
看到这些,首先想到的是之前的Python之禅,通过字母的ascii码的偏移量去解出最终的句子。而图中的M是K的后面第二个字母,Q和G也是同样的规律,所以可以试试这个方法(代码来源于Python之禅里提到的this.py)。
#把句子赋值给变量s
s = \"g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr\'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.\"
d = {}
for c in (65, 97):
for i in range(26):
d[chr(i+c)] = chr((i+2) % 26 + c)
print(\'\'.join([d.get(c, c) for c in s]))
得到的结果是这样的。
意思是“我希望你不是用手翻译它的,这就是计算机用处。用手翻译它是非常低效率的所以这句话会这么长。推荐使用string.maketrans()。现在用在url上。”。
在网上查了一下string.maketrans()的用法。(下图来自菜鸟教程)
经过多次试验,原来是把url中的“map”翻译一下。。。
把“map”换成“ocr”就可以进入下一关了。