进入了第四关。只有一张图,我还是像往常一样查看源代码。果然,发现了一行注释: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. Tarjan算法 详解+心得

    Tarjan算法是由Robert Tarjan(罗伯特·塔扬,不知有几位大神读对过这个名字) 发明的求有向图中强连通分量的算法. 预备知识:有向图,强连通. 有向图:由有向边的构成的图.需要注意的是这 ...

  2. 分割catalina.out 每天生成一个文件

    1. touch xxx(文件名字).sh 2.     vim xxx.sh 写入  ----------------------- #!/bin/sh cd `dirname $0`pwdd=`d ...

  3. graph-basic

    打算使用STL中的vector,通过邻接链表的方式存储图.这里贴基本定义,以及depth-first-search和breadth-first-search的实现代码. 其他图的算法实现,就贴在各自的 ...

  4. 【HIHOCODER 1589】回文子串的数量(Manacher)

    描述 给定一个字符串S,请统计S的所有|S| * (|S| + 1) / 2个子串中(首尾位置不同就算作不同的子串),有多少个是回文字符串? 输入 一个只包含小写字母的字符串S. 对于30%的数据,S ...

  5. re--读书笔记【转】

    原文链接 * 正则表达式入门 1.正则表达式的两种基本用途:搜索和替换. 2.正则表达式是一些用来匹配和处理文本的字符串. 小结:正则表达式是文本处理方面功能最强大的工具之一,正则表达式语言用来构造正 ...

  6. luogu1208 尼克的任务

    倒着推就是了 #include <iostream> #include <cstdio> #include <vector> using namespace std ...

  7. luogu3390 【模板】矩阵快速幂

    #include <iostream> #include <cstdio> using namespace std; typedef long long ll; ll k; c ...

  8. 如何通过 Vue-Cli3 - Vuex 完成一个 TodoList

    昨天大概粗糙的了解了一下Vue的概况之后,并没有从框架.语法的细节来进一步学习.那今天通过一个简单的实例来继续完善一下Vue这方面的空白,用一些看得见的效果摸的着的代码在不断完成小目标的过程中慢慢消化 ...

  9. log4net配置分析

    appender   附加器 RollingFileAppender      滚动文件appender MaxSizeRollBackups      最大尺寸回滚 ConversionPatter ...

  10. iOS----闪退,无报错原因,经典解决方案

    在iOS开发时,有时候遇到libc++abi.dylib handler threw exception这样的异常,  虽然在断点出加上了All Exceptions,也断到相应的代码了,但是没打印对 ...