Python Challenge 第四题

这一题没有显示提示语,只有一幅图片,图片也看不出什么名堂,于是直接查看源码,源码如下:
<html>
<head>
  <title>follow the chain</title>
  <link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<!-- urllib may help. DON'T TRY ALL NOTHINGS, since it will never 
end. 400 times is more than enough. -->
<center>
<a href="linkedlist.php?nothing=12345"><img src="chainsaw.jpg" border="0"/></a>
<br><br><font color="gold"></center>
Solutions to previous levels: <a href="http://wiki.pythonchallenge.com/"/>Python Challenge wiki</a>.
<br><br>
IRC: irc.freenode.net #pythonchallenge
</body>
</html>

可以看到,解题需要用到urllib,提示我们不要去一个一个地尝试noting,因为这数量特别多,远远不止四百次(最终证明其实不需要四百次,一百二十多次就行了),既然这么多,那肯定不能手动去试了,但是可以让计算机自动去访问提取nothing值。点击图片,我们便获得了第一个nothing值44827,再修改URL,获得下一个nothing值,发现没个nothing页面最后都会有这句话“and the next nothing is ”后面接着一个数字(当然,因为URL的需要,我们把它理解为一个字符串,刚开始投机取巧认为这数字是五位的,后来出现四位的,又认为是四位或五位的,再后来有三位的。。。于是还是老老实实写关于提取最后不限位数数字字符的代码),从而猜想,那个可以获得答案相关信息的页面内容会与这些均不同,可以通过内容最后是否是数字字符来判断,最后代码如下:

import urllib.request
name='http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
finalNum='44827'#nothing's number string
while 1:
    f=urllib.request.urlopen(name+x)
    content=f.read().decode('utf-8')
    print(content)        #输出页面内容,方便查看到最后的解题信息
    finalNum=[]
    content=list(content)
    content.reverse()
    for i in content:     #提出页面内容最后的数字字符
        if i.isdigit():
            finalNum.append(i)
        else:
            break
    finalNum.reverse()
    finalNum=''.join(finalNum)
    if not finalNum:      #判断页面最后内容是不是数字字符,如果不是,则跳出循环
        break

当循环结束时候的那个页面信息是“Yes. Divide by two and keep going”,上一个页面为“and the next nothing is 16044”,于是修改finalNum的值为‘8022’,重新启动程序,最后获得答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值