33 关 Python 游戏,测试你的爬虫能力到底及格不?

Python07

33 关 Python 游戏,测试你的爬虫能力到底及格不?,第1张

作者 | 苏克1900

责编 | 胡巍巍

本文经授权转载自高级农民工

最近在网上看到一个非常有意思的 Python 游戏 通关网站,一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。

很考验对 Python 的综合掌握能力,比如有的闯关需要用到正则表达式,有的要用到爬虫。

我们平常学 Python 都是按章节顺序、包或者模块来学,容易前学后忘。正好可以拿这个网站来综合测试一下对 Python 的掌握情况,以便查缺补漏。

来说说这个网站怎么玩。

mark

这是网站主页面,很有 历史 感对吧,诞生了已有十几年了。但千万不要因为看着像老古董而小瞧它。

mark

我们来玩玩看,点击「get challenged」开始挑战。

第 0 关是 Warming up 热身环节:

这一关要求是修改 URL 链接,给的提示是电脑上的数学表达式:2 的 38 次方,所以大概就是需要计算出数值,然后修改url 进入下一关。

所以这关就是考 Python 的基本数值运算,你知道怎么算么?

打开 Python 自带终端,一行代码就能计算出结果:

mark

把原链接中的 0 替换为 274877906944 回车就会进入下一关:

mark

游戏 这就正式开始了。图片中的笔记本给了三组字母,很容易发现规律:前面的字母往后移动两位就是后面的字母。

那么需要做的就是根据这个规律把下面的提示字符串,做位移解密得到真正的句子含义:

这道题考察字符串编码和 for 循环相关知识,代码实现如下:

得到结果:

作者很风趣,当然不能手动去一个推算了,推荐用 string.maketrans 这个方法解决,我们上面采取的是比较直接的方法,官方给出了更为精简的方法:

然后把 url 中的 map 改为ocr回车就来到了第 2 关:

mark

作者接着说过关的提示可能在书里(当然不可能了)也可能在网页源代码里。那就右键查看源代码往下拉看到绿色区域,果然找到了问题:

mark

意思就是:要在下面这一大串字符里找到出现次数最少的几个字符

考察了这么几个知识点:

如果是你,你会怎么做?

来看下,十行代码快速实现:

首先,用 Requests 请求网页然后用正则提取出字符串,接着 for 循环计算每个字符出现的次数。

可以看到出现次数最少的就是最后几个字符,合起来是「equality」,替换 url 字符就闯过过了第 2 关进入下一关继续挑战。是不是有点意思?

后面每一关都需要用到相关的 Python 技巧解决,比如第 4 关:

mark

这一关作者弄了个小恶作剧,需要手动输入数值到 url 中然后回车,你以为这样就完了么?并没有它有会不断重复弹出新的数值让你输入,貌似无穷尽。

所以,这一关肯定不能采取手动输入的方法闯关,自然要用到 Python 了。要实现自动填充修改 url 回车跳转到新 url,循环直到网页再也无法跳转为止这一功能。

如果是你,你会怎么做?

其实,一段简单的爬虫加正则就能搞定。思路很简单,把每次网页中的数值提取出来替换成新的 url 再请求网页,循环下去,代码实现如下:

输出结果如下:

可以看到,最终循环了 85 次找到了最后一个数字16044,输入到 url 中就闯关成功。

33 关既有趣又能锻炼使用 Python 解决问题的技巧,感兴趣的话去玩玩看。

网址:http://www.pythonchallenge.com/

如果遇到不会做的题,可以在这里找到参考答案:

中参考文教程:

https://www.cnblogs.com/jimnox/archive/2009/12/08/tips-to-python-challenge.html

官方参考教程:

http://garethrees.org/2007/05/07/python-challenge/

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员: 极客宝宝(ID: geek_baby)

热 文 推 荐

☞“年薪百万程序员遭亲妈拍卖”刚刚刷爆朋友圈!网友:是我本人!

☞ 真壕!腾讯员工平均月薪 7 万!

☞ 高级!程序员用递归来撩妹?!| 程序员有话说

☞厉害!女学生偷师男子学校,变身区块链开发工程师

☞这家公司的 IoT ,你可千万别低估!

☞深扒! 币安被盗的7074.18枚比特币去哪了?

☞如何使用「番茄法」高效的写算法题?

☞面对互联网一线大厂,这些技术你需要了解!

☞刺激!华为程序员年薪200万 ?真相让人心酸!

你点的每个“在看”,我都认真当成了喜欢

保留字是 python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。

Python 保留字一览表

需要注意的是,由于 Python 是严格区分大小写的 ,保留字也不例外。所以,我们可以说 if 是保留字,但 IF 就不是保留字。

简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。

python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:

(1) 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。

(2) 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。

(3) Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符

(4) 在 Python 中,标识符中的字母是 严格区分大小写 的,也就是说,两个同样的单词,如果大小格式不一样,多代表的意义也是完全不同的。比如说,下面这 3 个变量之间,就是完全独立、毫无关系的,它们彼此之间是相互独立的个体。

(5) Python 语言中,以下划线开头的标识符有特殊含义,例如:

因此,除非特定场景需要,应避免使用以下划线开头的标识符。

那我们再次熟悉下Python常用的一些命名规范:

三、 内置函数

ptthon 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块

表 为 Python 3.x内置函数

在以下渠道可以查找

1、Python中的简单例题可以在csdn中直接搜索。

2、每本Python书籍的每个章节都有相关练习和简单例题。

3、也可以在浏览器中直接搜索。

4、Python的简单例题也可以自己在学习相关知识的时候自己总结一些简单例题。

学习Python最重要的是要知识点和练习相结合,只有多动手实践才能更好的理解Python。