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