python挑战之level 27

来源:互联网 发布:爱普生l310清零软件 编辑:程序博客网 时间:2024/06/03 00:26

连接:http://www.pythonchallenge.com/pc/hex/speedboat.html

登陆密码;(butter,fly)

推荐视频:27 between the tables 什么表?

————————————————————————————————————————————————————

这是一张划船的图片。我们看看内容:

标题:between the tables

注释:<!-- did you say gif? --><!-- oh, and this is NOT a repeat of 14 -->

提示说 gif,改改后缀,下载文件

__________________________________________________________________________________________

查看一下图片的数据

from PIL import Imageim=Image.open('zigzag.gif')im_data1=list(im.getdata())       #图片的灰度值列表im_colors=im.getpalette()[::3]    #打印可以发现调色板三色相同,因此取第一个颜色R作为索引im_data2=[im_colors[i] for i in im_data1] #图片灰度的索引print(im_data1[:16],len(im_data1))print(im_data2[:16],len(im_data2))
————————————————————————————————————————————————————————

[215, 208, 203, 12, 254, 60, 139, 72, 66, 189, 127, 176, 173, 70, 170, 207] 86400[208, 203, 12, 254, 60, 139, 72, 66, 189, 127, 176, 173, 70, 170, 207, 39] 86400

可以发现两行只差了一个字节,我们把第一行的第一个值放在末尾,然后匹配一下,看看有多少对不一样

im_data1=im_data1[1:]+im_data1[:1]difflist=[(c1,c2) for c1,c2 in zip(im_data1,im_data2) if c1 != c2]print(len(difflist))

结果为:9465

所以我们分别取第一行,第二行看看能够组成什么字符串,可以看出第一行组成的字符串是一个bz2压缩文件。所以我们解压它,得到很多词语有许多python的关键字。并且利用模块keyword中的iskeyword()方法来判断关键字

s1=[c[0] for c in difflist ]s2=[c[1] for c in difflist ]str1=b''.join([chr(i).encode("latin1") for i in s1] )str2=b''.join([chr(i).encode("latin1") for i in s2] )print(str1[:100],len(str1))print(str2[:16],len(str2))text=bz2.decompress(str1)result=[]textlist=text.decode('utf-8').split()for i in textlist:    if not iskeyword(i) and i not in result:        result.append(i)print(result)

结果为:
b'BZh91AY&SY\xe0\xaaYF\x00\x17\x9a\x11\x80@\x01\xbf\xef\xde\xe0`<%($U\x15T\x01J\x04"\xa8\x14I%U$\n(\xa2\xa9UEU(B\x14\xa2UJ!HP\x12(\x15 \n(\x04\x94\x15D\x81O\xbe\xbe\x00\x1b`\x00>$*UD\xb9\x80\x00\x14\x00;w%%J\x0b \x00\xed\x80\x03f\x00' 9465b'\x99\xbdQ\x82\xf2\x89S\x04\x15E\x047 \x04\x95\xe4' 9465['../ring/bell.html', 'repeat', 'exec', 'print', 'switch']
但是结果应该是:

../ring/bell.html
repeat
switch

————————————————————————————————————————————————

为什么我的多了两个关键词?

所以下一关为:http://www.pythonchallenge.com/pc/ring/bell.html

密码:(repeat,switch)

——————————————————————————————————————————————————

另外。我在另一个哥们的博客上面看到,吧上面两个配对的不同元素作为坐标,可以得到一幅画,,,有兴趣可以试试啊。

0 0
原创粉丝点击