Python Challenge 第四题

来源:互联网 发布:mac 快捷方式到桌面 编辑:程序博客网 时间:2024/06/04 19:40
这一题没有显示提示语,只有一幅图片,图片也看不出什么名堂,于是直接查看源码,源码如下:
<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.requestname='http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='finalNum='44827'#nothing's number stringwhile 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’,重新启动程序,最后获得答案

0 0
原创粉丝点击