继续挑战
第5题地址peak.html
- 网页标题是
peak hell
,题目是pronounce it
惯例查看源码view-source,发现有一行注释和一个奇怪的标签:
peak hell sounds familiar
<peakhell src=”banner.p”/>
标签显然不是html
具有的标签。结合题目内容来看,应该是让我们将peak hell
读出来,说是应该很熟悉😓
其实也没有那么玄,熟悉python
的话就知道这是个常用的模块,再读不出来熟悉的味道,一打开banner.p看到内容格式也就知道了。对,就是序列化的pickle
模块!
不多说,试下看是什么对象:
import pickle
import requests
response = requests.get('http://www.pythonchallenge.com/pc/def/banner.p').content
banner = pickle.loads(response)
print(type(banner))
print(banner[:5])
<class 'list'>
[[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)]]
反序列化成功了,得到一个列表,我们需要分析一下内容的含义。
列表的每个元素还是一个列表,而每个元素列表中的每个元素都是一个有两个元素的元组,而第一个元素不是' '
就是'#'
,第二个元素是一个整数。
再进一步分析可以看出,每个元素列表中的这些数加起来都是95!
貌似有点头绪了,感觉就像我们刚开始学编程的时候打印字符金字塔那样:
for pat in banner:
print(''.join([x[0] * x[1] for x in pat]))
##### #####
#### ####
#### ####
#### ####
#### ####
#### ####
#### ####
#### ####
### #### ### ### ##### ### ##### ### ### ####
### ## #### ####### ## ### #### ####### #### ####### ### ### ####
### ### ##### #### ### #### ##### #### ##### #### ### ### ####
### #### #### ### ### #### #### #### #### ### #### ####
### #### #### ### #### #### #### #### ### ### ####
#### #### #### ## ### #### #### #### #### #### ### ####
#### #### #### ########## #### #### #### #### ############## ####
#### #### #### ### #### #### #### #### #### #### ####
#### #### #### #### ### #### #### #### #### #### ####
### #### #### #### ### #### #### #### #### ### ####
### ## #### #### ### #### #### #### #### #### ### ## ####
### ## #### #### ########### #### #### #### #### ### ## ####
### ###### ##### ## #### ###### ########### ##### ### ######
改下地址channel.html打开,果然是下一题!