[Python Challenge通關(guān)]第5關(guān) peak hell

peakhell

pronounce it

挑戰(zhàn)地址,點我

分析

右鍵查看網(wǎng)頁源代碼,有這樣的提示信息:

<peakhell src="banner.p"/>
</body>
</html>

<!-- peak hell sounds familiar ? -->

這里有一段提示 peak hell sounds familiar ? peak hell 和什么的發(fā)音相似?

還有個 peakhell 標簽,里面有個 banner.p,打開看下是一堆不規(guī)則的文本。

其實 python 中有個 pickle 模塊,用來進行對象的序列化和反序列化。

嘗試把 banner.p 中的內(nèi)容反序列化試下:

#!/usr/bin/env/ python3

import urllib.request
import pickle

url = "http://www.pythonchallenge.com/pc/def/banner.p"

with urllib.request.urlopen(url) as f:
    print(pickle.load(f))

輸出內(nèi)容:

[[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)], ...省略

可以發(fā)現(xiàn)反序列化后,這是一個二維數(shù)組,把輸出的格式調(diào)整一下:

#!/usr/bin/env/ python3

import urllib.request
import pickle

url = "http://www.pythonchallenge.com/pc/def/banner.p"

with urllib.request.urlopen(url) as f:
    result = pickle.load(f)
    for r in result:
        print(r)

輸出內(nèi)容:

[(' ', 95)]
[(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)]
[(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)]
...省略

仔細找下規(guī)律,發(fā)現(xiàn)每一行的數(shù)字之和都是 95,而且里面每一個元組由兩部分組成,一個字符(空格或者#),一個數(shù)字,比如:(' ', 14), ('#', 5)??梢月?lián)想一下,這是一個矩陣,元組中的數(shù)字代表前面的字符重復次數(shù),每一行都有95個字符。

嘗試試一下,看看會有什么效果:

#!/usr/bin/env/ python3

import urllib.request
import pickle

url = "http://www.pythonchallenge.com/pc/def/banner.p"

with urllib.request.urlopen(url) as f:
    result = pickle.load(f)
    for r in result:
        for c in r:
            for i in range(c[1]):
                print(c[0], end="")
        print()

輸出內(nèi)容:

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

這些空格和#最終組成了一個單詞 channel,這應該就是下一關(guān)的入口了http://www.pythonchallenge.com/pc/def/channel.html。

參考資源:

  1. pickle 官方文檔
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容