• Python Challenge 第四关


    进入了第四关。只有一张图,我还是像往常一样查看源代码。果然,发现了一行注释: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 = '12345'
        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 = '12345'
        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

  • 相关阅读:
    [VueJS + Typescript] Decouple Dependencies Using IoC Containers in Vue with TypeScript and InversifyJS
    便利店选址
    spoj 1811 Longest Common Substring (后缀自动机)
    sharepoint 2013 根据网站模版创建网站,并赋值网站权限 create a site by custom site template
    一则 ORA-00471 处理方法
    好端端的项目重新运行的时候却不行了!!!
    C语言指针和数组知识总结(下)
    Java EE登陆界面生成随机数防止恶意注册或者登录
    ASP.NET获取上传图片的大小
    Not able to reset SmartRF04DD
  • 原文地址:https://www.cnblogs.com/dukeleo/p/3459973.html
Copyright © 2020-2023  润新知