欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

33關Python游戲,測試你的爬蟲能力到底及格不?

系統 1610 0

33關Python游戲,測試你的爬蟲能力到底及格不?_第1張圖片


作者 | 蘇克1900

責編 | 胡巍巍

轉載自高級農民工(ID: Mocun6)


最近在網上看到一個非常有意思的 Python 游戲通關網站,一共有 33 關,每一關都需要利用 Python 知識解題找到答案,然后進入下一關。

很考驗對 Python 的綜合掌握能力,比如有的闖關需要用到正則表達式,有的要用到爬蟲。

我們平常學 Python 都是按章節順序、包或者模塊來學,容易前學后忘。正好可以拿這個網站來綜合測試一下對 Python 的掌握情況,以便查缺補漏。

來說說這個網站怎么玩。

33關Python游戲,測試你的爬蟲能力到底及格不?_第2張圖片

mark

這是網站主頁面,很有歷史感對吧,誕生了已有十幾年了。但千萬不要因為看著像老古董而小瞧它。

33關Python游戲,測試你的爬蟲能力到底及格不?_第3張圖片

mark

我們來玩玩看,點擊「get challenged」開始挑戰。

第 0 關是 Warming up 熱身環節:

這一關要求是修改 URL 鏈接,給的提示是電腦上的數學表達式:2 的 38 次方,所以大概就是需要計算出數值,然后修改url 進入下一關。

所以這關就是考 Python 的基本數值運算,你知道怎么算么?

打開 Python 自帶終端,一行代碼就能計算出結果:

33關Python游戲,測試你的爬蟲能力到底及格不?_第4張圖片

mark

把原鏈接中的 ? 0 替換為 ? 274877906944 回車就會進入下一關:

33關Python游戲,測試你的爬蟲能力到底及格不?_第5張圖片

mark

游戲這就正式開始了。圖片中的筆記本給了三組字母,很容易發現規律:前面的字母往后移動兩位就是后面的字母。

那么需要做的就是根據這個規律把下面的提示字符串,做位移解密得到真正的句子含義:

這道題考察字符串編碼和 for 循環相關知識,代碼實現如下:

            

1 text?=? '''g?fmnc?wms?bgblr?rpylqjyrc?gr?zw?fylb.?rfyrq?ufyr?amknsrcpq
2 ????ypc?dmp.?bmgle?gr?gl?zw?fylb?gq?glcddgagclr?ylb?rfyr'q
3 ????ufw?rfgq?rcvr?gq?qm?jmle.?sqgle?qrpgle.kyicrpylq()
4 ????gq?pcamkkclbcb.?lmu?ynnjw?ml?rfc?spj.'''

5
6 text_translate?=? ''
7 for ?i? in ?text:
8 ???? if ?str.isalpha(i):
9 ????????n?=?ord(i)
10 ???????? if ?i?>=? 'y' :
11 ????????????n?=?ord(i)?+? 2 ?-? 26
12 ???????? else :
13 ????????????n?=?ord(i)?+? 2
14 ????????text_translate?+=?chr(n)
15 ???? else :
16 ????????text_translate?+=?i
17 print(text_translate)

得到結果:

            

1 i?hope?you?didnt?translate?it?by?hand.?
2 thats?what?computers?are?for.?
3 doing?it?in?by?hand?is?inefficient?and?that's?why?this?text?is?so?long.?
4 using?string.maketrans()is?recommended.?now?apply?on?the?url.

作者很風趣,當然不能手動去一個推算了,推薦用 string.maketrans() 這個方法解決,我們上面采取的是比較直接的方法,官方給出了更為精簡的方法:

            

1 import ?string
2 l?=?string.lowercase
3 t?=?string.maketrans(l,?l[ 2 :]?+?l[: 2 ])
4 print ?(text.translate(t))

然后把 url 中的 map 改為ocr回車就來到了第 2 關:

33關Python游戲,測試你的爬蟲能力到底及格不?_第6張圖片

mark

作者接著說過關的提示可能在書里(當然不可能了)也可能在網頁源代碼里。那就右鍵查看源代碼往下拉看到綠色區域,果然找到了問題:

33關Python游戲,測試你的爬蟲能力到底及格不?_第7張圖片

mark

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

考察了這么幾個知識點:

  • 正則表達式提取字符串

  • list 計數

  • 條件語句

如果是你,你會怎么做?

來看下,十行代碼快速實現:

            

1 import ?requests
2 url?=? 'http://www.pythonchallenge.com/pc/def/ocr.html'
3 res?=?requests.get(url).text
4 text?=?re.findall( '.*? .* ' ,res,re.S)
5 #?list轉為str便于遍歷字符
6 str?=? '' .join(text)
7
8 lst?=?[]
9 key=[]
10 #遍歷字符
11 for ?i? in ?str:
12 ???? #將字符存到list中
13 ????lst.append(i)
14 ???? #如果字符是唯一的,則添加進key
15 ???? if ?i? not ? in ?key:
16 ????????key.append(i)
17 #?將list列表中的字符出現字數統計出來
18 for ?items? in ?key:
19 ????print(items,lst.count(items))

首先,用 Requests 請求網頁然后用正則提取出字符串,接著 for 循環計算每個字符出現的次數。

            

