python challenge <五>

题目就只有一张图片。 照着惯例,这种情况直接察看源代码吧。发现有这样的提示:

<!-- urllib may help. DON'T TRY ALL NOTHINGS, since it will never
 end. 400 times is more than enough. -->

好吧。 应该是需要重复某动作400次的意思。回到页面,目测只有图片可以点击。try,得到下列提示:

and the next nothing is 44827

一看见next字眼就甚是激动呵。 虽然不太明显,但本着做这些题基本靠猜的原则,应该就是把44827粘贴到url吧,再点击。又得到新的数字,估计意思应该就是重复取400次吧。OK,coding开始。首先我想到的是urllib去抓取next nothing is后的数字,然后改变url,反复400次:


import urllib2  
	  
urlAdrBase = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='

#offset is get from each open url
urlOffset = '12345'  

#400 times

for i in range(399):
	f = urllib2.urlopen(urlAdrBase + urlOffset)  
	data = f.read()  
	
	#use split method to get the numnber 
	urlsplit = data.split()
	
	urlOffset = urlsplit[5]

print(urlAdrBase + urlOffset) 	


这个时候出现了一个问题, 打印出下列提示:

    urlOffset = urlsplit[5]
IndexError: list index out of range


猜测可能是读到最后一次循环时获取到了最终的URL地址。重新读了一下题目的提示,发现提示并没有说需要循环400次,而是说400次足以。好吧。 需要对循环结束的条件作重新定义,为了验证自己的猜测,所以简单的加了一个异常处理:

import urllib2  
	  
urlAdrBase = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='

#offset is get from each open url
urlOffset = '12345'  

#400 times

for i in range(399):
	f = urllib2.urlopen(urlAdrBase + urlOffset)  
	data = f.read()  

	#use split method to get the numnber 
	urlsplit = data.split()

	try:
		urlOffset = urlsplit[5]
	except :
		print(data)
		break

print(urlAdrBase + urlOffset) 	

得到:

peak.html
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=66831
[Finished in 86.7s]


这样子做的编程上很简单,用到string.split()对字符串做一个分片处理就可以很轻松的将末尾的数字提取出来,当然了,因为这个程序需要读取网页,因此运行时间会比较长。


ok,通往下一关:http://www.pythonchallenge.com/pc/def/peak.html




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值