Python Challenge - 4

http://www.pythonchallenge.com/pc/def/linkedlist.html

输入网址后会提示linkedlist.php 跳转到

http://www.pythonchallenge.com/pc/def/linkedlist.php

看到提示说follow the chain这一关需要抓取URL一直Follow下去

点击图片进入到http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345

提示and the next nothing is 92512 更换12345为92512后访问得到下一个数字

做一个递归调用自身的函数可以解决这个问题.

程序执行到92118时,返回:

and the next nothing is 92118
Yes. Divide by two and keep going.

需要把得到的数字除以2才能继续 使用try,except可以捕捉到这个没有抓到数字的情况单独进行处理

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import urllib,re

def read(nothing):
    try:
        head = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
        s = urllib.urlopen(head + nothing).read()
        print s
        # 使用正则表达式匹配抓取到的页面中的最后一个数字
        pat = re.compile('([0-9]+)')
        nothing = re.findall(pat,s)[-1]
        # 返回函数本身 使函数一直执行下去
        return read(nothing)
    except:
        if 'Divide' in s:
            return read(str(int(nothing)/2))
        else:
            pass

if __name__ == '__main__':
    read('12345')
    raw_input('<PRESS ENTER>')

最终得到下一关的地址:

http://www.pythonchallenge.com/pc/def/peak.html

posted @ 2011-04-28 13:49  LemonLi  阅读(788)  评论(1编辑  收藏  举报