1 %? 6104
2 $? 6046
3 @?6157
4 _? 6112
5 ^? 6030
6 #?6115
7 )? 6186
8 &? 6043
9 !? 6079
10 +? 6066
11 ]? 6152
12 *? 6034
13 }? 6105
14 [? 6108
15 (? 6154
16 {? 6046
17
18 e? 1
19 q? 1
20 u? 1
21 a? 1
22 l? 1
23 i? 1
24 t? 1
25 y? 1

可以看到出現次數最少的就是最后幾個字符,合起來是「equality」,替換 url 字符就闖過過了第 2 關進入下一關繼續挑戰。是不是有點意思?

后面每一關都需要用到相關的 Python 技巧解決,比如第 4 關:

33關Python游戲,測試你的爬蟲能力到底及格不?_第8張圖片

mark

這一關作者弄了個小惡作劇,需要手動輸入數值到 url 中然后回車,你以為這樣就完了么?并沒有它有會不斷重復彈出新的數值讓你輸入,貌似無窮盡。

33關Python游戲,測試你的爬蟲能力到底及格不?_第9張圖片

所以,這一關肯定不能采取手動輸入的方法闖關,自然要用到 Python 了。要實現自動填充修改 url 回車跳轉到新 url,循環直到網頁再也無法跳轉為止這一功能。

如果是你,你會怎么做?

其實,一段簡單的爬蟲加正則就能搞定。思路很簡單,把每次網頁中的數值提取出來替換成新的 url 再請求網頁,循環下去,代碼實現如下:

            

1 import ?requests
2 import ?re
3 import ?os
4
5 #?首頁url
6 resp?=?requests.get(
7 ???? 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345' ).text
8 url?=? 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
9 #?計數器
10 count?=? 0
11 while ? True :
12 ???? try :
13 ???????? #?提取下一頁動態數值
14 ????????nextid?=?re.search( '\d+' ,?resp).group()
15 ????????count?=?count?+? 1
16 ????????nextid?=?int(nextid)
17 ???? except :
18 ????????print( '最后一個url為:%s' ?%?nexturl)
19 ???????? break
20
21 ???? #?獲取下一頁url
22 ????nexturl?=?url?+?str(nextid)
23 ????print( 'url?%s:%s' ?%?(count,?nexturl))
24 ???? #?重復請求
25 ????resp?=?requests.get(nexturl).text

輸出結果如下:

可以看到,最終循環了 85 次找到了最后一個數字16044,輸入到 url 中就闖關成功。

33 關既有趣又能鍛煉使用 Python 解決問題的技巧,感興趣的話去玩玩看。

網址:http://www.pythonchallenge.com/

如果遇到不會做的題,可以在這里找到參考答案:

中參考文教程:

https://www.cnblogs.com/jimnox/archive/2009/12/08/tips-to-python-challenge.html

官方參考教程:

http://garethrees.org/2007/05/07/python-challenge/

(*本文為 AI科技大本營轉載文章,轉載請聯系原作者)


CTA核心技術及應用峰會


5月25-27日,由中國IT社區CSDN與數字經濟人才發展中心聯合主辦的第一屆CTA核心技術及應用峰會將在杭州國際博覽中心隆重召開,峰會將圍繞人工智能領域,邀請技術領航者,與開發者共同探討機器學習和知識圖譜的前沿研究及應用。 議程設置請請識別海報二維碼查看。


目前CTA峰會倒計時5天!還沒有拿到入場券的小伙伴可以掃描識別海報二維碼或者點擊閱讀原文,即刻搶購。你也 添加小助手微信 15101014297 ,備注“ CTA ”,了解票務以及會務詳情。


33關Python游戲,測試你的爬蟲能力到底及格不?_第10張圖片


推薦閱讀


  • 掌聲送給TensorFlow 2.0!用Keras搭建一個CNN | 入門教程

  • 一文回顧AI繪畫的成長之路:從簡筆畫到真實人臉生成

  • 清華AI學堂班:姚期智擔任首席教授,2019年首批招收30人

  • 中國AI開發者真實現狀:寫代碼這條路,會走多久?

  • 520 這天,我突然意識到,她根本配不上我這么聰明的男人

  • 厲害!女學生偷師男子學校,變身區塊鏈開發工程師

  • 確實, 5G與物聯網離不開區塊鏈!

  • 刷了一個半月算法題,我薪資終于Double了

  • Linux 之父:我就是覺得蘋果沒意思!| 人物志

  • 這本京東斷貨王的Python神書,刷爆整個編程圈!


640?wx_fmt=png


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲免费中文字幕 | 国产a级网站 | 性高湖久久久久久久久aaaaa | 日韩特级 | 深夜毛片| 人人九九精品 | 草草视频在线 | 亚洲射吧 | 国产精品一区二区三区久久久 | 久久穴| 精品欧美一区二区三区四区 | 国产一区日韩精品 | 伊人久久精品成人网 | 久久国产精品久久 | 日产国产欧美视频一区精品 | 亚洲精品乱码久久久久久蜜桃91 | 2020天天狠天天透天干天天怕 | 91人人草 | 99国精产品一区二区三区A片 | 日本99热| www.伊人 | 日本高清18xxxx| 狙击兵2通古电影高清 | 欧美日韩一区二区高清视 | av资源中文在线 | 久久久久久国产精品视频 | 久久视频免费 | 国产精品毛片久久久久久久 | 天堂在线免费视频 | 亚洲一区日韩 | 色噜噜狠狠色综合日日 | 三极片在线观看 | 麻豆一二区 | 色AV亚洲AV永久无码精品软件 | 午夜社区 | 欧美剧场成人精品午夜 | 好叼操 | 精品国产成人在线 | 国产免费小视频在线观看 | 天天插视频 | 欧美日韩在线看 |