进入了第四关。只有一张图,我还是像往常一样查看源代码。果然,发现了一行注释: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. Linux下同进程多进程号实时监控

    一.需求: Linux上对一个进程名称可能会对应的多个进程号的进程进行监控,如果有多个则输出到一个日志文件. 以上问题针对的是一个定时程序还未运行结束,到下一个时刻程序又运行起来了,避免造成重复调用接 ...

  2. 小试nginx日志分析xlog

    nginx配置: http { #...其他配置 log_format tpynormal '$remote_addr | [$time_local] | $host | "$request ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph(有源上下界最大流 模板)

    关于有源上下界最大流: https://blog.csdn.net/regina8023/article/details/45815023 #include<cstdio> #includ ...

  4. Android开发——AsyncTask的使用以及源码解析

    .AsyncTask使用介绍  转载请标明出处:http://blog.csdn.net/seu_calvin/article/details/52172248 AsyncTask封装了Thread和 ...

  5. 枚举进程——暴力搜索内存(Ring0)

    上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...

  6. 在python中对元祖进行排序

    在python里你可以对一个元组进行排序.例子是最好的说明: >>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a' ...

  7. java_时间戳与Date_相互转化

    [转自:http://blog.csdn.net/heng615975867/article/details/36016617] 1.时间戳的定义 时间戳是指文件属性里的创建.修改.访问时间. 数字时 ...

  8. jeecg使用uploadify上传组件

    在jeecg框架的系统内使用uploadify组件进行上传操作,有时无法正常发送请求,一直被重定向到登录请求,有可能使系统对上传操作进行了过滤,需要将这个上传请求放到非拦截序列里,才能正常使用. 第二 ...

  9. 使用css Flexbox实现垂直居中

    CSS布局对我们来说一直是个噩梦,我们都认为flexbox是我们的救世主.是否真的如我们说说,还有待观察,但是flexbox确非常轻松的解决css长久一来比较难解决的居中问题.让我们来看看到底有多容易 ...

  10. ThreeJs 基础入门

    本文来自网易云社区 作者:唐钊 Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它在 web 中创建各种三维场景,包括了摄影机.光影.材质等各种对象.使用它可以让我们更加直观的了解 we ...