python挑战之level 18

连接: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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值