Python challenge_16

第十六题地址:http://www.pythonchallenge.com/pc/return/mozart.html

第十六题打开的画面让我想到了小时候看电视信号不好时候的样子。源码中有一句话let me get this straight.图画中有一个一小段一小段的红色小线段。估计是要把这图片的红色小线段排成一条直线。

---------------------------我是看了攻略之后还没有写对非常悲伤的分割线---------------------------

解题思路:

题目要把图片的红色的区域对其排在一竖,对于每一行图片的像素,可以分成红色区域之前,红色区域,红色区域之后,然后把顺序改成红色区域,红色区域之后,红色区域之前。这样就会出现答案了。红色区域的值为195

自己写了一小段代码,能够实现功能,但是有点麻烦,一个一个像素点的做处理。

import Image
import re
im = Image.open(r'D:\mozart.gif')
print im.mode,im.size
result = Image.new(im.mode,im.size)
x,y = im.size
for i in range(y):
    j = 0
    while im.getpixel((j,i))!= 195:
        j += 1
    start = j
    while im.getpixel((j,i)) == 195:
        j += 1
    end = j
    len = end - start
    k = 0
    for j in range(x):
        if (start + j)<640:
            result.putpixel((j,i),im.getpixel((start+j,i)))
        else:
            result.putpixel((j,i),im.getpixel((k,i)))
            k += 1
result.show()   

得到的结果:


虽然最后也有出现Romance,但是不懂为什么,粉红色的地方变成了灰色的。看了一下其他人的代码,各种简单明了的方法,好像这么久过去了,Python的能力也没有提高多少,写出来的Python代码还是非常有c语言的风格。

用列表来做分割:

import Image
import re
im = Image.open(r'D:\mozart.gif')
result = Image.new(im.mode,im.size)
for y in range(im.size[1]):
    line = [im.getpixel((x,y)) for x in range(im.size[0])]
    temp = 0
    while line[temp]!=195:
        temp += 1
    new = line[temp:]+line[:temp]
    for x in range(len(new)):
        result.putpixel((x,y),new[x])
result.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值