我大学剩下一年半的生活(十二)——pythonchallenge之level11

python challenge level 11 url: http://www.pythonchallenge.com/pc/return/5808.html

这一题其实很简单,看着那就觉得是一张经过处理了的图,估计是被几张图合成一张图了,毕竟那效果,那像素,本能的就认为这是一张被拼成的图。而且之前在看PIL的时候也看到过merge之类的函数,再加上title的odd even,充分的肯定了我的猜测。于是乎,我又纠结了,这个odd和even到底是怎样定义的呢?毕竟图片是一张用二维坐标确定像素的图,对于单个数字确实可以分成odd和even,但是对于一个点对我真心不知道odd和even是怎么定义的。我尝试了很多的定义方法,虽然对odd和even的定义截然不同,但是最后的结果还是一样的,我就以其中一种方法来写这篇blog。

我根据坐标的情况分成四种情况:

  1. (odd, odd)
  2. (odd, even)
  3. (even, odd)
  4. (even, even)

根据这四种情况,建立了四张图,代码如下:

#! /usr/bin/env python
'''python challenge level 11
question url: http://www.pythonchallenge.com/pc/return/5808.html
answer url: http://www.pythonchallenge.com/pcc/return/evil.html
'''


import Image
im = Image.open("level11.d/cave.jpg")
w, h = im.size
# print w, h 


imgs = [Image.new(im.mode, (w / 2, h / 2)) for dummy in xrange(4)]
imgs_load = [i.load() for i in imgs]
org = im.load()


for i in xrange(w):
    for j in xrange(h):
        org_pos = (i, j)
        new_pos = (i // 2, j // 2)
        imgs_load[i % 2 + j % 2 * 2 ][new_pos] = org[org_pos]


[imgs[i].save('level11.d/%d.png' % i) for i in xrange(4)]


在PIL库中说,使用load函数的效果比使用putpixel和getpixel更高效,因此选择使用load函数。另外,这里建立了一个list来报存四种情况下的图片,因为i,j对2去模的结果只能为0或1,所以为了计算出0-3,于是就有了i % 2 + j % 2 * 2。最后,因为list comprehension的速度比for语句快,所有用的list comprehension。

最后得到了四张图,不过只有两张图是有意义的:


在这两张图中的一张显示了答案:evil。因此下一题的链接为:http://www.pythonchallenge.com/pc/return/evil.html。此题的答案在:http://www.pythonchallenge.com/pcc/return/evil.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值