pythonchallenge(七)
转眼间又一个月没有逛博客园,明显的感觉到自己的代码能力变弱,前两周搞项目去了,只是形式上面的答辩而已,并没有涉及到代码层面,也就玩了一下验证码,没有识别玩出校器网页的验证码;转眼间又是各种考试,所幸,考试进入尾声,今天可以玩玩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
最新文章
- zabbix自定义key
- 常用API——日期型函数Date
- Java面向对象之接口
- 20145212 《Java程序设计》第10周学习总结
- 2、C#入门第2课
- 配置Statspack
- (转载)PHP array_slice() 函数
- python3-day5(模块)
- Effective JavaScript :第五章
- [20190419]shared latch spin count 2.txt
- Assignment HDU - 2853(求最小改变边数)
- codeforces-1138 (div2)
- html中头meta信息
- Java中String对象两种赋值方式的区别
- NYOJ 47:过河问题(思维)
- C语言使用hiredis访问redis
- SQL-结构化查询语言(2)
- 输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。
- salt常用模块及API
- arduino 与 android 通过TCP进行字节收发
热门文章
- .Net Mvc5Filter与权限认证扩展
- C# 收银机顾显(客显)及打印小票(58热敏打印机)
- mysql--MySQL数据库的简单认识
- “全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?
- Java找那个io类-File获取功能
- 【文文殿下】[BZOJ3277] 串
- IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值
- C语言中宏定义与C++中的内联函数
- 功能一: 数据库访问DAO层方法定义
- 解决FTPClient linux环境下FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题