前言
PythonChallenge是国外的一位工程师设计的一套编程闯关游戏,网址:PythonChallenge,每一关都可以用一段Python程序解决问题得到下一关的入口,本博文作为一个学习笔记,通过边学边记的方式分享我的闯关经验。
0 图片上是2 38的字样,下方提示为改变当前URL地址,很明显,用Python脚本计算下2的38次方,替换下URL中的0就可以了
2**38
得到274877906944,那么下一关地址:
http://www.pythonchallenge.com/pc/def/274877906944.html
1 仍然是一幅图,标记K->M O->Q E->G,下方有一串字母,看不出什么意思,很明显,这是让你解密,按照图片中的提示,将字母向后移动两位即可,注意y要对应a,z对应b,这样逻辑才能完整。刚开始用的是最原始的方法解题,解出来后作者推荐用maketrans的方法,试了下更好用。
import sys
from string import maketrans
str = "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."
intab = "abcdefghijklmnopqrstuvwxyz"
outab = "cdefghijklmnopqrstuvwxyzab"
transtab = maketrans(intab,outab)
print str.translate(transtab)
print "map".translate(transtab)
将网址中的“map”应用这种转换得到“ocr”,这就是下一关的入口了。
2 提示:识别字符,可能在书里,可能在页面源码里,果断F12,查看网页源码,在网页源码的注释中,提示找到出现次数最少的字符,有一大串字符,数数是肯定不行的,考虑用程序解决。
str = "balabalabala..."
cnt = {} # 用于保存字符出现的总次数
list = [] # 用于保存字符首次出现的先后顺序
for i in str:
if i in cnt:
cnt[i] += 1
else:
cnt[i] = 1
list.append(i)
print cnt
print list
次数出现最少的是几个字母,只出现了一次,按照出现的先后顺序,拼成“equality”, 这就是下一关的入口了。