【原创】pythonchalleng——第7题

        第七题的网址:http://www.pythonchallenge.com/pc/def/oxygen.html,而且这道题不用网站截图了,以为除了一张png图片,什么文字都没有……源代码中也没有任何提示。现在是越来越难了!图片如下:

oxygen

        这个图片比较古怪的地方在于中间有一行好像被处理过了,说不定提示信息就在这里面!但是Python要用什么模块处理图片呢?经过搜索后,发现需要使用第三方库PIL(Python Imaging Library)。下载安装后,使用Eclipse的朋友注意了,可能需要重新配置一下pydev插件下的interpreter python。怎么使用这个库我就不多说了,还是得学习官方文档(PS:感觉文档写的不是很好……)。主要操作包括打开图片Image.open(file)和读取像素getpixel((i,j),其中i代表的是x轴方向,j代表的是y轴方向。读取像素的代码入下:

    im=Image.open(path) 
    #考虑到被处理像素的位置,这里取图片高度的一半 
    index=im.size[1]/2 
    #保存图片的宽度 
    width=im.size[0] 
    data=[] 
    for i in range(0,width): 
        data.append(im.getpixel((i,index))) 
    print data 

由于我们处理的部分是灰度图,R、G、B的值是相同的,所以我们只需要把R、G、B相同的像素点保存下来就可以了,尾部未处理的像素会被过滤掉。代码如下:

    result='' 
    for r,g,b,i in data: 
        if r==g and g==b: 
            result+=chr(r) 
    print result

我们在保留像素的同时,已经利用chr函数将其转化成对应的ASCII了,此时得到的结果是:

ssssssmmmmmmmaaaaaaarrrrrrrttttttt       ggggggguuuuuuuyyyyyyy,,,,,,,       yyyyyyyooooooouuuuuuu       mmmmmmmaaaaaaadddddddeeeeeee       iiiiiiittttttt.......       ttttttthhhhhhheeeeeee       nnnnnnneeeeeeexxxxxxxttttttt       llllllleeeeeeevvvvvvveeeeeeelllllll       iiiiiiisssssss       [[[[[[[111111100000005555555,,,,,,,       111111111111110000000,,,,,,,       111111111111116666666,,,,,,,       111111100000001111111,,,,,,,       111111100000003333333,,,,,,,       111111111111114444444,,,,,,,       111111100000005555555,,,,,,,       111111111111116666666,,,,,,,       111111122222221111111]]]]]]]] 
    

我们仔细观察一下,发现除了开头的s外,其他字母都重复了7次,我们来简单地处理一下,代码如下:

    i=0 
    out='' 
    while i<len(result): 
        out+=result[i] 
        i+=7 
    print out

得到的结果是:

smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]

我们再利用上面的方法将[105, 110, 116, 101, 103, 114, 105, 116, 121]转换一下,得到最终结果:

integrity

我们尝试着访问http://www.pythonchallenge.com/pc/def/integrity.html 成功进入第8题。Fighting!!!

       必须强调的一点是如果在获取像素列表之后,利用去掉重复值的方法来处理数据,得到的结果是不正确的,最后得到的list是[105, 10, 16, 101, 103, 14, 105, 16, 121],其中重复的1都被删除了一个,这样的结果是错误的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值