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
pythonchallenge(七)的更多相关文章
- pythonchallenge(二)
PythonChallenge_2 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux ...
- pythonchallenge(三)
PythonChallenge_3 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux ...
- Python Challenge 第七关
第七关,只有一张图片,右键源代码也什么都没有,只是这图片上有一行类似马赛克一样的部分.看来答案只有在这张图上找了.下载了图片,去网上搜一下有什么库可以处理图像.搜到了一个PIL,发现安装的python ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 《LoadRunner12七天速成宝典》来了
看到自己的新书又要发行了,算算从09年第一本书开始,不知不觉已经是第四本书了(帮朋友合写的书不算),每次写完之后都会说太累了,不想再写了,但是却又次次反悔,吞下食言的苦果.如果非要说第四本书的感受,那 ...
- 【SAP业务模式】之ICS(七):IDOC配置
这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- Nodejs之MEAN栈开发(七)---- 用Angular创建单页应用(下)
上一节我们走通了基本的SPA基础结构,这一节会更彻底的将后端的视图.路由.控制器全部移到前端.篇幅比较长,主要分页面改造.使用AngularUI两大部分以及一些优化路由.使用Angular的其他指令的 ...
随机推荐
- (zxing.net)二维码Data Matrix的简介、实现与解码
一.简介 Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matri ...
- ADO.NET操作PostgreSQL:数据库操作类(未封装)
1.添加 /// <summary> /// 添加 /// </summary> /// <param name="newEntity">< ...
- C# task和timer实现定时操作
C#中,定时器,或者叫作间隔器,每隔一段时间执行一个操作. 1.Timer本身就是多线程 C#中为不同场合下使用定时器,提供了不同的Timer类,在asp.net中一般使用System.Timers. ...
- Neutorn LBaaS 原理
Load Balance as a Service(LBaaS)是 Neutron 提供的一项高级网络服务.LBaaS 允许租户在自己的网络中创建和管理 load balancer. load bal ...
- linux命令之信息显示与搜索文件命令
1.uname:显示系统信息 该命令用于显示系统相关的信息,比如内核版本号,硬件架构等. 参数 说明 -n(常用) 显示主机名称 -r(常用) 显示内核发行版本号 示例: 1)显示主机名 [root@ ...
- DOS磁盘操作类命令
外部命令 formAT---磁盘格式化命令 格式:formAT<盘符:>[/S][4][/Q] 1)命令收的盘符不可缺省,若对硬盘进行格式化,则会有如下提示:WARNING:ALL DA ...
- 面向对象之-@classmethod、@staticmethod和@classonlymethod的区别
实例方法.静态方法与类方法的含义 实例方法(普通方法)的含义就是需要类对象实例之后才能调用的方法,该方法的基本格式为: def test(self,*args,**kwargs): # 第一个参数必须 ...
- Drupal 远程命令执行漏洞(CVE-2018-7600)
名称: Drupal 远程命令执行漏洞 CVE-ID: CVE-2018-7600 Poc: https://paper.seebug.org/578/ EXPLOIT-DB: https://www ...
- apache2 的https配置和代理https后端nodejs配置
先进入 /usr/local/apache2/conf 目录 修改 vim httpd.conf 把下面的去掉注释 LoadModule proxy_module modules/mod_pro ...
- iOS中生成随机的UUID
+ (NSString *)uuidString { CFUUIDRef uuid_ref = CFUUIDCreate(NULL); CFStringRef uuid_string_ref= CFU ...