前言
有一個朋友李雷,想學Python句伶。為啥想學呢劲蜻?可能是看了這個帖子你都用 Python 來做什么?考余。
這個帖子非常的有意思先嬉,大家的回答超乎李雷的想象,你可能知道Python可以用來寫爬蟲楚堤,分析各種數(shù)據(jù)疫蔓,比如京東上大家購買內衣的顏色分布等等,或者一些小工具身冬,幫助我們自動化完成一些繁瑣的工作衅胀。但是這只是冰山一角,帖子里的回答還有很多奇妙的作品:
拿來了解女朋友情緒變化酥筝,順道自動回復滚躯。
分析B站宅舞主播如何跳舞。
為女朋友和自己定制一款游戲嘿歌。
編程給圖像隨機填色呀掸掏。
用來玩游戲。
這個帖子看戲來宙帝,李雷有一點心動的感覺丧凤。于是想自己也來試一試,希望也能用Python開發(fā)出有價值的東西步脓。
在網上搜索學Python愿待,課程非常多浩螺,完全不知道從那里開始,要做什么呼盆,是先花錢買個課跟著學,還是先買幾本書來看一看呢蚁廓?
李雷不想花錢消除焦慮访圃,于是李雷想挑戰(zhàn)一下0基礎0元在網上學習Python。
李雷開始了這個挑戰(zhàn)相嵌。
了解Python
李雷知道腿时,想學Python只是一時的沖動,真學起來其實堅持不了3小時饭宾,所以還是先了解一下Python是什么批糟,學了能做哪些事情,為這個沖動再加一些利益誘惑看铆,說不定能堅持3天徽鼎。
了解一個事物的本質,或者說在網上了解一個事物的本質弹惦,最好的方式和路徑如下:官網否淤、維基百科、權威社區(qū)棠隐、大牛博客石抡、相關文檔等等。
Python官網
于是李雷助泽,首先打開了Python的官方網站https://www.python.org/啰扛。如圖1
官方網站對Python的定義是:讓你更快的工作和更有效集成系統(tǒng)的程序語言。李雷知道更快的工作是什么意思嗡贺,但是對更有效的集成系統(tǒng)不是很理解隐解。接著看介紹,官方網站提供了初學者指南诫睬,源碼下載厢漩,相關文檔,甚至還有相關工作的招聘信息岩臣,真是業(yè)界良心網站溜嗜。
在官方網站首頁引起李雷注意的是,Use Python for架谎。用Python做什么炸宵,上面列舉了一些,后面的英文是框架的名字:
- 網站開發(fā):Django谷扣、Pyramid
- 桌面程序開發(fā):tkInter土全、PyGObject
- 科學和大數(shù)據(jù):Scipy捎琐、Pandas
- 軟件開發(fā):Buildbot、Trac
- 系統(tǒng)管理:Ansible裹匙、Salt
李雷看到這里瑞凑,產生了一個疑問,這個語言是萬能的嗎概页?咋能干這么多事情呢籽御。接著李雷打開了維基百科網站,看看上面對這個萬能語言怎么說惰匙。
維基百科講Python
因為維基百科在大陸不能訪問技掏,所以找了一個替代網站進行了查詢了Python的介紹。如圖2:
其中對Python可以有幾點認識:
- Python是一種高級動態(tài)語言项鬼,有很多人把Python作為一種“膠水語言”使用哑梳。使用Python將其他語言編寫的編程進行集成和封裝。
- Python的設計哲學是“優(yōu)雅”绘盟、“明確”鸠真、“簡單”。Python開發(fā)者的哲學是“用一種方法龄毡,最好是只有一種方法來做一件事”弧哎。
- Python相比于靜態(tài)語言,速度會稍慢一些稚虎,不過撤嫩,根據(jù)二八定律,大多數(shù)編程對速度要求不高蠢终。在某些對運行速度要求很高的情況序攘,Python設計師傾向于使用JIT技術。
- Python因為對網絡協(xié)議支持很完善寻拂,所以常用于寫服務器軟件和爬蟲程奠。
從那里開始
看了一些介紹,李雷依然有一些云里霧里祭钉,到底如何開始呢瞄沙?
在知乎帖子里,有一個回答慌核,提及了一個網站http://www.pythonchallenge.com/距境,這個網站給了一些謎題,可以使用Python來解答這個謎題垮卓,李雷覺得這是一個開始的方案垫桂,把學習當成一個游戲,去闖關粟按,應該比上來就學一大頓知識會更容易堅持?诬滩,于是霹粥,李雷打開了這個網站,看到了網站上介紹疼鸟,如圖3(已經使用谷歌翻譯)
那就直接點擊挑戰(zhàn)吧后控,李雷已經準備好。
第0題
頁面上顯示了這樣一句話Hint: try to change the URL address.
然后界面上有一張圖片空镜,上面有三個數(shù)字238浩淘。
根據(jù)提示,李雷把現(xiàn)在url上的0.html修改成了238.html姑裂,界面顯示了 No... the 38 is a little bit above the 2...
李雷有點蒙馋袜,于是把0.html改成1.html試一試男旗。結果界面顯示 238 is much much larger.**
李雷憑借直覺舶斧,是不是應該輸入2**38.html才行。結果界面顯示 give the answer, not the question.
李雷這下知道了察皇,需要238的值茴厉,現(xiàn)在怎么知道238的啥意思呢。根據(jù)常識什荣,兩個數(shù)字中間有符號矾缓,可能是某種運算符,于是在網上搜索 python ** 運算符找到一些說明稻爬,李雷知道了2**38代碼了2的38次方嗜闻。那是不是在Python語言里輸入這個值,就能知道2的38次方是多了呢桅锄?
李雷打算找一個在線的Python環(huán)境試一試琉雳,因為本地安裝環(huán)境太費事件,而且萬一卡住友瘤,很容易就放棄了翠肘。
在Bing上搜索Python online,找到了一個在不翻墻的情況下辫秧,訪問速度還可以的網站https://www.onlinegdb.com/online_python_compiler束倍。通過這個網站,可以在線寫Python代碼盟戏,并運行代碼看結果绪妹。
在中間的編輯器里輸入代碼,然后點擊頂部的Run按鈕柿究,就能在下方的輸出界面里看到結果了喂急。
在題目url里輸入274877906944.html。成功到了第一題的界面笛求,第一次完成廊移,李雷有了一點點信心糕簿。
第1題
第一題的界面如圖4
看到第一題到界面,李雷剛有到信心要逃走了狡孔。這是啥意思懂诗,雖然給了提示,但是這一串茄子色的字母到底想說啥呢苗膝?
Think Think殃恒。李雷開始專注的在大腦??中尋找思路,看到諜戰(zhàn)片的同學知道辱揭,以前的情報人員交流情報都會用到編碼离唐,避免情報被直接泄露。上圖中的K->M问窃,O->Q亥鬓,E->G。在字母表里域庇,就是把字母往右移動兩位映射嵌戈。
字母表:ABCDEFGHIJKLMNOPQRSTUVWSYZ
比如g fmnc wms每個字母往右移動兩位字母映射會得到i hope you。如果每個都這樣手動算听皿,是不是很累和苦逼熟呛。李雷想,這要是能用Python寫個程序自動處理映射關系多好尉姨。
解題過程
這需要涉及處理字符串和ASCII碼
李雷在花了4個小時庵朝,在網上尋找如何處理字符串,ASCII碼又厉,并且試著使用循環(huán)來處理每個字母九府。這個過程讓李雷痛苦,但是正是有這個過程馋没,李雷寫出了下面對代碼:
input1 = "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."
output = ""
startNumber = ord("a")
for i in range(len(input1)):
if input1[i] == " " or input1[i] == ".":
output = output + input1[i]
else:
oldasc = ord(input1[i])
newasc = oldasc + 2 - startNumber
newasc = newasc % 26
newasc = newasc + startNumber
newchr = chr(newasc)
output = output + newchr
print(output)
這里需要考慮昔逗,字母yz會對應ab,所以數(shù)字超過字母表會從字母表的頭開始計算篷朵。輸出的結果里包含了解題答案:
i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and thatws why this text is so long. using string.maketransxy is recommended. now apply on the url
這句話提示了勾怒,可以使用Python的string.maketrans方法。于是在網上查詢了一番以后声旺,李雷寫出了下面的的代碼:
intab = "abcdefghijklmnopkrstuvwxyz"
outab = "cdefghijklmnopkrstuvwxyzab"
trantab = str.maketrans(intab, outab)
str = "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."
print(str.translate(trantab))
李雷和自己第一次寫代碼一對比笔链,后者真是比前者...不說了,python真是化繁為簡~
這時腮猖,李雷知道把map帶入到函數(shù)中鉴扫,可以得到ocr,可以去第二題了澈缺。
總結
李雷了解了Python是什么坪创,它的歷史炕婶、優(yōu)勢,在當前能做什么事情莱预。
寫了自己第一個Python程序柠掂,幫助轉換一個字符串。
對學習Python有了那么一點信心依沮。