第九题
题目分析
图片上和上一题一样。有奇怪的黑点点。此题应该考察的与上题相同也是图像解析类的。
查看源码。
页面上可以下载good.jpg。然后提示first+second=?
然后first和second各对应一系列的数字。那么应该是两个数字加起来,代表一个像素点。
如果我们在原图片上涂黑点,那么看不出什么变化。于是我们新建一个白底图片,再这个上面涂黑点。
考察知识点
Python-Image 基本的图像处理操作(赞)
http://www.aichengxu.com/view/39904
Python图形图像处理库的介绍之Image模块
Python Imaging Library (PIL)下载
http://www.pythonware.com/products/pil/
代码及结果
import re, Image
file = open(‘d:/Python/good.html‘)
message = re.findall(‘(<!--[^-]+-->)‘, file.read(), re.S)[1]
file.close()
first = re.findall(‘(/d+)‘,re.findall(‘first:(.+)second‘,message,re.S)[0],re.S)
second = re.findall(‘(/d+)‘,re.findall(‘second:(.+)>‘,message,re.S)[0],re.S)
all = first + second
im = Image.open(‘d:/Python/good.jpg‘)
im2 = Image.new(im.mode, im.size)
for x in range(0,len(all),2):
im2.putpixel((int(all[x]),int(all[x+1])),(255,255,255,255))
im2.show()
显示一只牛,那么就是bull
输入http://www.pythonchallenge.com/pc/return/bull.html,即通关
第十题
题目分析
光看网页上显示的 len(a[30])=? 是让我们计算a数组下标为30的元素的长度
不过按照惯例。查看源码
老实说,这一串,并没有什么规律。而且按照 len(a[30])=? 这个提示,应该是会给一个数组让我们算。
此时发现href=”sequence.txt”很可疑,点击后
那么就是要让我们推算这个数组的 len(a[30])=多少
没看出规律。。百度后得知
11— 表示前一个数“1”是 1 个 1;
21— 表示前一个数“11”是 由 2 个 1 组成;
1211— 表示前一个数“21”是 由 1 个 2、1 个 1 组成;
111221— 即 11 12 21 ,表示前一个数“1211”是依次由 1 个 1,1 个 2,
2 个 1组成;
即每个数字描述前面一个数字的组成
考察知识点
找规律。
- Python中的除法
http://blog.csdn.net/sicofield/article/details/8613877
地板除(取整除):从Python2.2开始,增加了一个操作符 // ,以执行地板除://除法不管操作数为何种数值类型,总是会舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
代码及结果
strings = [‘1‘,‘11‘]
#计算1-30的元素
for i in range(1,31):
#计数器重置
j = 0
temp = ‘‘
#当计数器j小于当前元素的长度时(即当前元素的长度还未计算完毕时)
while j < len(strings[i]):
count = 1
#当计数器j小于前一个元素的长度时且strings[i][j]==strings[i][j+1]
while j<(len(strings[i])-1) and (strings[i][j]==strings[i][j+1]):
j = j + 1
count = count + 1
temp = ‘%s%d%c‘ % (temp,count,strings[i][j])
j = j + 1
strings.append(temp)
print (len(strings[30]))
结果是:5808
输入:http://www.pythonchallenge.com/pc/return/5808.html,通关
第十一题
题目分析
这个像马赛克一样的图片是什么鬼。。估计跟图片处理有关。
查看源代码。
点击
考察知识点
图片分析相关(跟第八题,第九题差不多)
很有可能是与图像坐标的奇偶有关,如果我们按照原图片的规格新建一个图片,而在该图片上只在坐标的奇值或者偶值上涂原图片上的点,发现全是黑乎乎的一片;所以我们再次尝试以原片大小的一半来处理
Python-Image 基本的图像处理操作(赞)
http://www.aichengxu.com/view/39904
Python图形图像处理库的介绍之Image模块
Python Imaging Library (PIL)下载
http://www.pythonware.com/products/pil/
代码及结果
图片分析,我一向不太擅长。。这是百度的别人的源码。
原作者:
http://blog.csdn.net/billstone/article/details/4546725
import Image
im = Image.open("cave.jpg")
odd = Image.new(im.mode, (im.size[0]/2, im.size[1]/2))
even = Image.new(im.mode, (im.size[0]/2, im.size[1]/2))
for x in range(1,im.size[0],2):
for y in range(1,im.size[1],2):
odd.putpixel(((x-1)/2,(y-1)/2),im.getpixel((x,y)))
for x in range(1,im.size[0],2):
for y in range(1,im.size[1],2):
even.putpixel((x/2,y/2),im.getpixel((x,y)))
odd.save(‘odd.jpg‘)
even.save(‘even.jpg‘)
运行代码,查看odd.jpg和even.jpg,发现两张图几乎是一样的,通过反色处理,我们在右上角发现evil的字样
输入http://www.pythonchallenge.com/pc/return/evil.html,即通关
第十二题
题目分析
页面没有文字信息,看图片,好像是要分牌。
查看源码
src=”evil1.jpg”只有这个看起来奇怪点,点击,还是显示发牌图片
考虑到图片显示的是发牌,将地址改为evil2.jpg
http://www.pythonchallenge.com/pc/return/evil2.jpg
提示上说:不是jpg,是gfx。那么就将后缀名改为gfx,这样就可以得到一个二进制文件。下载到电脑里
继续测试evil3.jpg
试试evil4.jpg
没反应了。。看来最关键的就是evil2.jpg
然后以发牌的方式将文件中的数据分发到五个新文件中,分发方式如下:evil.gfx的第一个字节给第一个文件,第二个字节给第二个文件,第三个字节给第三个文件,第四个字节给第四个文件,第五个字节给第五个文件,第六个字节给第一个文件,第七个字节给第二个文件……
考察知识点
范围解析操作符(::)
http://blog.csdn.net/chamtianjiao/article/details/6406751
代码及结果
在notepad++中,编辑exc12.py
#读取文件里的信息
f = open(‘evil2.gfx‘,‘rb‘)
content = f.read()
f.close()
#新建一个图片,将文件中的字符开始平均分发
for i in range(5):
f = open(‘%d.jpg‘ % i, ‘wb‘)
f.write(content[i::5])
f.close()
print("done!please check your file")
文件夹里有新文件,
点开看按照次序。分别是dis ,pro ,port,ional,最后一个被划掉了,不管它
组合英文单词就是disproportional。
因此,输入http://www.pythonchallenge.com/pc/return/disproportional.html,即通关
第十三题
题目分析
看图文字提示是打电话给恶魔?
查看源码
此时发现
area shape=”circle” coords=”326,177,45” href=”../phonebook.php”很可疑。
Phonebook就是电话簿,既然要打电话给恶魔,肯定要在电话簿里找到恶魔的电话号码~
点击phonebook.php
应该是跟xml有关。
百度后得知,是考察xmlrpclib模块
考察知识点
- python使用xmlrpc实例讲解
代码及结果
首先,导入xmlrpclib,然后连接phonebook.php,接着使用listMethods方法查看了一下可使用的方法,发现有一个叫phone方法,再然后使用methodHelp方法查看了一下phone方法的帮助,于是乎这题就解出来了。
import xmlrpclib
xmlrpc = xmlrpclib.ServerProxy("http://www.pythonchallenge.com/pc/phonebook.php")
print xmlrpc.system.listMethods()
print xmlrpc.system.methodHelp(‘phone‘)
print xmlrpc.phone(‘Bert‘)
最后会得到Bert的电话--555-ITALY
输入http://www.pythonchallenge.com/pc/return/italy.html,即通关
第十四题
题目分析
显示的是一圈面包,下面还有个图片挡住了什么东西?
查看源码
这个源码貌似提示的地方很多~
walk around:绕着走
– remember: 100*100 = (100+99+99+98) + (… :叫我们记住这行算式
两个图片。点击”italy.jpg,还是那个丑面包,没什么好注意的
点击wire.png,
感觉没啥头绪。。不过肯定是跟图片处理有关的
考察知识点
Image模块
代码及结果
这题没做出来,放个做出来的人的链接
http://blog.csdn.net/kosl90/article/details/7341181
l = [[i, i - 1 , i - 1, i - 2] for i in xrange(100, 1, -2)]
l = reduce(lambda x, y: x+y, l)
# print l, len(l)
import Image
org = Image.open(‘level14.d/wire.png‘)
org_data = list(org.getdata())
res = Image.new(org.mode, (100, 100))
res_data = res.load()
# (0,0)
# ---->x
# |
# vy
dire = [(1, 0), # > (x+1, y) right
(0, 1), # v (x, y+1) down
(-1, 0), # < (x-1, y) left
(0, -1), # ^ (x, y-1) up
]
# init
v = 0
org_index = 0
res_pos = (-1, 0)
for times in l:
for i in xrange(times):
# pos will out of index if reset position after setting color
res_pos = tuple(map(lambda x, y: x + y, res_pos, dire[v])) # (res_pos[0] + dire[v][0], res_pos[1] + dire[v][1])
# f = open(‘level14.d/log.log‘,‘a‘)
# print >> f, pos
# f.close()
res_data[res_pos] = org_data[org_index]
org_index += 1
v = (v + 1) % 4 # j + 1 if j != 4 else 0
res.save(‘level14.d/res.png‘)
最后得到了一只猫的图像,猫叫uzi
输入http://www.pythonchallenge.com/pc/return/uzi.html,即通关
第十五题
题目分析
日历上把26号圈住了,肯定有特别的含义
查看源码
让我们猜这个人是谁。
说he ain’t the youngest, he is the second。他是第二年轻的(在家里排名,不然跟谁比咧?)
buy flowers for tomorrow:也就是说27号,可能是葬礼或生日,需要为这天买花
恩。。好像这题不用python百度一下,或者熟悉欧洲名人事迹的人也能轻松猜出来
那这题考察的意图到底是什么呢?
仔细思考,我们只知道一个27号,只知道年龄,如果我们是对欧洲历史不太了解的(比如说是我),那么我们就需要缩小范围,毕竟现在已经是2016年了,不知道他到底是在哪一年出生的。
怎么缩小范围呢?从日历上来看的话,27号是星期二,这个可以用来缩小范围,那么还有没有别的条件呢?
图片右下角。。很模糊的图片中,数格子,可以发现2月只有29天,所以是闰年。
需要我们求出闰年时,1月27号是星期二的日期。然后再百度查那个人的信息是家中的次子就行了~
日期的处理,选择python的calendar和datetime模块
考察知识点
- Python时间模块datetime、time、calendar的使用方法
- datetime模块
代码及结果
在nodepad++中,编辑exc15.py
from calendar import isleap
from datetime import date
TUESDAY = 1
#从1800年到2000年
for year in range(1800,2000):
t = date(year, 1, 27)
#是闰年并且1月的27号是星期一
if isleap(year) and t.weekday() == TUESDAY:
print (t.isoformat())
百度这些日期~
很显然是mozat
输入http://www.pythonchallenge.com/pc/return/mozart.html,即通关
第十六题
题目分析
肯定又是图片处理,查看源码
注意这句话let me get this straight
以粉色的点为基准,将其他像素点排成直线,应该就能出结果
考察知识点
image模块
代码及结果
import Image
im = Image.open("mozart.gif")
for y in range(im.size[1]):
#获得像素点
line=[im.getpixel((x, y)) for x in range(im.size[0])]
idx=line.index(195)
line=line[idx:]+line[:idx]
#重新排列像素点
[im.putpixel((x, y),line[x]) for x in range(len(line))]
im.show()
结果:
输入http://www.pythonchallenge.com/pc/return/romance.html,即通关