目錄
- 前言
- 練習(xí)0 環(huán)境配置
- 練習(xí)1 一個好開端
- 練習(xí)2 注釋和字符
- 練習(xí)3 數(shù)字和數(shù)學(xué)
- 練習(xí)4 變量和名稱
- 練習(xí)5 更多變量和打印
- 練習(xí)6 字符串和文本
- 練習(xí)7 更多打印
- 練習(xí)8 打印打印
- 練習(xí)9 打印打印打印
- 練習(xí)10 那是什么?
- 練習(xí)11 問問題
- 練習(xí)12 提醒人們
- 練習(xí)13 參數(shù),解包,變量
- 練習(xí)14 prompt 和 pass
- 練習(xí)15 讀取文件
- 練習(xí)16 讀寫文件
- 練習(xí)17 更多文件
- 練習(xí)18 名稱/變量/代碼/函數(shù)
- 練習(xí)19 函數(shù)和變量
- 練習(xí)20 函數(shù)和文件
- 練習(xí)21 函數(shù)可以返回結(jié)果
- 練習(xí)22 目前為止你學(xué)到了什么?
- 練習(xí)23 字符串,字節(jié), 字符編碼
- 練習(xí)24 更多練習(xí)
- 練習(xí)25 更多更多練習(xí)
- 練習(xí)26 恭喜你,做個測試吧!
- 練習(xí)27 記憶邏輯
- 練習(xí)28 布爾值練習(xí)
- 練習(xí)29 What if
- 練習(xí)30 else 和 if
- 練習(xí)31 做決策
- 練習(xí)32 循環(huán)和列表
- 練習(xí)33 while 循環(huán)
- 練習(xí)34 獲取列表元素
- 練習(xí)35 分支和函數(shù)
- 練習(xí)36 設(shè)計(jì)和調(diào)試
- 練習(xí)37 復(fù)習(xí)各種符號
- 練習(xí)38 列表操作
- 練習(xí)39 字典,可愛的字典
- 練習(xí)40 模塊,類和對象
- 練習(xí)41 學(xué)習(xí)面向?qū)ο笳f話
- 練習(xí)42 Is-A,Has-A,對象和類
- 練習(xí)43 面向?qū)ο蟮姆治龊驮O(shè)計(jì)基礎(chǔ)
- 練習(xí)44 繼承和組合
- 練習(xí)45 你來做一個游戲
- 練習(xí)46 一個項(xiàng)目骨架
- 練習(xí)47 自動化測試
- 練習(xí)48 更復(fù)雜的用戶輸入
- 練習(xí)49 創(chuàng)建句子
- 練習(xí)50 你的第一個網(wǎng)站
- 練習(xí)51 從瀏覽器獲取輸入
- 練習(xí)52 創(chuàng)建你的 web 游戲
- 練習(xí)53 接下來的步驟
- 練習(xí)54 來自老程序員的建議
- 附錄A 命令行速成
前言
這本簡單的小書是為了讓你開始編程。雖然書名說是“笨辦法”,但其實(shí)不然。所謂“笨辦法”只是本書教授的方法,也就是按照我的要求重復(fù)做一系列的練習(xí)來構(gòu)建你的技能。這種方法對于零基礎(chǔ)想要掌握基本編程技能的人來說非常有效,它幾乎被用于所有的學(xué)習(xí),從武術(shù)、音樂,到基礎(chǔ)數(shù)學(xué)和閱讀技巧。
這本書指導(dǎo)你通過練習(xí)和記憶逐漸建立起 Python 的使用技巧,然后用在更復(fù)雜的問題上。學(xué)完本書,你將會擁有開始學(xué)習(xí)更復(fù)雜編程所需的工具。我很喜歡告訴別人,我的書可以讓你擁有“編程黑帶”,也就是你已經(jīng)掌握要開始學(xué)習(xí)編程的最基本的知識。
如果你肯努力,肯花時間來建立起這些技巧,你將可以正式學(xué)習(xí)編程。
第四版更新
《笨辦法學(xué) Python》第四版用了 Python 3.6。Python 3.6 升級了字符串格式系統(tǒng),相比于之前的 4 或者 4 更好用,雖然對于初學(xué)者來說,學(xué)習(xí) Python 3.6 會有很多問題,一個很明顯的問題就是它的報(bào)錯信息非常少,但是我將會幫助你理解從而解決這些問題。
同時,我也根據(jù)我過去五年來教授 Python 的經(jīng)驗(yàn),更新了視頻課程。過去的視頻只是簡單地讓你看著我做練習(xí),而第四版加入了打亂再重新修復(fù)的練習(xí),這個技巧叫做“調(diào)試”(debuging),它將會叫你如何修復(fù)你遇到的問題以及 Python 是如何運(yùn)行你創(chuàng)建的程序。這個新方法的目標(biāo)就是建立一種關(guān)于 Python 如何運(yùn)行代碼的思維模式,從而能夠更容易看出來哪里出了問題。此外,你還會學(xué)到很多有用的調(diào)試錯誤程序的有用技巧。
最后,第四版從頭到尾完全支持 Windows 10,以前版本更多地專注于基于 Unix 的系統(tǒng)比如 MacOS 和 Linux。而當(dāng)我開始寫第四版的時候微軟已經(jīng)開始認(rèn)真對待開源工具和開發(fā)者,因?yàn)樽鳛橐粋€嚴(yán)肅的 Python 開發(fā)平臺,真的很難忽略他們。視頻教程將著重講解 Windows 系統(tǒng)下 Python 的使用,當(dāng)然也會展示 MacOS 和 Linux 系統(tǒng)下的操作。我將會告訴你每個平臺的安裝教程以及其他相關(guān)的技巧。
致謝
我想感謝 Angela 在這本書的前兩版中對我的幫助,沒有她我可能很難完成。她做了第一版的復(fù)制編輯工作,并且在我寫作的過程中給我提供了極大的支持。
我同樣要感謝 Greg Newman 為我設(shè)計(jì)封面,Brian Shumate 所做的網(wǎng)站設(shè)計(jì),以及所有讀過這本書并花時間給我反饋和更正意見的讀者。
謝謝你們。
笨辦法更簡單
在這本書的幫助下,你將會做所有程序員學(xué)習(xí)一門編程語言都會做的非常簡單的事情:
1. 做好每一個練習(xí);
2. 準(zhǔn)確敲好每一個程序;
3. 讓它運(yùn)行。
就是這樣。剛開始可能會比較難,但堅(jiān)持下去。如果你通讀了這本書,每晚花個一兩小時做做習(xí)題,你將能夠?yàn)樽约鹤x下一本編程書打下良好的基礎(chǔ)。這本書不會讓你一夜之間變成程序員,但是它將會帶你走上學(xué)習(xí)如何編程的道路。
這本書的目的是教會你作為編程新手所需的三種最重要的技能:讀和寫、注重細(xì)節(jié)、發(fā)現(xiàn)不同。
一、讀和寫
如果你連打字都不行,那你學(xué)習(xí)編程也會成問題。尤其如果你連程序源代碼中的那些奇怪字符都打不出來,就別提編程了。沒有這些基本技能,你將連最基本的軟件工作原理都難以學(xué)會。
所以,把代碼示例打出來并運(yùn)行,能夠幫助你學(xué)習(xí)各種符號的名稱、更熟練地敲出來、以及讀懂編程語言。
二、注意細(xì)節(jié)
區(qū)分好程序員和差程序員的一個重要標(biāo)準(zhǔn),就是對細(xì)節(jié)的注重程度,事實(shí)上,這也是任何行業(yè)區(qū)分好壞的標(biāo)準(zhǔn)。如果缺乏對工作中每個微小細(xì)節(jié)的注意,你的工作成果將缺乏重要的元素。拿編程來講,主意細(xì)節(jié)將會讓你遠(yuǎn)離各種bug和難用的系統(tǒng)。
通過這本書的學(xué)習(xí),以及準(zhǔn)確打出每一個例子,你將能夠訓(xùn)練你的大腦,在做練習(xí)的時候更多地關(guān)注細(xì)節(jié)。
三、發(fā)現(xiàn)不同
程序員長年累月的工作會培養(yǎng)出一個重要技能,那就是對于不同點(diǎn)的區(qū)分能力。一個有經(jīng)驗(yàn)的程序員看到兩個僅有細(xì)微差別的程序,可以立即指出其中的不同。程序員還造出工具來讓這件事更加容易,不過我們不會用到這些工具。你要先用笨辦法訓(xùn)練自己,然后再用工具。
在你做這些練習(xí)并敲代碼的時候,你一定會出錯。這是不可避免的,即使有經(jīng)驗(yàn)的程序員也會偶爾寫錯。你的任務(wù)是把自己寫的東西和要求的正確答案對比,把所有的不同點(diǎn)都修正過來。這樣做可以讓你對程序里的錯誤、bug 以及其他問題更加敏感。
四、要問,不要盯著看
你只要寫代碼,就會出現(xiàn) bug。Bug 意味著你寫的代碼有瑕疵、有錯誤、或者有問題。Bug 來源于一個傳說,從前有一只飛蛾飛進(jìn)了第一臺計(jì)算機(jī),造成了故障。修復(fù)它就需要“debugging”。在軟件世界里,有著不計(jì)其數(shù)的 bug。
就像第一只飛蛾,你的 bugs 將會藏在你代碼的某處,你必須找到它們。你不能只是坐在電腦前盯著屏幕上的代碼,希望答案能自己跳出來。這樣做不會有額外的信息,你需要額外的信息來解決問題,所以你得起來尋找這只飛蛾。
怎么尋找呢?你需要審問你的代碼,問它現(xiàn)在是怎么回事兒,或者從另一個不同的視角去看待這個問題。在這本書里,我將會頻繁地告訴你“別盯著看,要問”。我將會向你演示如何讓你的代碼告訴你正在發(fā)生的一切,并且如何找到可能的解決方案。我還會教你一些從不同角度看代碼的方法,讓你能夠獲取更多信息和洞見。
五、不要復(fù)制粘貼
你必須手動將每個練習(xí)打出來。復(fù)制粘貼會讓這些練習(xí)變得毫無意義。這些習(xí)題的目的是訓(xùn)練你的雙手和大腦思維,讓你有能力讀代碼、寫代碼、觀察代碼。如果你復(fù)制粘貼,那你就是在欺騙自己,這些練習(xí)的效果也將大打折扣。
六、一個關(guān)于堅(jiān)持練習(xí)的忠告
在你通過這本書學(xué)習(xí)編程時,我正在學(xué)習(xí)彈吉他。我每天至少練習(xí) 2 個小時,至少花一個小時練習(xí)音階、和聲、和弦,剩下的時間用來學(xué)習(xí)音樂理論和歌曲演奏以及訓(xùn)練聽力等。有時我一天會花 8 個小時來練習(xí),因?yàn)槲矣X得這是一件有趣的事情。對我來說,重復(fù)性練習(xí)是學(xué)好一樣?xùn)|西最自然而然的方法。并且我深知,要掌握一件事情,只有每天堅(jiān)持練習(xí)。雖然有時候,我整個人狀態(tài)很差(甚至經(jīng)常這樣),或者覺得實(shí)在太難。沒關(guān)系,堅(jiān)持嘗試,到最后你會發(fā)現(xiàn)它越來越簡單,并且開始越來越有趣。
在我寫《笨辦法學(xué) Python》和《笨辦法學(xué) Ruby》的過程中,我發(fā)現(xiàn)了繪畫的樂趣。我在自己 39 歲的時候愛上了這門視覺藝術(shù),并且像學(xué)習(xí)吉他、音樂和編程一樣每天花時間學(xué)習(xí)畫畫。我收集了相關(guān)的教材,并且按照書中所說,每天堅(jiān)持畫,同時專注于享受這種學(xué)習(xí)過程的樂趣。我完全不是一個藝術(shù)家,甚至差得很遠(yuǎn),但我現(xiàn)在至少可以說我會畫畫了。我學(xué)習(xí)畫畫的方法就跟我在這本書里教你的一樣。如果你把整個問題分解為一個個小練習(xí)和課程,并且每天做,你就可以學(xué)會幾乎所有的東西。如果你專注于細(xì)微的進(jìn)步,并且享受學(xué)習(xí)過程,你將會從中獲益,無論你最后擅長到何種程度。
當(dāng)你通過這本書學(xué)習(xí)編程的時候,要記住任何值得做的事情一開始都是困難的。也許你是一個害怕失敗的人,一碰到困難就想放棄;也許你是一個缺乏自律的人,一碰到“無聊”的事情就不想上手;也許因?yàn)橛腥丝淠恪疤熨x異稟”而讓你自視甚高,不愿意做這些看上去很笨拙的事情,怕有負(fù)你”神童”的稱號;也許你太過激進(jìn),把自己跟有 20 多年經(jīng)驗(yàn)的編程老手相比,讓自己失去了信心。
無論是什么原因讓你想要放棄,你一定要堅(jiān)持下去。如果你碰到做不出來的課后練習(xí),或者碰到一節(jié)看不懂的練習(xí),你可以暫時跳過去,過一陣子回來再看。只要堅(jiān)持下去,你總會弄懂的,因?yàn)榫幊痰倪^程中總是會出現(xiàn)這樣的問題。
一開始你可能什么都看不懂。這會讓你感覺很不舒服,就像學(xué)習(xí)人類的自然語言一樣。你會發(fā)現(xiàn)很難記住一些單詞和特殊符號的用法,而且會經(jīng)常感到很困惑。但是突然有一天,你一下子變得豁然開朗,以前不明白的東西忽然就明白了。如果你堅(jiān)持練習(xí)下去,堅(jiān)持去上下求索,你最終會學(xué)會這些東西。你可能不會成為一位編程大師,但你至少會明白程序是怎么運(yùn)行的。
如果你放棄的話,你將永遠(yuǎn)達(dá)不到那種“豁然開朗”的時刻。你會在第一次碰到不明白的東西時(一開始就是所有東西)就選擇放棄。如果你堅(jiān)持嘗試,堅(jiān)持練習(xí)下去,堅(jiān)持去弄懂習(xí)題的話,你最終一定會明白其中的內(nèi)容。
如果你通讀了這本書,卻還是不知道怎么編程,那也沒關(guān)系,至少你試過了。你可以說你已經(jīng)盡過力但成效不佳,但至少你試過了。這也是一件值得你驕傲的事情。