偶然间发现了一个很有趣的python练习网站Python Challenge,具体每一关的玩法是根据提供的线索编程得到进入下一关的URL。游戏一共有33关,我玩了一下午,到第十三关发现逻辑性、趣味性已经弱了很多,也就不打算继续玩下去了,所以这里之给出前十三关答案。(PS:就个人来说,前面的一些关卡逻辑性比较强,自己多推理都可以解决,但后面真的是靠脑洞了,可能确实需要查看一些网上的提示才能过关。)
第0关
线索:网页中间显示一张图片,图片上是一个显示器,显示2的38次方;图片下方是提示:尝试修改URL地址。
因此想到,把url最后的0换为2的38次方。
具体代码如下:
|
|
成功进入下一关http://www.pythonchallenge.com/pc/def/274877906944.html!
第1关
线索:图片是一个笔记本,给出K->M O->Q E->G;发现对应的字母ascii码相差2,图片下方给出一段紫色的完全不知道含义的英文。
可以想到,对下面的这段英文解密,解密的关键就是每个字母的ascii循环加2。
具体实现代码如下:
|
|
运行后得到输出: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.
查了下str.maketrans()发现用这个替换更方便,因此直接用如下方法实现:
|
|
运行后得到下一关入口:http://www.pythonchallenge.com/pc/def/ocr.html
第2关
线索:文字提示识别字符,字符可能在书中也可能在其他地方。
因为我直接用得request获取网页源码,所以看到了一堆注释的乱七八糟的符号,要做的其实就是提取出这些符号中的字符。
实现代码如下:
|
|
运行后输出eequality, 因此得到下一关入口:http://www.pythonchallenge.com/pc/def/equality.html
第3关
线索:提示:每边都有且仅有3个大保镖的小字符。(莫名萌感)
不得不说这里是个坑(也怪自己英语理解能力功力不够),我开始以为是找到九宫格中仅有中间一格内是小写字符的所有字符,结果找出了一堆乱七八糟的字符。囧
看了答案才知道,提示里的EXACTLY着重在“3个”,而不是“每条边”,所以真正的含义是找到所有的恰好左侧和右侧都只有3个大写字符的小写字符。
直到真实含义后自己又实现了下,后来发现用正则表达式一行就够了。。。看来自己的姿势还是不够多,不够pythonic。
具体实现如下:
|
|
anyway,得到了下一关的入口:http://www.pythonchallenge.com/pc/def/linkedlist.html
第4关
线索:打开后显示linkedlist.php,因此手动转入,发现页面标题是follow the chain, 另外图片是一个链接
感觉好像没什么线索,因为我还是用request获取源码,所以看到了额外的信息…
‘’’
‘’’
结合点击图片后进入的页面可以猜想这是一个超过400个节点的链,我们要做的其实就是用爬虫来走这个链,一直走到终点得到答案。
实现代码如下:
|
|
最终得到peak.html
因此得到下一关入口:http://www.pythonchallenge.com/pc/def/peak.html
第5关
这一关就是阅读理解了。。。
线索:进入后发现有张图片,命名为peakhell.jpg,下面提示pronounce it,另外页面源码可以发现一个peakhell标签,指向banner.p链接,并提示peak hell听起来熟悉吗?
这道题我是没想出来,google之后发现是进入banner.p链接后,根据python的pickle模块来处理。
代码如下:
|
|
得到下一关的入口:http://www.pythonchallenge.com/pc/def/channel.html
第6关
线索:页面内可用信息极其少,下方的捐款信息毫无疑问不能算是线索,只有一个注释zip
根据zip可知这关可能需要解压模块zip,可是解压什么呢?尝试进入zip.html会得到一条信息:yes. find the zip。那么说明这个思路是对的,从而想到把channel.html换成channel.zip会下载到这个文件。解压后发现里面有个README文件,又是nothing…下面就是和第4关类似的操作了,不同的是第4关是网页,这次是文件。
代码如下:
|
|
得到下一关的入口:http://www.pythonchallenge.com/pc/def/oxygen.html
第7关
线索:页面仅有一张打码的图片
自己想不出来,在网上看到说是对图片的打码部分按ascii解码。。。不明觉厉。(PS:从这里开始,感觉逻辑性就弱了很多)
代码如下:
|
|
得到单词integrity,从而得到下一关入口:http://www.pythonchallenge.com/pc/def/integrity.html
第8关
线索:进入后发现图片中的蜜蜂是一个链接,另外页面源码中包含un和pw两个字符串
点击链接后提示输入用户名、密码,结合un、pw可以猜想这二者对应username,password。
看答案知道是用bz2解密。。。
代码如下:
|
|
得到用户名:huge 密码:file
点击链接输入后得到下一关入口:http://www.pythonchallenge.com/pc/return/good.html
第9关
线索:标题为connect the dots, 页面图片中也包含了很多黑点;另外源码中给出first second, 并问first + second = ?
结合first second中数值特点可以猜想是坐标集,下面索要做的就是分别把first和second中的坐标连接起来。
代码如下:
|
|
连线的结果是一头牛,我想到的关键词是cow,输入后404,看答案说是bull(公牛)。。。
anyway,下一关的入口是:http://www.pythonchallenge.com/pc/return/bull.html
第10关
线索:图片中牛是一条链接,点击后显示a = [1, 11, 21, 1211, 111221, 另外网页中图片下方提问len(a[30])=?
可以想到是根据线索推算出a[30],并计算a[30]的长度;可能是以前接触过,所以我一下就看出a的规律了,1->11是一个1的意思,…,1211->111221是一个1,一个2,两个1的意思。
因此写出以下代码推算a[30]:
|
|
得到结果5808,从而得到下一关入口:http://www.pythonchallenge.com/pc/return/5808.html
第11关
线索:一张模糊的图片,标题提示odd or even
完全没有思路,看了别人答案说是根据奇偶坐标生成一个新图…orz
代码如下:
|
|
隐约可以看到图片上显示evil,所以得到下一关入口:http://www.pythonchallenge.com/pc/return/evil.html
第12关
线索:只有一张图片
没有任何线索,玩到这里感觉逻辑性已经很弱了,答案解释的理由也很牵强,直接给出参考的答案链接把Python Challenge 第十二关 From 博客园
照例贴一下代码:
|
|
根据5张图片上的字符组合成一个单词disproportional,得到下一关入口:http://www.pythonchallenge.com/pc/return/disproportional.html
结语
我就玩到这里了,因为到这里已经没有什么趣味性可言了,更多的是一种任务性在驱动,感觉无趣,就没有再玩下去了,如果有兴趣的朋友可以尝试继续挑战!