python challenge 28解题总结

python challenge 28网址:www.pythonchallenge.com/pc/ring/bell.html用户名是repeat 密码是 switch

  • 图片是瀑布,湖,丛林,图片上面似乎覆盖着很多长短不一的竖条
  • many pairs ring-ring
  • 提示 RING-RING-RING say it out loud
  • 再次失去思路
  • 一个攻略说,传说中ring-ring-ring 反复读会变成green
  • 另一个则说,会变成grin
  • 先看grin  ==> http://www.pythonchallenge.com/pc/ring/grin.html
  • 网页上提示 you are not happy - you are feeling sick.
  • 再看green ==> http://www.pythonchallenge.com/pc/ring/green.html
  • 网页上提示 yes! green!
  • 解码图片上短竖条中的g值

源代码:

 

def level_28():
	im=PngImagePlugin.PngImageFile(ur'd:bell.png')
	l=[]
	for y in range(im.size[1]):
		for x in range(im.size[0]):
			l.append(im.getpixel((x,y))[1])
	print l[:10]
	paris=[(l[i],l[i+1]) for i in range(0,len(l),2)] # 根据"my paris" 将像素两两分为一组
	# 可以看出基本上每个paris内两像素之差都为42
	print paris[:10]

	diffs=[abs(i[0]-i[1]) for i in paris] # 计算两两像素之差的绝对值
	print diffs[:10]

	d=[x for x in diffs if x!=42] # 过滤掉差值等于42的
	print d

	s=''.join([chr(x) for x in d])  # 剩下的差值转为字符
	print s # 输出 whodunnit().split()[0] ?

	# 到此就有些让我奇怪了,whodunnit是到结尾才知道谋杀犯的侦探小说的意思,怎么会联想到Python发明人Guido Van Rossum ?
	# 难道是发音像 who done it 谁做了这些
	print 'Guido Van Rossum'.split()[0] # 输出 guido  ==> http://www.pythonchallenge.com/pc/ring/guido.html

	# 从官方wiki看到获取所有像素的g值的更好方法是
##	im=Image.open(ur'd:bell.png')
##	green=im.split()[1]
##	greendata=green.getdata()

 

下一关的网址:www.pythonchallenge.com/pc/ring/guido.html用户名是repeat 密码是 switch