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

Python challenge_16

2014-03-31 16:18 232 查看
第十六题地址: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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python python challenge