Python Challenge 第 5 关攻略:peak hell

Python Challenge5 关攻略:peak hell


题目地址
http://www.pythonchallenge.com/pc/def/peak.html


题目内容

pronounce it


题目解法

这一题角度刁钻,对非英语母语的人有一些难度。

  • 网页标题是 peak hell
  • 图片是一个山峰,即 peak
  • 页面文字提示 pronounce it ,让我们要读出来

peak hell 连读,发现读音很像 Python 的一个内置模块 pickle
老样子,查看一下网页源代码,发现了注释:

<!-- peak hell sounds familiar ? -->

同样也是提示 pickle 这一模块的信息。
另外有趣的是有一个 HTML 网页中非常规的标签,即 <peakhell src="banner.p"/>
查看 banner.p 文件,发现是乱码,推断这应该是用 pickle 模块存储的文件。
下面下载该文件并加载打印出来。

from urllib.request import urlretrieve
import pickle

url = 'http://www.pythonchallenge.com/pc/def/banner.p'

urlretrieve(url, filename = 'level5.pkl')

with open('level5.pkl', 'rb') as fp:
    result = pickle.load(fp)
    print(result)

打印出来是一个列表嵌套着列表,最里层是元组。
第一个元素是这样的: [(' ', 95)]
第二个元素是这样的: [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)]
第三个元素是这样的: [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)]
发现每个元素的数字加起来都等于 95 ,联想这可能是一个矩阵,数字代表了前面单个字符的重复次数。
另外注意到 banner 本身就有横幅、图片的意思。
于是修改程序如下,循环打印出 banner.p 里面的内容:

from urllib.request import urlretrieve
import pickle

url = 'http://www.pythonchallenge.com/pc/def/banner.p'

urlretrieve(url, filename = 'level5.pkl')

with open('level5.pkl', 'rb') as fp:
    result = pickle.load(fp)

for i in result:
    for j in i:
        print(j[0] * j[1], end = '')
    print('\n')

得到一张字符画,写着 channel

修改 URL 地址,进入下一关:
http://www.pythonchallenge.com/pc/def/channel.html

猜你喜欢

转载自blog.csdn.net/jpch89/article/details/81369098
今日推荐