如何玩游戏提高python编程技能?
Python Challenge介绍
Python Challenge 是首个谜语编程网站。挑战者需要连续挑战33个需要编程才能解开的谜题以锻炼自己的编程能力。
该网站建立于2005年,至今已经有三百多万位访客浏览并尝试解决该网站的谜题。
虽然网站建立的年代比较久远,页面美观性不高,但是其谜题设计绝对是足以惊艳每一位挑战者的。尤其是挑战者在不查看任何攻略的情况下,自己整理一切现有资料,并最终解出谜题时,那种喜悦感是难以言表的。
该网站好评不断。用户brberg说:“我认为这是学习一门编程语言最好的方法”(”These sorts of things are in my opinion the best way to learn a language.” )
用户salimma说:“让人上瘾的方式来学习python的细节,对所有程序员来说都是必须的!”(”Addictive way to learn the ins and outs of Python.. a must for all programmers!”)
另外,网站还内置一个留言区(虽然如今已经被各类“小广告”所占领),一个google论坛和一个wiki百科。
该网站通过记录挑战者cookie的方式来确定挑战者目前的通关进度。只有闯过了相应关卡并访问指定网址才能查看对应关卡的官方解答。
其各种各样的解题方法可以作为读者通关后的参考材料,通过对比自己与官方的解题方法,以拓宽自己的思路与知识面。
题目示例
笔者的解题文件已经放在了github上,目前的进度为12/33,不定期更新中。
这里笔者列举几个比较有创意的题目,及其解题思路。欢迎读者前去python challenge进行尝试。
level 2
第二关的谜题只有一张图片和一段文字:识别字母,也许他们在书中,但也可能在网页源代码中。
我们打开网页源代码,发现一段超长的注释,以及一段提示:找到杂乱信息中的文字。
这是一串保存起来后将近100k的字符串。单纯用肉眼去扫码是几乎不可能的。但如果我们使用代码的话,十几行就解决了。获得答案:equality。把网页地址最后部分改为equality.html即进入下一关。
level 4
题目同样是只有一张图片。网页标题是“follow the chain”,跟随着链条。
我们点击图片,可以进入下一个网页。该网页告诉我们下一个nothing的取值为44827。根据浏览器的url地址,我们把最后的”nothing=12345″改为”nothing=44827″即可
然而,新的网页依旧是类似的场景。不断这样的手动更换地址的操作十几次后,显示页面依旧类似如下场景。
此时,我们就需要通过爬虫以及网页内容分析来进行这样的任务了。
关于爬虫的知识,笔者曾在爬虫原理解析中细致地讲述过。
实例程序如下图:
有时,我们还会收到一些需要人为处理的信息和误导性信息:
在解决了上述问题并使用程序连续访问了两百多次后,我们即可找到最终的答案:peak.html
level 7
我们在该关会获得如下图片
我们读取该图片,找到其不自然的灰度区域。
读取其灰度值,并进行一定的处理后,我们发现所有数的取值都在128以下
此时,我们应该想到ASCII编码。我们继续对获取到的灰度值进行处理,并将其转化为ascii编码对应的字符。
我们会获得 ‘smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]’
同理,对 [105, 110, 116, 101, 103, 114, 105, 116, 121] 进行同样的ascii解码操作,得到答案integrity
level 11
第11关的名称为“odd even”(奇数与偶数)
该图片很诡异,再参考题目标题,我们将该图片拆分分两张图片。
原始图片中x,y坐标和为奇数的像素点构成第一张图,和为偶数的像素点构成第二张图。
于是我们获得了通过密码:evil
更多
上述的题目仅仅是python challenge的冰山一角
该网站的关卡中,有的题目需要你使用绘图包才能解答
有的关卡涉及到文件读取、IO操作,谜底答案隐藏在最不引人注意的角落中。
还有的题目,需要你发挥天马行空的想象,广开脑洞才能找到解题方法。
可以说Python Challenge集编程练习与趣味谜题于一身,是绝佳的python练习游戏。
另外,笔者整理的Python Challene解题文件中除了解题代码,还附带解题思路以及关卡考察内容。读者可前往github查看。