欣喜地正式开始PythonChallenge
第一关http://www.pythonchallenge.com/pc/def/map.html
发现有一张图
然后下面又给了一串不知所云的文字:
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.
注意图片的名字叫map,这不是一种典型的映射结构嘛?难道要我们做译码员,把k、o、e分别译为m、q、g?
注意到python中有一个字符串库string,它为我们提供以下两个方便字符替换的方法
(1)string.maketrans(from,to):from和to是len相同的两个字符串,根据它们制作一个替换表,把from中的字符分别替换为to中位置相应的字符
(2)string.translate(self,table,deletechars):首先删除string中含有的deletechars字符,然后将字符串string按照table表(通过上一步制作)方式替换并返回结果。
原理知道了,我们开始于是我们take action了!
import string
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."
table=string.maketrans("koe","mqg")
print s.translate(table)
print "map".translate(table)
g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr ammnsrcpq ypc dmp. bmglg gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmlg. sqglg qrpglg.myicrpylq() gq pcammmclbcb. lmu ynnjw ml rfc spj.
这是个啥。。。感觉思路方向还是对的,于是重新看替换表,发现m、q、g不就是把k、o、e向后移动了两位吗?于是猜测是把26个英文字母按循环队列的方式向后平移两位,于是take action again:
将table换为如下:
table=string.maketrans("abcdefghijklmnopqrstuvwxyz",'cdefghijklmnopqrstuvwxyzab')
结果终于是喜闻乐见的形式了:
i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.
按照翻译结果,将这个translate table 应用到url上
print "map".translate(table)
就得到了结果:ocr
所以下一关的网址为:http://www.pythonchallenge.com/pc/def/ocr.html