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

第十一关: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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值