转眼间又一个月没有逛博客园,明显的感觉到自己的代码能力变弱,前两周搞项目去了,只是形式上面的答辩而已,并没有涉及到代码层面,也就玩了一下验证码,没有识别玩出校器网页的验证码;转眼间又是各种考试,所幸,考试进入尾声,今天可以玩玩pythonchanllenge,一周没继续闯关,明显感觉到自己的智商余额不足,直接上题:

http://www.pythonchallenge.com/pc/def/oxygen.html

  进入这个题目,只有一张图片,源码里面的信息只给了网页的title是"smarty",图片的名字叫氧气——“oxygen.png”。那么只能在图片里面找信息,图片的内容是一条河,河边是草木,值得注意的是,图片中间有一段灰色区域,初步估计信息隐藏在这个马赛克区域内。

  首先,利用画图工具可得出该图片的像素是:629*95,再将这段马赛克区域的坐标提取出来:

横坐标的范围是:0-609,纵坐标的范围是:43-53。

  其次,利用python的Image模块得到里面的像素列表:

 from PIL import Image

 def ques_7(img):
data = [img.getpixel((i, j)) for i in range(0, 609) for j in range(43, 53)] # 横坐标在0-609中变动,纵坐标在43-53内变动
print data png = Image.open("C:\\Users\\wing1995\\Desktop\\oxygen.png", 'r')
ques_7(png)

  输出结果如下:

[(115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (115, 115, 115, 255), (98, 127, 47, 255)................

  根据上述结果可知,输出的像素是一个有着4个元素的元祖列表,其中每个元组里面的第四个元素都是255,并且每个元祖重复7次,那么如何将这些输出结果与答案联系?一般情况,答案的链接都是英文字母,那么可以尝试使用函数`chr`把这些ASCII码转换为字母。

  第二次改进的代码

 def ques_7(img):
data = [chr(img.getpixel((i, j))[0]) for i in range(0, 609, 7) for j in range(43, 53, 7)] # 横坐标在0-609中变动,纵坐标在43-53内变动
print ''.join(data)

输出结果如下:

ssmmaarrtt  gguuyy,,  yyoouu  mmaaddee  iitt..  tthhee  nneexxtt  lleevveell  iiss  [[110055,,  111100,,  111166,,  110011,,  110033,,  111144,,  110055,,  111166,,  112211]]

嘿嘿,很明显,除去重复的字母,最后的样子显现出来。

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

最新文章

  1. zabbix自定义key
  2. 常用API——日期型函数Date
  3. Java面向对象之接口
  4. 20145212 《Java程序设计》第10周学习总结
  5. 2、C#入门第2课
  6. 配置Statspack
  7. (转载)PHP array_slice() 函数
  8. python3-day5(模块)
  9. Effective JavaScript :第五章
  10. [20190419]shared latch spin count 2.txt
  11. Assignment HDU - 2853(求最小改变边数)
  12. codeforces-1138 (div2)
  13. html中头meta信息
  14. Java中String对象两种赋值方式的区别
  15. NYOJ 47:过河问题(思维)
  16. C语言使用hiredis访问redis
  17. SQL-结构化查询语言(2)
  18. 输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。
  19. salt常用模块及API
  20. arduino 与 android 通过TCP进行字节收发

热门文章

  1. .Net Mvc5Filter与权限认证扩展
  2. C# 收银机顾显(客显)及打印小票(58热敏打印机)
  3. mysql--MySQL数据库的简单认识
  4. “全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?
  5. Java找那个io类-File获取功能
  6. 【文文殿下】[BZOJ3277] 串
  7. IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值
  8. C语言中宏定义与C++中的内联函数
  9. 功能一: 数据库访问DAO层方法定义
  10. 解决FTPClient linux环境下FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题