介紹一個打怪升級練習 Python 的網站,寓教於樂~

作者 | 周蘿蔔

這是一個學習 Python 的趣味網站,透過關卡的形式來鍛鍊 Python 水平。一共有 33 關,每一關都需要利用 Python 知識解題找到答案,然後進入下一關。很考驗對 Python 的綜合掌握能力,比如有的闖關需要用到正則表示式,有的要用到爬蟲

一般情況下,我們學習 Python 都是按照章節順序,比如從基本語法、基本資料型別、條件語句、迴圈語句、函式,面向物件等等來進行的,如果學習時間跨度過大,那麼就很容易忘記前面的所學。此時正好可以拿這個網站來綜合測試一下對 Python 的掌握情況,以便查缺補漏

下面我們來就來說一下這個網站怎麼玩

介紹一個打怪升級練習 Python 的網站,寓教於樂~

可以看到進入網站主頁面,映入眼簾的就是一個很有年代感的畫面,看來是一個年代比較久遠的網站了,但是可千萬不要因為網站建立的時間長就小瞧它哦!

接下來我們點選

get challenged

開始挑戰

第0關,古香古色,哈哈哈,是讓我們根據2的38次方來更改 url,這應該就算是熱身運動吧,我們直接透過 Python 計算一下即可

介紹一個打怪升級練習 Python 的網站,寓教於樂~

把計算的結果替換 url 中的0就可以進入到下一關了

接下來就是正式的關卡了,我們的遊戲也正式開始!

介紹一個打怪升級練習 Python 的網站,寓教於樂~

根據圖片中的字母以及下方的提示,我們可以得出:前面的字母往後移動兩位就是後面的字母

然後根據這個規律,重新計算最下方的一串字元

這裡考察了 Python 當中字串編碼的相關知識

text = ‘’‘g fmnc wms bgblr rpylqjyrc gr zw fylb。 rfyrq ufyr amknsrcpq

ypc dmp。 bmgle gr gl zw fylb gq glcddgagclr ylb rfyr’q

ufw rfgq rcvr gq qm jmle。 sqgle qrpgle。kyicrpylq()

gq pcamkkclbcb。 lmu ynnjw ml rfc spj。‘’‘

deftrans(text):

new_text = ’‘for i in text:if str。isalpha(i):

n = ord(i)

if i >= ’y‘:                n = ord(i) + 2 - 26else:                n = ord(i) + 2

new_text += chr(n)

else:

new_text += i

print(new_text)

trans(text)

Output:

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。

可以看到網站的作者還是蠻幽默的,哈哈哈,不要手動翻譯~

接下來我們再次呼叫函式,傳入“map”就可以拿到新的 url 了

trans(

“map”

Output:

ocr

此時我們把 url 中的 map 替換為 ocr 就可以進入下一關

介紹一個打怪升級練習 Python 的網站,寓教於樂~

提示說可能在書裡,哈哈哈,這是要看瞎的節奏,也可能在網頁原始碼裡。我們透過右鍵檢視原始碼往下拉看到綠色區域

介紹一個打怪升級練習 Python 的網站,寓教於樂~

看到一行提示:find rare characters in the mess below

意思就是要在下面這一大串字元裡找到出現次數最少的幾個字元

我們先使用 request 請求網頁,然後透過正則表示式來獲取字元

import requests

defget_challenge(s):

return requests。get(‘http://www。pythonchallenge。com/pc/’ + s)。texttext = get_challenge(‘def/ocr。html’)str = ‘’。join(text)import retext = re。compile(‘])*)——>’, re。S)。findall(str)[-1]

counts = {}

for c in text: counts[c] = counts。get(c, 0) + 1

print(counts)

Output:

{‘\n’: 1221, ‘%’: 6104, ‘$’: 6046, ‘@’: 6157, ‘_’: 6112, ‘^’: 6030, ‘#’: 6115, ‘)’: 6186, ‘&’: 6043, ‘!’: 6079, ‘+’: 6066, ‘]’: 6152, ‘*’: 6034, ‘}’: 6105, ‘[’: 6108, ‘(’: 6154, ‘{’: 6046, ‘e’: 1, ‘q’: 1, ‘u’: 1, ‘a’: 1, ‘l’: 1, ‘i’: 1, ‘t’: 1, ‘y’: 1}

可以看到出現次數最少的就是最後幾個字元,合起來是「equality」,替換 url 字元 ocr 就可以進入下一關了

介紹一個打怪升級練習 Python 的網站,寓教於樂~

好了,是不是挺有意思的,我們就不再繼續劇透了,感興趣的小夥伴可以自行探索,對於鞏固 Python 基礎知識還是非常有幫助的!

網站地址:http://www。pythonchallenge。com/

官方參考:https://garethrees。org/2007/05/07/python-challenge/

頂部