第十一关:http://www.pythonchallenge.com/pc/return/5808.html
查看网页源代码:
是图像处理的题,提示奇偶,所以我们将图像下载下来,然后将图像的每个像素都隔开来取生成一张新图像看看:
假设原图像是下面这个:
0,0 | 1,0 | 2,0 | 3,0 |
0,1 | 1,1 | 2,1 | 3,1 |
0,2 | 1,2 | 2,2 | 3,2 |
0,0 | 2,0 |
0,2 | 2,2 |
import Image
blank = Image.new('RGB', (320, 240))
im = Image.open('cave.jpg')
for x in range(640):
for y in range(480):
pixel = im.getpixel((x, y))
blank.putpixel((x/2, y/2), pixel)
blank.show()
输出结果:
看到有:evil字样,修改url,进入下关。
第十二关:http://www.pythonchallenge.com/pc/return/evil.html
网页源代码:
只有一个evil1.jpg,于是我们改为evil2.jpg,得到:
我们将后缀名改为gfx,下载到evil2.gfx文件。再改变url为evil3.jpg,得到:
改变url为evil4.jpg,得到:
Bert is evil! go back!
将url地址改为:bert,得到:
到这里就断了,然后根据原先下载的文件,再加上原始图片5份牌提示,我们将该文件分成5份,python代码如下:
import Image
from cStringIO import StringIO
s = open("evil2.gfx", "rb").read()
for i in range(5):
piece = s[i::5] # every fifth byte, starting at i
im = Image.open(StringIO(piece)) # @UndefinedVariable
print i,im.format.lower()
f = open("%d.%s" % (i, im.format.lower()), "wb")
f.write(piece)
f.close()
输出结果:
0 jpeg
1 png
2 gif
3 png
4 jpeg
还有生成了5张图片,图片中的单词拼起来就是:disproportionality ,又ity是划掉的,所以是disproportional,改变url,进入下关。
第十三关:http://www.pythonchallenge.com/pc/return/disproportional.html
网页源代码:
打开phonebook.php一看,是个xml文件,猜想是python的xmlrpclib模块
上面提示是打电话给罪犯,再加上上一关提示的罪犯是Bert,所以python代码如下:
import xmlrpclib
server = xmlrpclib.Server('http://www.pythonchallenge.com/pc/phonebook.php')
print server.phone('Bert')
输出结果:
555-ITALY
测试下,发现只有italy才是下关的url。
第十四关:http://www.pythonchallenge.com/pc/return/italy.html
网页源代码:
将wire.png下载下来看,是一个10000*1的图片,根据提示,remember: 100*100 = (100+99+99+98) + (,还有网页图片是一个螺旋状的面包,我们猜想是将该图片转换为一张100*100的图片,填充的方式是由最外层开始一圈一圈的填上像素值。
注:100*100 = (100 + 100 + ... + 100) //一共100个100相加
= (100 + 0) + (99 + 1) + ... + (1 + 99)
= (100 + 99 + ... + 1) + (0 + 1 + ... + 99)
= (100 + 99 + ... + 1) + (99 + 98 + ... + 0)
= (100 + 99) + (99 + 98) + ... + (1 + 0)
= (100 + 99 + 99 + 98) + ... + (2 + 1 + 1 + 0)
算法比较难写,在网上找了个,以后再研究:
import Image
src = Image.open('wire.png') # @UndefinedVariable
dst = Image.new(src.mode, (100, 100)) # @UndefinedVariable
x, y, idx = -1, 0, 0 # back a step
steps = [1, 0, 0, 1, -1, 0, 0, -1]
while idx < 10000:
nx, ny = x + steps[0], y + steps[1]
if 0 <= nx < 100 and 0 <= ny < 100 \
and dst.getpixel((nx, ny)) == (0, 0, 0):
x, y = nx, ny
dst.putpixel((x, y), src.getpixel((idx, 0)))
idx += 1
else:
steps = steps[2:] + steps[:2] # turn
dst.show()
输出结果:
改变url,得到and its name is uzi. you'll hear from him later.
因此,使用http://www.pythonchallenge.com/pc/return/uzi.html,得到下一关。
第十五关:http://www.pythonchallenge.com/pc/return/uzi.html
网页源代码:
猜whom,图片右下角,有一个月是29天,说明该年是闰年,而且1月26号是星期一,1xx6年,写个python遍历下:
from datetime import *
def isleap(year):
d = date(year, 3, 1)
return (d - timedelta(days=1)).day == 29
for year in range(1006, 2000, 10):
if isleap(year) and date(year, 1, 26).weekday() == 0:
print year
输出结果:
1176
1356
1576
1756
1976
根据提示,他是第二年青的,所以是1756年,还有提示是明天,所以是1月27号,百度下1756-01-27这个日期,发现时莫扎特的出生日期,改一下url为mozart,进入下关:
http://www.pythonchallenge.com/pc/return/mozart.html