穿越Python Challenge(0-5)

billstone發表於2009-08-12

一個有趣的網站: http://www.pythonchallenge.com/

集娛樂與學習於一體,在開動腦筋闖關的過程中,不但擴充套件了思維,還對Python加深了理解。

一共33關,每闖過一關都可以在提示下檢視作者給出的Solution。

 

第0關(指導關):

    出現一幅畫面,上面寫著2**38,教你如何進入下一關。  

    通過Python客戶端,可以簡單計算出2**38 =  274877906944

    那麼按照提示只要將該關網址中0.htm改為274877906944.html 即可

 

第1關:字元轉換
    圖片上給出了三對字母“K->M, O->Q, E->G",通過分析知道這是一個簡單的字元轉換,轉換規則是new_c=chr(ord(old_c)+2) 超過自動迴轉。

    我們可以看到,該關的網址為http://www.pythonchallenge.com/pc/def/map.html。那麼按照指導關給出的策略,只要將map替換為ocr即可通關。但如果僅是如此,那麼就完全撇開了Python,該關將徹徹底底地退化為一般的腦筋急轉彎。

    實際上在圖片下有一串看不懂的字串,按照上述字元轉換規則,這應該可以通過python做簡單處理,從而得到可識別的字串,程式碼如下:

    或者使用下面的簡單方法:

 

    執行指令碼,我們將得到下面一段描述:
  ”i hope you didnt translate it by hand. thats what computers are for.
doing it in by hand is inefficient and that's why this text is so long.
using string.maketrans() is recommended. now apply on the url. “

     當我們通關之後,通過http://www.pythonchallenge.com/pcc/def/ocr.html 將得到更多關於本關的資訊。


第2關:提取有效資訊

    該關圖片上展示了一本書,而圖下有一段話“ recognize the characters. maybe they are in the book, but MAYBE they are in the page source ”。通過仔細觀察book上的內容,發現無法識別;那麼有效資訊就應該在page source中。開啟頁面原始碼,可以看到下面的資訊:

    通過給出的提示“find rare characters in the mess below”,我們可以知道線索就在第二個<!-- -->中,不失一般性,設計python程式碼如下:

  

 

執行指令碼得到“e q u a l i t y”,那麼通關網址將是 http://www.pythonchallenge.com/pc/def/equality.html

 

第3關:正規表示式

    該關圖片下有一句話“ One small letter, surrounded by EXACTLY three big bodyguards on each of its sides. ” 也就是說有一個小寫字母,兩邊各有且僅有三個大寫字母。根據上關給出的提示,關鍵資訊可能在Page Source中,經過檢視果然如此。

    根據提示,滿足上述規則的可能有一個,也可能有多個。如果僅有一個,那麼找到的這七個字母組成的單詞應該就是通關單詞;如果有多個,那麼所有匹配的小寫字母就應該組成一個單詞。按常理來講,通關單詞應該是可讀、有含義的。下面是編寫的Python指令碼:

 

    執行指令碼得到“linkedlist",進入linkedlist.html 頁面,根據提示進入linkedlist.php頁面,通關!

 

第4關 數字串

    該關從頁面上看不出什麼有意義的資訊,但我們從頁面原始碼中可以提取到下面的有效資訊

    點選圖片,得到資訊“and the next nothing is 92512”,由此更改網址中引數nothing的值。按照需求我們設計下面的程式碼:

 

    從nothing值為12345開始,獲取網頁上的資訊,提取出最後的數字,最為nothing值進入下一次迴圈,最多400次。網頁上的資訊將記錄在numbers.log檔案中。執行程式,等待一段時間,從日誌中將得到一串資訊:

    “and the next nothing is 92118
  Yes. Divide by two and keep going.”

    按照提示,將程式碼中nothing的初始值12345改為46059。重新執行程式,將得到最終資訊“peak.html ”。通關!

 

第5關:Pickle

    圖片下有這麼一句話“ pronounce it ”,再看原始碼:

    “peak hell sounds familiar ”?pickle模組。按照給定的檔案banner.p,使用pickle解序列,將得到一個包含了不定數個元組的列表的列表。經過分析,每個列表的所有元組的第二項相加均為95,而元組的第一項要麼是‘ ’,要麼是‘#’;那麼,很顯然按一行95個字元的排列輸出將得到有效資訊,程式碼如下:

    執行程式,將得到channel字樣。下一關網址將是channel.html ,通關!

相關文章