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