连接:http://www.pythonchallenge.com/pc/return/balloons.html
————————————————————————————————————————————————————————————
两幅天鹅。一副亮,一副暗一点
标题:can you tell the difference?
提示:<!-- it is more obvious that what you might think -->
————————————————————————————————————————————————————
看了看别人的解释,原来是修改网页地址:www.pythonchallenge.com/pc/return/brightness.html
查看源码:提示:<!-- maybe consider deltas.gz -->
。。修改网址后缀:下载文件,打开压缩包,里面是个txt文件。是一大串字节,是要把这些字节解码吧
看看别人的解答。原来开头的几个数字89 50 47 4E 0D 0A 1A 0A是8个字节的PNG签名,
一排拥有16个字节,而且第一排大都是
89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 0002
都是图片开头,说明两张图片,那么我们需要分割开来
——————————————————————————————————————————————————————————————————————
import gzip, difflib
import binascii
#读取文件中的数据。我们需要读取字符串,所以是‘rt',文本类型读取模式
ff =gzip.open('deltas.gz', 'rt')
deltas = ff.read()
ff.close()
#按行分成列表
deltas = deltas.splitlines()
left, right = [], []
#吧左右两个图片字符串分别保存在两个列表中
for row in deltas:
#从0开始每一行前一段字符串长54,中间隔了两个空格,后一段开始为56
left.append(row[:53])
right.append(row[56:])
'''
class difflib.Differ.compare(a,b)和difflib.ndiff(a,b)一样
Code Meaning
'- ' 仅在片段1中存在
'+ ' 仅在片段2中存在
' ' 片段1和2中都存在
'? ' 存在疑问的
'''
#查找不同的结果
diff = list(difflib.ndiff(left, right))
#使用zip函数将不同类放在不同的图片之中
png = ['same.png', 'plus.png', 'minus.png']
pngs=zip(png,[''.join(row[2:] for row in diff if i==row[0] ) for i in ' +-' ])
#写入到不同的图片
for filename,data in pngs:
#去掉每一行字符串之间的空格
strs=data.replace(' ','')
#把十六进制的字符串转为二进制数据bytes类型
strs_unhex=binascii.unhexlify(strs)
open(filename,'wb').write(strs_unhex)
————————————————————————————————————————————————————————————————————
结果为:
————————————————————————————————————————————————————————————————————————
下一关久违:http://www.pythonchallenge.com/pc/hex/bin.html
登陆密码:(butter,fly)