看著後臺有不少粉絲在後臺留言,諮詢如何趣味的學Python,其實學習的動力一半來自需求,一半來自興趣!
需求主要是的工作中,項目中外力迫使你需要去學習,比如用Python來提高工作效率,用Python來進行自動化測試等等;還有的就是一個興趣。
為啥打遊戲這麼讓人著迷,就是因為好玩有趣。這是以前一篇推薦的文章,如果你刷枯燥的刷題網站的話,可以試試這個趣味闖關網站。
進入界面後是下圖的形式:
這個網站從2005年就存在了,至今也快15年了,累計有300多萬人訪問過。打開界面,小編就被深深的吸引,感覺有點想密室逃脫的感覺,而且找回了小時候遊戲界面的感覺。從遊戲的界面介紹可以看出,該遊戲一共有33關。而且每一關都是從界面給出的提示中找尋線索,並利用Python編程解決問題。小編立即開始了闖關。
01.
第1關界面如下
從上圖可以看出,第1關是要我們根據圖片的提示改變url的地址。而2的38次方我們可以直接利用Python的內置函數pow(2,38)便可得到結果為:274877906944。
我們把該頁面的url:http://www.pythonchallenge.com/pc/def/0.html 改為:
http://www.pythonchallenge.com/pc/def/274877906944.html 即可闖關成功。第1關的url為:http://www.pythonchallenge.com/pc/def/map.html。
02.
第2關界面如下
看到這個圖片的時候小編也有些懵,但是看到下面的提升了嗎?每個人在解決這個問題的時候都會三思,而這裡的twice是兩次的意思,每個人指的是每個字母。小編就恍然大悟,將每個字母向後移動兩個就可以得到後面的字母,這就是一個破解密碼的遊戲。找到了突破口,下面就是編程實現了。代碼如下所示:
得到的譯文為:i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and thats why this text is so long. using string.maketrans() is recommended. now apply on the url.
譯文告訴我們這就是為什麼要用計算機處理的原因,因為如果我們動手翻譯的話會是一個非常大的工作量,譯文推薦使用string.maketrans(0,但是小編自己編程闖過了這一關,同時還學到了maketrans這個函數。然後將上述的方法應用到url裡面即可。這裡我們把map採用上述的方法,改為ocr即可跳轉到第2關。
03.
第3關界面如下
通過提示我們知道闖關的秘密在書裡,但是也可能在原始碼裡,所以我們需要檢查網頁的原始碼。
這裡直接將需要利用的文本,也即上圖中的綠色標註的文本複製下來,將文本命名為text,然後利用collections庫中的Counter類統計文本中的字符數量即可,代碼只有簡單的一句:Counter(text).most_common()。統計結果中最少的字符數量為('i', 1), ('e', 1), ('l', 1), ('q', 1), ('t', 1), ('u', 1), ('y', 1), ('a', 1)。合起來單詞為equality,我們將url裡的ocr改為equality即可跳轉到第4關。
4.
第4關界面如下
第4關的提示是說每一個小寫字母周圍都有三個大寫字母的包圍。通過查看原始碼小編又發現了需要處理的文本。小編複製了文本並將其保存到了本地的txt文檔。接下來就是按照提示從文本中找尋我們需要的小寫字母,代碼如下圖所示:
這裡的第4關考察了正則表達式的匹配,這裡小編採用的正則表達式為:
r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]'即以大寫字母為開頭,然後匹配三個大寫字母後在匹配需要的小寫字母,後面再接三個大寫字母,並以大寫字母作為結束。最終匹配的結果為:linkedlist。我們將第4關的url中的equality改為linkedlist即可進入到下一關。
以上小編帶領大家闖了四個關卡,每一個關卡都有自己的特點,通過觀察提示,來尋找線索闖關,使得相對無聊的編程變得十分的有意思,既增加了趣味,而且也鍛鍊了自己的能力。非常的好玩。最後,小編給大家送上一個中文的答案參考通關秘籍,方便大家升級打怪。
後臺輸入:【通關】獲取秘籍
近期熱門:
8個鮮為人知的Python科學庫,用過三個算是高手
火爆全網!這個 Python 項目很騷氣!
你必須掌握的20個python代碼,短小精悍,用處無窮
Python 最強編輯器詳細使用指南!