python challenge 29解题总结

python challenge 29网址:www.pythonchallenge.com/pc/ring/guido.html用户名是repeat 密码是 switch

查看网页源代码会发现提示silence!
发现网页源码后面后很多行长短不一的空格行
用每行空格的数量组成列表
转成字符串,是BZh打头
用bz2解压字符串,得到 yankeedoodle

源代码如下:

 

def level_29():
	auth=urllib2.HTTPBasicAuthHandler()
	auth.add_password('the order matters','www.pythonchallenge.com','repeat','switch')
	openr=urllib2.build_opener(auth)
	r=openr.open('http://www.pythonchallenge.com/pc/ring/guido.html')
	data=r.read().split('n') # 读取网页内容
	print len(data)
	sdata=[x for x in data if x.strip()==u''] # 过滤掉非空格行
	print len(sdata)
	s=''.join([chr(len(x)) for x in sdata]) # 把每行空格数转成字符
	print s # 看到是BZh打头的
	rslt=bz2.decompress(s) # 用bz2解压之
	print rslt

下一关的网址:www.pythonchallenge.com/pc/ring/yankeedoodle.html用户名是repeat 密码是 switch