The Python Challenge Level-5 Solution

本文通过解析PythonChallenge第五关的谜题,介绍了如何使用Python的pickle模块加载并显示特殊格式的数据。通过分析网页源代码及提示,博主找到了解决方法,最终呈现了一幅由点阵构成的图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

The Python Challenge Level-5 Solution

先附上我在Github上存放的代码仓库: The Python Challenge

先看提示:

pronounce it 

再看看网页源码,’peak hell’能代表什么?

我一开始以为是’pick’什么东西,点开’banner.p’之后没发现什么规律,于是先google了一下’peak hell’,发现了Python有pickle这么一个模块,那么就必然和这个有关系了。

pickle这个模块是python用来保存数据的,主要是loads和dumps方法的运用(这两个是对内存进行操作,如果要对硬盘进行操作,形成文件等形式,就是用load和dump),一个是读,一个是写,这里因为是直接从网页中获取数据,所以只要读就行了。

读完能发现这实际上是一个list组,再仔细点观察的话,就会注意到每一个[]中,把’ ‘和’#’后跟着的数字加起来,恰好是95。于是可以估计,这应该是利用点阵的方式来进行显示,而点阵的一行,有95个字符。这样就有了如下代码:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'Yuuki_Dach'

from urllib import request
import pickle

pyUrl = 'http://www.pythonchallenge.com/pc/def/banner.p'
req = request.Request(pyUrl)
resp = request.urlopen(req)
urlContent = resp.read()
code = []
pic = pickle.loads(urlContent)
for line in pic:
    for letter, num in line:
        code.append(num*letter)
    code.append('\n')
print("".join(code))

运行之后得到的点阵图是



              #####                                                                      ##### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
               ####                                                                       #### 
      ###      ####   ###         ###       #####   ###    #####   ###          ###       #### 
   ###   ##    #### #######     ##  ###      #### #######   #### #######     ###  ###     #### 
  ###     ###  #####    ####   ###   ####    #####    ####  #####    ####   ###     ###   #### 
 ###           ####     ####   ###    ###    ####     ####  ####     ####  ###      ####  #### 
 ###           ####     ####          ###    ####     ####  ####     ####  ###       ###  #### 
####           ####     ####     ##   ###    ####     ####  ####     #### ####       ###  #### 
####           ####     ####   ##########    ####     ####  ####     #### ##############  #### 
####           ####     ####  ###    ####    ####     ####  ####     #### ####            #### 
####           ####     #### ####     ###    ####     ####  ####     #### ####            #### 
 ###           ####     #### ####     ###    ####     ####  ####     ####  ###            #### 
  ###      ##  ####     ####  ###    ####    ####     ####  ####     ####   ###      ##   #### 
   ###    ##   ####     ####   ###########   ####     ####  ####     ####    ###    ##    #### 
      ###     ######    #####    ##    #### ######    ###########    #####      ###      ######

大家请把终端的宽度拉大一点,不然会和我一开始一样,读不出什么东西来,怀疑是不是程序写错了 =_=

接下来就是把channel输入到url中了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值