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()   

得到的结果:

Python challenge_16_第1张图片

虽然最后也有出现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()

你可能感兴趣的:(python,python,challenge)