初衷
筆者本身也不過是一個處于入門階段的Python初學(xué)者,竟想要寫一份“Python入門教程”,再加上現(xiàn)在網(wǎng)上的Python入門教程實如過江之鯽,其中大牛之作不在少數(shù),各類網(wǎng)課、在線教學(xué)更是層出不窮,似乎是有些不自量力了。不過最終還是鼓起勇氣決定寫寫試試,畢竟我也不是全無優(yōu)勢。剛剛邁過入門之坎的我,大概最能理解編程小白們?nèi)腴T時的茫然與困惑,而這也是一些大牛們的盲點所在,而且我剛剛當(dāng)完兩門編程課助教,正有些“一線教學(xué)體會”呢。因此也就寫寫,一方面幫助師弟師妹們學(xué)習(xí),另一方面則是我更大的私心:通過教別人,幫助自己更好的學(xué)習(xí)。哈哈,這大概是少數(shù)“邊學(xué)邊教”的“教程”了吧!使零基礎(chǔ)初學(xué)讀者迅速追上我的水平,并同我一起學(xué)習(xí)進步,就是本教程的最終目標(biāo)了。
目標(biāo)讀者
本教程旨在讓初學(xué)者對編程有所了解,并能夠用Python來解決日常生活中的一些問題,提高效率和找點樂子。在此之余,鑒于筆者的科研工作者背景,會順帶著講些數(shù)據(jù)處理的東西,乃至隨著我的興趣變化,學(xué)習(xí)一些新的東西說來分享。所以指望學(xué)Python來升職加薪,乃至有什么專業(yè)訴求的讀者,還是去看大牛們的教程,更加專業(yè)。(比如廖雪峰-Python教程)
另外如果你早有其他語言的編程功底,那也別看在我這浪費時間了,面向小白的教程難免啰嗦。
關(guān)于本教程的一些說明
上文已經(jīng)提到,筆者其實也只不過堪堪入門,如題所言,邊教邊學(xué),所以顯然并無能力獨立完成一份教程的框架構(gòu)建。本教程的主要框架和內(nèi)容取自Al Sweigart的Automate the Boring Stuff with Python一書,此外會結(jié)合本人在自學(xué)過程中用到的其他材料和經(jīng)驗做些修改。這本書是我看過的對初學(xué)者最友好的入門教程,文字內(nèi)容也很有意思(原版),我在做Python課助教時也一直向同學(xué)推薦來著。有中文版,覺得看書方便的同學(xué)可以買本支持一下。不過我推薦原版,中文版的翻譯在少數(shù)地方還是略有差錯,無傷大雅,但總歸是差了一籌,英文版的詞匯也很簡單,不難看懂。原版在這里Automate the Boring Stuff with Python,Al Sweigart先生慷慨的將本書的電子版以創(chuàng)作共用許可發(fā)布在了網(wǎng)上,使我們可以免費的閱讀、分享甚至編輯、修改后再發(fā)布。本教程也采用相同的許可。
PS : 按照原版的許可,是可以對其修改、轉(zhuǎn)換后再發(fā)布的,但這本書又有中文版在國內(nèi)賣,我不確定二者有無沖突,如有侵權(quán)請與我聯(lián)系。
啥是編程
往前推個十幾年,編程這事對很多人來說好像還帶著點神秘色彩,好像是一件牛逼的不得了的事,近幾年隨著Python等高級語言的流行,編程早已不再那么高深莫測,但影視作品中動不動刷刷刷一屏0和1,還是能把小白唬的一愣一愣的(更嚇人的是主角們能從這一堆的0和1中直接看出信息來)。其實編程沒那么復(fù)雜,本質(zhì)就是給計算機下達指令,讓它們干這個干那個。常用的幾句話,翻譯成中文就是:
- “把這個干了,再把那個也干了。”
- “如果這個這樣,你就這樣做,否則,那樣做。”
- “那這件事給我干多少多少次。”
- “一直干這個,直到那個什么什么完成。”
嗯,寫完這段,突然發(fā)現(xiàn)我媽就是個偉大的程序員。
再看段更實際些的Python代碼:
passwordFile = open('SecretPasswordFile.txt')# 打開密碼文件
secretPassword = passwordFile.read()# 從密碼文件中讀取密碼
print('Enter your password.')# 顯示“請輸入密碼”
typedPassword = input()# 讀取用戶輸入的密碼
if typedPassword == secretPassword:# 如果密碼一致
print('Access granted') #顯示 “驗證通過”
if typedPassword == '12345':# 如果密碼是12345
print('That password is one that an idiot puts on their luggage.')# 顯示“你si bu si sa”
else:# 否則
print('Access denied')# 顯示“驗證失敗”
其實如果你英文四級及格,我不注釋你也能明白這段代碼是干嘛的吧?不得不說在這方面老外比我們占便宜。
啥是Python
簡單點說就是一套語法規(guī)則和一個編譯器,編譯器就是把符合這套語法規(guī)則的代碼轉(zhuǎn)換成計算機能明白的指令的這么一個東西,類似于你和計算機之間的翻譯,每種語言都有自己的編譯器。Python這個單詞的意思是蟒蛇,但它的創(chuàng)造者取的并不是這個意思,而是他追的英劇的名字,具體參考維基,據(jù)說這門語言是為打發(fā)時間創(chuàng)造出來的orz。
數(shù)學(xué)?一點點就好
Al Sweigart說編程中用到的數(shù)學(xué)就好比解數(shù)獨。他還非常細致的講解了9*9數(shù)獨的解決思路,我就偷個懶,不細說了。總之需要的只是算法邏輯,對數(shù)學(xué)的要求并不高。當(dāng)然如果你要解決一些實際的問題,比如構(gòu)建物理模型,當(dāng)然會用到數(shù)學(xué),但那并不能算是編程的問題。
編程,關(guān)鍵是創(chuàng)造
編程就像搭積木,先搭個架子,再修修補補逐漸美化。那些條條塊塊都在你手中,能搭出個什么東西,就看你自己啦。縱然中間會出錯,甚至?xí)罎ⅲ蝗允强梢詷吩谄渲械囊患聠幔?/p>
下載和安裝Python
欸嘿嘿,我又來偷懶了,請戳:廖雪峰-安裝Python(這樣會不會本來就未必有多少的讀者也跑走了……不過沒關(guān)系,你覺得他的教程更適合你的話,那恭喜你找到了更適合自己教程~)
我就強調(diào)幾個注意事項并做一些補充:
- 要下載Python3,并且是最新版本的,這已經(jīng)是大勢所趨,入門就別再入Python2的門了;
- 看清自己是32位還是64位的系統(tǒng)。
- Windows: 開始→控制面板→系統(tǒng)
- OS X:About This Mac →More Info→ System report→Hardware
- Ubuntu Linux, 打開終端,輸入命令 uname -m
i686代表32位,x86_64代表64位。
- 補一下上文鏈接中沒有的ubuntu下的安裝方法:
- 打開終端
- 輸入 sudo apt-get install python3
- 輸入 sudo apt-get install idle3
- 輸入 sudo apt-get install python3-pip
其它linux發(fā)行版,你既然選擇了它,就真的應(yīng)該知道怎么用它裝Python了
運行IDLE
前面說過,編譯器是運行你的代碼的軟件,而IDLE也就是interactive development environment,即交互式開發(fā)環(huán)境,就是你你輸入代碼的地方了。Windows下打開開始菜單,輸入IDLE;Ubuntu里打開終端,運行idle3; Mac OS X則是在你的應(yīng)用里找IDLE,即可打開IDLE。
Shell
打開IDLE后你看到的情況應(yīng)該類似如此:
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
這個就是interactive shell了,直譯是交互式殼,感覺怪怪的,一般我們就叫它shell,不再翻譯了。它很像Ubuntu的終端和Windows里的命令提示符,在這里你可以輸入命令讓Python去執(zhí)行,立刻就會看到結(jié)果。
試一下這句
>>> print('Hello world!')
如何尋求幫助
注意!這里要畫重點!在我當(dāng)助教的兩門編程語言課程中,部分學(xué)生在遇到問題后的表現(xiàn)實在是有些呆,基本報錯就懵逼,但平心而論,Python的錯誤提示信息確實寫的相當(dāng)明白了。看下面這個例子:
>>> '42' + 3
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'42' + 3
TypeError: Can't convert 'int' object to str implicitly
如果你的英語比較好(這一點外國人真的占便宜),你就可以直接讀懂報錯的含義。注意 line 1告訴的是你出錯的位置,TypeError說的是錯誤類型,具體是無法將int(整型,也就是整數(shù),integer,數(shù)據(jù)類型以后會講)轉(zhuǎn)化為str(字符串,string),也就是說字符串“42”不能和整數(shù)3直接相加。
如果你英語不夠好,也沒關(guān)系,將"TypeError: Can't convert 'int' object to str implicitly"這一句,復(fù)制粘貼到百度(能上谷歌更好,但要求翻墻和英文),你會看到一堆人問過類似的問題。你要記住,你碰到的問題往往有很多人也遇到過,要善于學(xué)習(xí)前人經(jīng)驗,互聯(lián)網(wǎng)不就是干這個的嗎?
學(xué)會提問
如果搜索引擎還解決不了你的問題,也不要慌,Python有很多用戶社區(qū),有許多樂于助人的Pythoner愿意互相幫助。這里我只推薦一個Stack Overlow。它幫助我解決了無數(shù)在使用Python中遇到的問題,而且,我還一個問題都沒有自己提過,全都是別人遇到過的。不過這又是個英文網(wǎng)站,除了看懂需要一點詞匯量外,要準確描述并搜索你的問題,也對英語水平略有要求,但是這是值得的。你想想,英語社區(qū)是全球Python用戶在使用和交流,而中文則只有國內(nèi),你覺得在哪里更有可能找到問題的答案?學(xué)編程順便把英語也學(xué)了,多好,哈哈。
但是如果你要提問,一定要學(xué)會提問。就我經(jīng)歷過的,就有很多扎心的問題,有時甚至讓人有些惱火。報錯以后,不檢查代碼張嘴就問,結(jié)果是自己寫錯了一個字母,漏了一個括號;還有連報錯信息都不給我,把代碼截個圖就問我哪錯了,當(dāng)我是人肉編譯器???
當(dāng)你要提問時,記住以下幾點:
- 解釋你想做什么,而不要只說你做了什么。這樣懂行的往往一眼就能看出你是不是走錯了方向。
- 明確發(fā)生錯誤的時刻。錯誤是一直就有還是在你進行了某一操作之后?
- 將你的代碼和報錯信息完整的展示出來
- 說明你為解決這個問題都做了哪些努力。一方面為幫助者排除一些可能,另一方面,也顯示出你自己努力過了,不是一個伸手黨。
- 說明你的Python版本和操作系統(tǒng)機器版本。
- 如果錯誤出現(xiàn)在你修改了你的代碼后,說明你做了什么修改。
- 說明你是否能夠每次復(fù)現(xiàn)你的錯誤。是每次運行程序都報錯,還是只有進行某些操作后報錯?是的話,是哪些操作?
大概就是這個思路,總之,注意網(wǎng)絡(luò)禮節(jié),不要當(dāng)伸手黨。
結(jié)語
最后直接引用Al Sweigart的一段話作為結(jié)語吧:
For most people, their computer is just an appliance instead of a tool. But by learning how to program, you’ll gain access to one of the most powerful tools of the modern world, and you’ll have fun along the way. Programming isn’t brain surgery—it’s fine for amateurs to experiment and make mistakes.
中文版:想要吃雞?蟒就行了!