本書采用簡(jiǎn)單直白的語(yǔ)言、生動(dòng)的比喻,循循善誘、深入淺出地介紹了Python的基本知識(shí)和有關(guān)應(yīng)用方式。第1~第8章介紹了Python的基礎(chǔ)知識(shí),內(nèi)容包括Python簡(jiǎn)介、Python的下載與安裝、Python自帶開發(fā)工具IDLE的使用、編程有關(guān)專業(yè)詞匯和概念、Python中的基本數(shù)據(jù)類型、Python中的流程控制、Python的函數(shù)與模塊;第9~第16章介紹了編程的進(jìn)階知識(shí),內(nèi)容包括面向?qū)ο缶幊、文件操作、?shù)據(jù)庫(kù)操作、錯(cuò)誤與異常處理、測(cè)試與調(diào)試、GUI圖形界面編程、并發(fā)編程、網(wǎng)絡(luò)編程等;第17~第20章通過(guò)4個(gè)綜合案例講解Python的實(shí)戰(zhàn)應(yīng)用;第21章介紹了專業(yè)開發(fā)環(huán)境Pycharm的使用。
專為零基礎(chǔ)入門讀者打造,中學(xué)生、文科生也能輕松掌握
語(yǔ)言通俗幽默,案例貼近生活,努力貼在地上“接地氣”
附贈(zèng)23小時(shí)語(yǔ)音教學(xué)視頻和大量案例代碼資源,作者“在線等”答疑
前 言
年輕人是幸運(yùn)的,一出生就有很多先進(jìn)的技術(shù)和產(chǎn)品可以使用。然而筆者年齡稍大,所以幾乎完整經(jīng)歷了國(guó)內(nèi)互聯(lián)網(wǎng)技術(shù)的發(fā)展變革,當(dāng)然這也是一種財(cái)富,比如筆者在中學(xué)時(shí)代還要靠調(diào)制解調(diào)器撥號(hào)上網(wǎng),而如今都是百兆、千兆光纖寬帶上網(wǎng)。上大學(xué)時(shí)第一部手機(jī)還是只能打電話發(fā)短信的黑白小屏手機(jī),而如今我們用的都是4G、5G智能上網(wǎng)手機(jī),除了打電話發(fā)短信,還可以用手機(jī)上網(wǎng)、看電影、訂票、訂餐、直播等。社會(huì)日新月異,科技飛速發(fā)展,終于,人工智能的時(shí)代來(lái)臨了。近幾年,谷歌的人工智能圍棋程序AlphaGo接連戰(zhàn)勝了世界級(jí)圍棋冠軍李世石,又戰(zhàn)勝了當(dāng)今世界圍棋排名第一的柯潔,開啟了人工智能全面進(jìn)軍日常生活的大幕。
科技產(chǎn)品的更新迭代,本質(zhì)是技術(shù)的更新迭代。筆者還記得在中學(xué)時(shí)面對(duì)一個(gè)黑白屏電腦的DOS界面打字的情景,那時(shí)候我們學(xué)習(xí)的是BASIC語(yǔ)言,后來(lái)大學(xué)時(shí)用的是Windows98系統(tǒng),學(xué)習(xí)的是C語(yǔ)言。而如今,我們使用的都是功能多樣化、智能化的操作系統(tǒng),編程語(yǔ)言也經(jīng)歷了飛速的發(fā)展,比如Python已經(jīng)出現(xiàn)近20年了,主版本也已經(jīng)更新到3.7版本,功能越來(lái)越強(qiáng)大,應(yīng)用越來(lái)越廣泛,特別是在人工智能領(lǐng)域,Python更是如魚得水。比如我們前面提到的AlphaGo,也用到了Python的有關(guān)技術(shù)。當(dāng)然,Python的用途還不止于人工智能,在大數(shù)據(jù)、云計(jì)算等方面也有廣泛應(yīng)用。而人工智能、區(qū)塊鏈,這些名詞在如今的媒體上經(jīng)常見到,即使你學(xué)習(xí)的不是理工專業(yè),做的不是技術(shù)類工作,想必對(duì)這些詞匯也耳熟能詳。
如今我們國(guó)家非常重視人工智能等技術(shù)的發(fā)展,在國(guó)家級(jí)的會(huì)議上也多次提到要大力發(fā)展人工智能技術(shù)、區(qū)塊鏈技術(shù),希望在世界互聯(lián)網(wǎng)競(jìng)爭(zhēng)新賽道上占據(jù)有利位置。而Python正是人工智能時(shí)代主流的語(yǔ)言,甚至在中小學(xué),已經(jīng)將Python列入計(jì)算機(jī)課程的范圍。如果你稍加留意也會(huì)發(fā)現(xiàn),如今在各類編程語(yǔ)言排行榜上,Python也常常出現(xiàn)在第一名的位置上,市場(chǎng)份額也逐年提升;蛟S也正因?yàn)槿绱耍氵x擇要學(xué)習(xí)Python編程。畢竟,就連五十多歲的某房地產(chǎn)大佬也在微博上宣稱:“今天開始我學(xué)習(xí)一門新的語(yǔ)言Python,我在尋找。這也是今天給自己人生的禮物。 ”足見Python的魅力。
當(dāng)然,學(xué)習(xí)編程并不是一蹴而就的,尤其是對(duì)于零基礎(chǔ)的人來(lái)說(shuō)。不過(guò)好在Python本身就是一門門檻較低的編程語(yǔ)言,非常適合零基礎(chǔ)的朋友作為入門語(yǔ)言,而且Python的功能也非常強(qiáng)大。不過(guò)即便如此,學(xué)習(xí)這門技術(shù)也需要有一個(gè)科學(xué)、系統(tǒng)的指引。本書是一本非常適合初學(xué)者學(xué)習(xí)參考的書籍。筆者將近年來(lái)對(duì)于Python的學(xué)習(xí)和研究進(jìn)行了總結(jié),并回顧多年來(lái)自己對(duì)于各種新技術(shù)和其他幾種編程語(yǔ)言的學(xué)習(xí)過(guò)程,結(jié)合自身的編程工作經(jīng)驗(yàn),編寫了本書,并配套制作了教學(xué)視頻(大家可以通過(guò)關(guān)注筆者的微信公眾號(hào)“春天杰作”并回復(fù)關(guān)鍵字“Python”獲取下載地址)。本書內(nèi)容不但有編程知識(shí),而且有學(xué)習(xí)方法,再加上通俗易懂的表述,相信一定能夠?yàn)槟愕腜ython之路助一臂之力。
限于水平和篇幅,本書仍有不足之處,敬請(qǐng)諒解。在這個(gè)即時(shí)互動(dòng)的時(shí)代,筆者也愿意通過(guò)網(wǎng)絡(luò)為讀者解答各類問(wèn)題。讀者朋友可以關(guān)注筆者運(yùn)營(yíng)的Python自媒體微博(@Python)獲取更多學(xué)習(xí)資料,或者通過(guò)筆者個(gè)人微博(@春天杰作)個(gè)人微信公眾號(hào)(“春天杰作”)與筆者聯(lián)系。愿我們成為朋友。
最后,趕緊開始吧!
作者
2020年4月
王春杰,技術(shù)博主(微博@Python),網(wǎng)絡(luò)作家(筆名“春天杰作”),微博簽約自媒體人。擁有十余年Web開發(fā)、網(wǎng)絡(luò)推廣等互聯(lián)網(wǎng)行業(yè)經(jīng)驗(yàn),熟悉Python、C、PHP等編程語(yǔ)言技術(shù)。曾在教育培訓(xùn)機(jī)構(gòu)工作多年,目前創(chuàng)業(yè)中,主要從事網(wǎng)絡(luò)與軟件開發(fā)、自媒體運(yùn)營(yíng),以及Python編程技術(shù)的推廣和培訓(xùn)等工作。
目 錄
第1章 人生苦短,我用Python!——Python簡(jiǎn)介
1.1 英明的決定 1
1.2 做一點(diǎn)準(zhǔn)備 7
1.2.1 安裝Python就這么簡(jiǎn)單 7
1.2.2 工欲善其事,IDLE 11
1.3 終于要開始寫代碼了,好嗨喲! 12
1.3.1 第一個(gè)Python程序:Hello world! 13
1.3.2 舉一反三:隨便Hello點(diǎn)啥 15
第2章 熱身運(yùn)動(dòng)——了解一些基本概念
2.1 來(lái)點(diǎn)兒變化:變量 17
2.1.1 變量的賦值與使用 18
2.1.2 變量命名規(guī)則 20
2.1.3 Python中的變量只是一個(gè)標(biāo)簽 21
2.2 互動(dòng)起來(lái):輸出與輸入 23
2.2.1 內(nèi)置函數(shù)簡(jiǎn)介 23
2.2.2 輸出print() 24
2.2.3 輸入input() 26
2.3 無(wú)規(guī)矩不成方圓:注釋與編碼規(guī)則 27
2.3.1 注釋 27
2.3.2 縮進(jìn)與空行 31
2.3.3 參考PEP8 32
2.4 物以類聚:Python數(shù)據(jù)類型簡(jiǎn)介 34
2.4.1 六種基本數(shù)據(jù)類型簡(jiǎn)介 34
2.4.2 數(shù)據(jù)類型的判斷 35
2.4.3 容器、序列、迭代、可迭代對(duì)象 36
2.4.4 布爾值 37
第3章 數(shù)字和數(shù)學(xué)并不可怕——數(shù)據(jù)類型之?dāng)?shù)字
3.1 數(shù)字雖多,不過(guò)三類 39
3.1.1 整數(shù) 39
3.1.2 浮點(diǎn)數(shù) 41
3.1.3 復(fù)數(shù) 41
3.1.4 eval()函數(shù)與exec()函數(shù) 42
3.1.5 進(jìn)制與進(jìn)制轉(zhuǎn)換 43
3.2 小學(xué)數(shù)學(xué)都學(xué)過(guò)——運(yùn)算符與表達(dá)式 44
3.2.1 算數(shù)運(yùn)算符 45
3.2.2 比較運(yùn)算符 46
3.2.3 賦值運(yùn)算符 47
3.2.4 邏輯運(yùn)算符 48
3.2.5 各種運(yùn)算符的混合使用與優(yōu)先級(jí) 48
3.3 再也不用怕數(shù)學(xué)了:數(shù)學(xué)函數(shù)與math模塊 49
3.3.1 數(shù)學(xué)函數(shù) 49
3.3.2 math模塊 50
3.3.3 random模塊 53
3.3.4 案例:做一個(gè)機(jī)選彩票的程序 54
第4章 字符串也是一種“串兒”——數(shù)據(jù)類型之字符串
4.1 字符串是一種什么串兒? 55
4.1.1 字符串的三種形式 55
4.1.2 字符串的索引 58
4.1.3 字符串的判斷 59
4.1.4 轉(zhuǎn)義字符與原始字符串 60
4.2 字符串的N種“食用方法” 62
4.2.1 字符串的切片 62
4.2.2 字符串的運(yùn)算 64
4.2.3 處理字符串的有關(guān)函數(shù) 67
4.2.4 字符串的有關(guān)方法 68
4.2.5 字符串的格式化輸出 71
4.3 正則表達(dá)式 71
4.3.1 正則表達(dá)式基礎(chǔ) 72
4.3.2 正則表達(dá)式的應(yīng)用 73
4.3.3 re模塊 75
4.3.4 案例:驗(yàn)證手機(jī)號(hào)是否合法 77
第5章 讓程序更聽話——流程控制與if分支
5.1 送你一根指揮棒:流程控制簡(jiǎn)介 78
5.2 隨機(jī)應(yīng)變:if分支 80
5.2.1 if分支的幾種結(jié)構(gòu) 80
5.2.2 if結(jié)構(gòu)的嵌套 84
5.2.3 多個(gè)if與多個(gè)elif的區(qū)別 86
5.2.4 pass語(yǔ)句 87
第6章 一句頂一萬(wàn)句——循環(huán)
6.1 初學(xué)編程我寫了一萬(wàn)行代碼,后來(lái)我學(xué)會(huì)了用循環(huán) 90
6.1.1 for循環(huán)結(jié)構(gòu) 90
6.1.2 range()函數(shù) 92
6.1.3 break與continue 93
6.1.4 使用for循環(huán)遍歷列表和字典 94
6.1.5 for循環(huán)嵌套 94
6.2 更“聰明”的while循環(huán) 95
6.2.1 while循環(huán)結(jié)構(gòu) 95
6.2.2 while循環(huán)與else配合使用 97
6.2.3 在while循環(huán)中使用break 98
6.2.4 在while循環(huán)中使用continue 98
6.2.5 小心死循環(huán) 99
6.2.6 while循環(huán)嵌套 100
6.2.7 用while循環(huán)實(shí)現(xiàn)一個(gè)猜數(shù)字游戲 101
6.2.8 while循環(huán)和for循環(huán)混合使用 102
6.2.9 while循環(huán)與for循環(huán)之比較 103
第7章 我們也是有組織的——列表、元組、集合、字典
7.1 列車就是一列車,列表就是一列表 104
7.1.1 創(chuàng)建列表 104
7.1.2 列表的索引 105
7.1.3 列表的切片 105
7.1.4 列表的遍歷 106
7.1.5 列表元素的修改、插入與刪除 106
7.1.6 列表的復(fù)制 107
7.1.7 列表元素的判斷 108
7.1.8 列表的嵌套 109
7.1.9 二維列表的遍歷 110
7.1.10 列表的運(yùn)算 110
7.1.11 操作列表的有關(guān)函數(shù) 111
7.1.12 列表的有關(guān)方法 112
7.1.13 列表解析式與生成器表達(dá)式 114
7.2 比列表“頑固”的元組 115
7.2.1 元組的創(chuàng)建 116
7.2.2 元組的索引、切片、刪除、復(fù)制、遍歷 116
7.2.3 元組的運(yùn)算與判斷 117
7.2.4 操作元組的有關(guān)函數(shù) 118
7.2.5 元組的有關(guān)方法 119
7.2.6 二維元組 120
7.3 字典,就像你用過(guò)的字典 120
7.3.1 字典的創(chuàng)建 121
7.3.2 字典元素的訪問(wèn) 121
7.3.3 字典元素的修改、添加與刪除 122
7.3.4 字典的遍歷 123
7.3.5 字典的嵌套與二維字典 124
7.3.6 操作字典的有關(guān)函數(shù) 125
7.3.7 字典的有關(guān)方法 126
7.3.8 深復(fù)制與淺復(fù)制 127
7.3.9 用字典實(shí)現(xiàn)多重分支 128
7.4 集合:搞搞關(guān)系 129
7.4.1 集合的創(chuàng)建 129
7.4.2 集合的遍歷、判斷與刪除 129
7.4.3 集合的關(guān)系判斷和運(yùn)算 130
7.4.4 操作集合的有關(guān)函數(shù) 131
7.4.5 集合的有關(guān)方法 132
第8章 掌握核心科技——函數(shù)與模塊
8.1 自制工具:自定義函數(shù) 135
8.1.1 函數(shù)的定義與調(diào)用 135
8.1.2 形參、實(shí)參、位置參數(shù)、關(guān)鍵字參數(shù) 136
8.1.3 參數(shù)的默認(rèn)值 137
8.1.4 傳遞多個(gè)參數(shù) 138
8.1.5 傳遞列表或字典作為參數(shù) 139
8.1.6 函數(shù)的返回值 140
8.1.7 用函數(shù)實(shí)現(xiàn)一個(gè)猜數(shù)字游戲 140
8.1.8 變量的作用域 141
8.1.9 函數(shù)的嵌套 142
8.1.10 遞歸函數(shù) 143
8.1.11 匿名函數(shù):lambda表達(dá)式 145
8.1.12 高階函數(shù):map()、filter() 145
8.1.13 閉包 146
8.1.14 裝飾器 147
8.2 工具箱:模塊 149
8.2.1 將自定義函數(shù)存儲(chǔ)為模塊 149
8.2.2 模塊的導(dǎo)入與使用 150
8.2.3 if__name__==\"__main__\": 152
第9章 單身狗的渴望——面向?qū)ο缶幊?
9.1 物以類聚,人以群分 154
9.1.1 創(chuàng)建一個(gè)類 154
9.1.2 實(shí)例化一個(gè)對(duì)象 156
9.1.3 訪問(wèn)、修改類和對(duì)象的屬性與方法 157
9.1.4 封裝:私有屬性和私有方法 159
9.1.5 繼承:祖?zhèn)髅胤?161
9.1.6 多繼承與多重繼承 163
9.1.7 多態(tài):各自表述 165
9.1.8 將類存儲(chǔ)為模塊 166
9.1.9 類模塊的使用 167
9.2 模塊、包、庫(kù),傻傻分不清楚? 167
9.2.1 包的創(chuàng)建與使用 167
9.2.2 模塊、包、庫(kù)的區(qū)別 168
9.2.3 Python標(biāo)準(zhǔn)庫(kù) 169
9.3 給各種包找個(gè)管家:pip 169
9.3.1 pip的使用環(huán)境 169
9.3.2 包的安裝與升級(jí) 170
9.3.3 包的查詢與卸載 171
第10章 讓鼠標(biāo)休息一會(huì)兒——文件操作
10.1 文件讀寫 173
10.1.1 文件的打開、讀取與關(guān)閉 173
10.1.2 文件的逐行讀取與部分讀取 174
10.1.3 查看指針位置與修改指針位置 176
10.1.4 寫入文件內(nèi)容 177
10.2 os模塊 178
10.2.1 目錄操作 179
10.2.2 文件操作 180
10.2.3 Linux系統(tǒng)下的權(quán)限操作 183
10.3 shutil模塊 183
第11章 讓我們一起囤積數(shù)據(jù)吧——數(shù)據(jù)庫(kù)操作
11.1 數(shù)據(jù)庫(kù) 187
11.1.1 數(shù)據(jù)庫(kù)簡(jiǎn)介 187
11.1.2 SQL語(yǔ)句簡(jiǎn)介 189
11.1.3 DB-API簡(jiǎn)介 191
11.2 Python操作SQLite數(shù)據(jù)庫(kù) 194
11.2.1 sqlite3模塊的使用 194
11.2.2 數(shù)據(jù)表的創(chuàng)建、改名與數(shù)據(jù)的添加 195
11.2.3 數(shù)據(jù)的查詢、修改與刪除 197
11.2.4 查看表信息與刪除表 199
11.3 Python操作MySQL數(shù)據(jù)庫(kù) 202
11.3.1 下載安裝MySQL 202
11.3.2 使用mysql.connector模塊操作MySQL數(shù)據(jù)庫(kù) 211
第12章 人非圣賢,孰能無(wú)過(guò)——錯(cuò)誤與異常處理
12.1 錯(cuò)誤與異常 215
12.1.1 錯(cuò)誤與常見錯(cuò)誤 215
12.1.2 異常類 218
12.2 異常處理 220
12.2.1 異常的獲取與處理 221
12.2.2 使用raise語(yǔ)句自主拋出異常 223
12.2.3 使用自定義異常類 224
第13章 是騾子是馬拉出來(lái)遛遛——調(diào)試與測(cè)試
13.1 調(diào)試 226
13.1.1 簡(jiǎn)單的調(diào)試方法 226
13.1.2 IDLE自帶調(diào)試工具的使用 228
13.2 測(cè)試 233
13.2.1 單元測(cè)試與測(cè)試用例 233
13.2.2 unittest模塊的使用 234
第14章 程序也要面子——GUI編程
14.1 GUI簡(jiǎn)介 237
14.2 Python內(nèi)置GUI模塊:Tkinter 238
14.2.1 使用Tkinter模塊創(chuàng)建一個(gè)界面程序 238
14.2.2 窗口、控件、事件、事件處理函數(shù) 239
14.2.3 控件布局方式 248
14.3 案例:圖形版猜數(shù)字游戲 255
第15章 人多力量大——并發(fā)編程
15.1 進(jìn)程與線程 257
15.1.1 并發(fā)與并行 257
15.1.2 多進(jìn)程與多線程 258
15.1.3 同步、異步、阻塞、非阻塞 259
15.2 多進(jìn)程的使用 260
15.2.1 創(chuàng)建和調(diào)用子進(jìn)程 261
15.2.2 通過(guò)繼承Process類來(lái)創(chuàng)建多個(gè)進(jìn)程 263
15.2.3 通過(guò)進(jìn)程池Pool來(lái)創(chuàng)建多進(jìn)程 263
15.2.4 進(jìn)程間通信 265
15.3 多線程的使用 266
15.3.1 使用treading模塊創(chuàng)建多線程 266
15.3.2 通過(guò)實(shí)例化Thread類來(lái)創(chuàng)建線程 267
15.3.3 線程池 267
15.3.4 線程間通信 268
15.3.5 線程安全 269
第16章 三天打魚 天天上網(wǎng)——網(wǎng)絡(luò)編程
16.1 網(wǎng)絡(luò)基礎(chǔ) 270
16.1.1 網(wǎng)絡(luò)的硬件基礎(chǔ) 270
16.1.2 網(wǎng)絡(luò)模型 271
16.1.3 網(wǎng)絡(luò)協(xié)議 272
16.1.4 域名、DNS、URL 273
16.1.5 客戶端與服務(wù)器 274
16.1.6 Socket與socket模塊 274
16.2 Web入門 276
16.2.1 超文本與超鏈接 276
16.2.2 超文本標(biāo)記語(yǔ)言:HTML 277
16.2.3 HTTP請(qǐng)求 280
16.3 網(wǎng)絡(luò)模塊:urllib 281
16.3.1 request模塊 281
16.3.2 error模塊 283
16.3.3 parse模塊 284
16.3.4 robotparser模塊 285
第17章 實(shí)戰(zhàn)項(xiàng)目一:讓Python當(dāng)你的工作助手
17.1 批量處理圖片 287
17.1.1 pillow庫(kù)簡(jiǎn)介 287
17.1.2 案例:批量調(diào)整圖片大小 290
17.2 讀寫Word文檔 293
17.2.1 python-docx庫(kù)簡(jiǎn)介 293
17.2.2 文檔寫入操作 294
17.2.3 文檔合并操作 297
17.3 處理Excel 299
17.3.1 openpyxl庫(kù) 299
17.3.2 操作Excel表格 300
第18章 實(shí)戰(zhàn)項(xiàng)目二:這個(gè)蟲子有點(diǎn)牛——網(wǎng)絡(luò)爬蟲開發(fā)
18.1 網(wǎng)絡(luò)爬蟲簡(jiǎn)介 303
18.1.1 網(wǎng)絡(luò)爬蟲基本原理 303
18.1.2 網(wǎng)絡(luò)爬蟲的“規(guī)矩”——Robots協(xié)議 304
18.2 requests庫(kù) 305
18.2.1 requests庫(kù)的常用方法 306
18.2.2 用requests庫(kù)爬取一個(gè)簡(jiǎn)單網(wǎng)頁(yè) 307
18.3實(shí)戰(zhàn):爬取百度圖片 310
第19章 實(shí)戰(zhàn)項(xiàng)目三:你的游戲你做主——小游戲開發(fā)
19.1 Pygame庫(kù) 318
19.1.1 Pygame庫(kù)簡(jiǎn)介 318
19.1.2 Display模塊 321
19.1.3 Surface模塊 322
19.1.4 圖形對(duì)象的常用方法 326
19.2 案例:制作一個(gè)貪吃蛇游戲 327
第20章 實(shí)戰(zhàn)項(xiàng)目四:確認(rèn)過(guò)眼神,我遇見對(duì)的人——AI人臉識(shí)別
20.1 人工智能簡(jiǎn)介 334
20.2 開放平臺(tái)與API接口 336
20.3 案例:一個(gè)人臉識(shí)別與打分項(xiàng)目——Python看臉 340
20.3.1 Access Token 340
20.3.2 Base64編碼 341
20.3.3 json數(shù)據(jù)格式 344
20.3.4 案例:Python看臉 345
第21章 工欲善其事,換個(gè)IDE?——PyCharm
21.1 PyCharm 349
21.1.1 PyCharm下載與安裝 349
21.1.2 第一次使用PyCharm 354
21.2 用PyCharm寫一個(gè)聊天程序 363