python挑战之level 27

连接: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 Image

im=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' 9465
b'\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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值