Python Challenge Level 5

r颇为变态的一道题。。

程序入口:http://www.pythonchallenge.com/pc/def/peak.html

文中强调:pronounce it… 把它发音读出来。通过观察源代码,发现它大量提到了 Peak hell 这个词。原来并没有接触过pickle,所以在这里费了半天劲,后来还是通过观察banner.p这个文件,发现很多存储的内容,很像序列化的东西。通过搜索后才确定是这个模块。

pickle是一个python的标准模块,几乎可以将任何一个Python对象作为字符串存储。在编程的时候我们经常管它叫做Serialization,也就是序列化。但Python里面将其称之为封装(pickle)。

例如,我们可以通过如下一段代码将一个tuple存入硬盘中:

impo­rt cPi­ckle as pickle
x=(1,2,3,4,5)
f=open(‘c:\\1.txt’,‘w’)
pickle.dump(x,f)
f.close()

而1.txt中是如下形式的一段内容:

(I1
I2
I3
I4
I5
tp1
.

我们没有必要理解这段文档具体的存储方式,只是知道pickle可以存储内容就好了。接下来对banner.p解包。发现结果是一个list。

然后可以求出这个list的长度是23,而且list里面还嵌套list。拍拍脑袋想想这到底是做什么用的,想不出来……又仔细观察了一下,发现这个list的深度没有超过2,看起来像个矩阵。所以想到是不是图形?

后来实验了一下,成功了,呵呵。

附上源代码:

from urllib2 impo­rt urlo­pen
impo­rt cPi­ckle as pickle
f=urlopen(‘http://www.pythonchallenge.com/pc/def/banner.p’)
result=pickle.Unpickler(f).load()
print len(result)

buf = ”
for line in resu­lt:
    for char in line:
        buf += char[0]*char[1]
    print buf + ‘\n’
    buf = ”

结果是?看图吧。。

image

下一级入口地址:channel.html

You may also like...

Leave a Reply

Your email address will not be published.

eight + 9 =

使用新浪微博登陆