进入了第四关。只有一张图,我还是像往常一样查看源代码。果然,发现了一行注释:urllib may help. DON'T TRY ALL NOTHINGS, since it will never end. 400 times is more than enough.

看来这一关是和网络编程有关。只是没明白这个 NOTHINGS 是个什么东西。回到原页面,发现这张图是个链接,于是就点了进去,然后出现了只有一句话的页面:

and the next nothing is 44827

查看了下源代码,也是只有这一句,这回没注释了。百思不得其解的时候,注意到这个页面的 url 变成了:

http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345

后面出现了个 nothing=12345,加上刚出现的句子,就把 12345 改成 44827,果然出现了下一个页面,得到 next nothing is 45439,这下知道原来 nothing 就是则个 url 后面的数字。再改成 45439,这下页面多了一句:

Your hands are getting tired and the next nothing is 94485

看来这一句是提醒我不要再用手试下去了,手累了-_-|||。

这时候想起刚才的注释,提示使用 urllib,并且最多400次,就知道应该写个循环来做,提取出每次页面中的数字,并更改下一次访问的 url。提取数字可以用正则表达式,也可以直接把字符串分成列表,取它的最后一项。

    url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
nothing = ''
for i in range(400):
rst = urllib.urlopen(url + nothing).read()
rstList = rst.split(' ')
nothing = [item for item in rstList if item.isdigit()][0]
print '%d: %s' % (i, nothing)

这样跑到80多次的时候 nothing = 16044,出现了错误,提示 nothing = [...] 这一句出现了 out of range。也就是这时候的列表为空。我以为到底了,就把 url 结尾改成 16044,进入页面一看,是这么一句:

Yes. Divide by two and keep going.

我就把 16044 除以 2,得到 8022,改了 url 继续,得到跟之前的一样,提示下一个 nothing 是多少。看来这一句明显是找茬啊。。。把上面的代码中第一个nothing 值改成 8022,在第250次的时候又出错,这时 nothing 值为 66831,输入一看,得到结果了:peak.html。

为了让整个过程自动化,修改上面的代码,让代码自动判断并且不会报错:

    url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
nothing = ''
for i in range(400):
rst = urllib.urlopen(url + nothing).read()
if rst.startswith('Yes'):
nothing = str(int(nothing) / 2)
continue
rstList = rst.split(' ')
numList = [item for item in rstList if item.isdigit()]
if len(numList) != 0:
nothing = numList[0]
print '%d: %s' % (i, nothing)
else:
print rstList[0]
break

这样再跑一次,程序就可以得到正确的结果了。将 url 后面改为 peak.html,进入第五关:http://www.pythonchallenge.com/pc/def/peak.html

Python Challenge 第四关的更多相关文章

  1. python challenge第1关--NoteBook上的“乱码”

    在 python challenge第0关中已经得到第1关的地址了: http://www.pythonchallenge.com/pc/def/map.html 一.观察地址栏和标签: What a ...

  2. Python Challenge 第四题

    这一题没有显示提示语,仅仅有一幅图片,图片也看不出什么名堂,于是直接查看源代码,源代码例如以下: <html> <head> <title>follow the c ...

  3. Python Challenge 第六关

    第六关只有一张图和一个 PayPal 的链接,右键源代码注释中写着 PayPal 是作者要赞助的,跟题目没关系,其他的提示只有注释中写的个 zip.试过下图片,改图片扩展名等等都失败了,最后乱试改了下 ...

  4. Python Challenge 第十关

    第十关是一张牛的图片和一行字:len(a[30])=?.图片中的牛是一个链接,点开后进入一个新页面,只有一行字: a = [1, 11, 21, 1211, 111221, 看来要知道第31个数多长, ...

  5. Python Challenge 第十一关

    第十一关,一张模糊的图,题目为 odd even,源代码中也没任何提示,看来又是图像处理. 这张模糊的图看起来没什么头绪,但是题目给了个奇数和偶数,就先试试坐标吧,根据原图来生成一个新图.我第一次尝试 ...

  6. Python Challenge 第八关

    这一关有一个蜜蜂的图片和一句提示:Where is the missing link? 这页面上乱点,在图片中蜜蜂身上还真点出一个链接,让输入用户名和密码,于是就去看源代码.果然,最下面有两行注释: ...

  7. Python Challenge 第七关

    第七关,只有一张图片,右键源代码也什么都没有,只是这图片上有一行类似马赛克一样的部分.看来答案只有在这张图上找了.下载了图片,去网上搜一下有什么库可以处理图像.搜到了一个PIL,发现安装的python ...

  8. Python Challenge 第五关

    进入第五关,一张图和一行提示: pronounce it.右键源代码,只有一行注释: <!-- peak hell sounds familiar ? --> peak hell 听起来熟 ...

  9. Python Challenge 第 5 关攻略:peak

    # -*- coding: utf-8 -*- # @Time : 2018/9/26 14:03 # @Author : cxa # @File : pickledemo.py # @Softwar ...

随机推荐

  1. 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar

    t老师的做法好神…… 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...

  2. 【android】6大布局

    线性布局 相对布局 绝对布局 网格布局 表格布局 帧布局

  3. w3resource_MySQL练习:Subquery

    w3resource_MySQL练习题:Subquery 1. Write a query to find the name (first_name, last_name) and the salar ...

  4. 【Linux】tcpdump命令详解

    tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析. 它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句帮你过滤到无用的信息. 实用命令实例 1.普通 ...

  5. A+B问题的异常解法

    先%XZZ为敬 http://www.cnblogs.com/xzz_233/p/a-plus-b-problem.html 万恶之源:https://www.luogu.org/discuss/sh ...

  6. 软件工程师应该关注的web攻击手段

    1.SQL注入------常见的安全性问题. 解决方案:前端页面需要校验用户的输入数据(限制用户输入的类型.范围.格式.长度),不能只靠后端去校验用户数据.一来可以提高后端处理的效率,二来可以提高后端 ...

  7. spark作业

    假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发 Spark应用程序实现如下功能: 1.实时统计连续网购时间超过半个小时的女性网民信息. 2.周末两天的日志文件第一列为姓名,第 ...

  8. php 图表的操作

    <?php $dir=dirname(__FILE__);//查找当前脚本所在路径 require $dir."/db.php";//引入mysql操作类文件 require ...

  9. Jupyter Notebook与Jupyterhub的安装与配置

    Jupyter Notebook是一个很好用的交互环境,Jupyterhub则在此基础上实现了多用户的管理.最近配置这个环境的时候也遇到了一些坑,想想自己疯狂百度的过程,在此把自己的完整安装配置流程记 ...

  10. docker容器为什么可以跨平台部署

    docker镜像和操作系统没关系,docker最大的价值就是提出了镜像打包技术.首先你的明白什么是docker,什么是镜像,什么是容器,然后你就能明白镜像和操作系统之间的关系.docker是一个引擎, ...