第十六题地址: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()