[Level 5]
Title: peak hell
pronounce it
想不出,查看源码,找到banner.p文件,注释中提示peak hell sounds familiar ?。未想出,搜了下知道是pickle,要使用pickle模块处理banner.p文件。
import pickle
with open('banner.p','rb') as f:
ban = pickle.load(f)
print(ban)
打印出[[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)],...]
,是多个包含元组的列表组成的一个大列表。元组所含元素的形式是字符串加一个整数,应该是字符串重复次数。一个小列表为一行进行打印。
for b in ban:
print(''.join(i[0]*i[1] for i in b))
得到channel,[Level 6]
小结
-
pickle模块的
pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")
函数读取一个文件对象,返回重新构建的对象层次结构。文件可以是为二进制读取打开的磁盘文件,io.BytesIO对象或满足此接口的任何其他自定义对象。可以直接传递请求数据到函数:
import urllib.request
ban = urllib.request.urlopen('http://www.pythonchallenge.com/pc/def/banner.p')
- 打印时,使用列表解析,很强大:
print('\n'.join([''.join([p[0] * p[1] for p in b]) for b in ban]))
Python Challenge Wiki
输出方式有很多,如使用lambda创建一个函数:m = lambda pair: pair[0]*pair[1]
,其他大同小异了。