您的位置:首页 > 编程语言 > Python开发

PythonChallenge闯关游戏——第11-15关

2014-04-30 11:01 393 查看
第十一关:http://www.pythonchallenge.com/pc/return/5808.html



查看网页源代码:



是图像处理的题,提示奇偶,所以我们将图像下载下来,然后将图像的每个像素都隔开来取生成一张新图像看看:

假设原图像是下面这个:

0,01,02,03,0
0,11,12,13,1
0,21,22,23,2
则生成的新图像是:

0,02,0
0,22,2
python脚本如下:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: