Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)

江紅、余青松

  • 出版商: 清華大學
  • 出版日期: 2026-08-01
  • 售價: $390
  • 語言: 簡體中文
  • ISBN: 7302723508
  • ISBN-13: 9787302723509
  • 相關分類: Python
  • 下單後立即進貨 (約4週~6週)

  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-1
  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-2
  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-3
  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-4
  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-5
  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-6
  • Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-7
Python程序設計與算法基礎教程(項目實訓·題庫·微課視頻·AI賦能版)(第4版)-preview-1

商品描述

本書集教材、練習冊、上機指導、題庫於一體,基於Windows 10和Python 3.10構建Python開發平臺,闡述Python語言的基礎知識,以及使用Python語言的實際開發應用實例,具體內容包括Python程序設計導論,Python語言基礎,程序流程控制,常用內置數據類型,組合數據類型,輸入、輸出和文件,錯誤和異常處理,函數和函數式編程,面向對象的程序設計,模塊和模塊化程序設計,數據結構與算法基礎,圖形用戶界面,圖形繪制和數據可視化,數值日期和時間處理,字符串和文本處理,數據庫訪問,網絡編程和通信,並行計算,系統管理以及Python計算生態等。 本書編者結合多年的程序設計、系統開發以及授課經驗,由淺入深、循序漸進地介紹Python程序設計語言,讓讀者能夠較為系統全面地掌握程序設計的理論和應用。本書提供了近1000個實例、523道習題、600多個實踐操作任務、48個綜合應用案例及1100分鐘教學視頻。 本書可作為高等院校各專業的計算機程序設計教程,也可作為廣大程序設計開發者、愛好者的自學參考書。

目錄大綱

第1 章 Python 程序設計導論 … … 1

1 .1 程序設計語言 .… … … 1

1 .1 .1 計算機和程序 .… … 1

1 .1 .2 程序設計和編程語言 … … … 1

1 .1 .3 計算思維和程序設計方法 … … 2

1 .1 .4 程序的編寫和執行 .3

1 .2 Python 語言概述 .… … 3

1 .2.1 Python 語言簡介 .… 3

1 .2.2 Python 語言的特點 .3

1 .2.3 Python 語言的應用範圍 … … 4

1 .3 Python 語言版本和開發環境 … 4

1 .3 .1 Python 語言的版本 .4

1 .3 .2 Python 語言的實現 .5

1 .3 .3 Python 語言的集成開發環境 … 5

1 .3 .4 下載 Python .… … 6

1 .3 .5 安裝 Python .… … 6

1 .3 .6 安裝和管理 Python 擴展包 … 7

1 .4 使用 Python 解釋器解釋執行 Python 程序.… … 8

1 .4.1 運行 Python 解釋器 .8

1 .4.2 運行 Python 集成開發環境 ..… 9

1 .5 使用文本編輯器和命令行編寫和執行 Python 源文件程序 … 10

1 .5 .1 編寫輸出“Hello, World!”程序 ..… 11

1 .5 .2 運行 Python 源代碼程序… … 11

1 .5 .3 命令行參數 .… … 13

1 .6 使用集成開發環境(IDLE) 編寫和執行 Python 源文件程序 … 13

1 .6 .1 使用IDLE 編寫程序 … … … 13

1 .6 .2 使用IDLE 編輯和執行程序 ..… 14

1 .7 程序的打包和發布.… 14

1 .7 .1 安裝 PyInstaller .15

1 .7 .2 使用 PyInstaller 生成可執行程序 ..… 15

1 .8 在線幫助和相關資源.15

1 .8.1 Python 交互式幫助系統 … … 15

1 .8.2 Python 文檔 .… … 16

1 .8.3 Python 官網 .… … 18

1 .8.4 PEP ..… 18

1 .8.5 Python 擴展庫索引(PyPI) … 21

1 .9 上機實踐 ..21

1 .10 案例研究1 : 安裝和使用Python 科學計算環境Anaconda ..21

1 .11 案例研究2 : 安裝和使用PyCharm 開發環境 .21

1 .12 案例研究3 : 安裝和使用VSCode 開發環境 .22

1 .13 AI 輔助編程:Python 程序設計導論 ..22

第2 章 Python 語言基礎 .23

2 .1 Python 程序概述 .… 23

2.1 .1 引例 ..… 23

2.1 .2 Python 程序構成 .23

2 .2 Python 對象和引用 .24

2.2.1 Python 對象簡介 .24

2.2.2 字面量和對象的創建 … … … 24

2.2.3 創建對象的其他方法 … … … 25Ⅳ

2.2.4 數據類型 .… … … 25

2.2.5 變量和對象的引用 .26

2.2.6 Python 是動態類型語言 … … 26

2.2.7 Python 是強類型語言 … … … 27

2.2.8 對象內存示意圖.… 27

2.2.9 對象的值比較( = = ) 和引用判別(is) .… … … 28

2.2.10 不可變對象(immutable) 和可變對象(mutable) … … … 28

2 .3 標識符及其命名規則.29

2.3 .1 標識符 ..29

2.3 .2 保留關鍵字 .… … 29

2.3 .3 Python 預定義標識符 … … … 30

2.3 .4 命名規則 .… … … 30

2 .4 變量和賦值語句 .… 31

2.4.1 變量的聲明和賦值 .31

2.4.2 鏈式賦值語句 .… 31

2.4.3 復合賦值語句 .… 31

2.4.4 刪除變量 .… … … 32

2.4.5 序列解包賦值 .… 32

2.4.6 常量 ..… 33

2 .5 表達式和運算符 .… 33

2.5 .1 表達式的組成 .… 33

2.5 .2 表達式的書寫規則 .33

2.5 .3 運算符概述 .… … 34

2.5 .4 Python 運算符及其優先級 … 34

2 .6 語句 ..… … 35

2.6 .1 Python 語句 .… … 35

2.6 .2 Python 語句的書寫規則 … … 35

2.6 .3 復合語句及其縮進書寫規則 ..… 36

2.6 .4 註釋語句 .… … … 36

2.6 .5 空語句 ..37

2 .7 函數 ..… … 37

2.7 .1 函數的創建和調用 .37

2.7 .2 內置函數 .… … … 38

2.7 .3 模塊函數 .… … … 38

2.7 .4 函數 API .… … … 38

2 .8 類和對象 ..39

2.8.1 創建類對象 .… … 39

2.8.2 實例對象的創建和使用 … … 39

2 .9 模塊和包 ..40

2.9 .1 模塊和包的概念.… 40

2.9 .2 導入和使用模塊.… 40

2 .10 綜合應用: turtle 模塊和海龜繪圖 ..40

2.10.1 海龜繪圖概述 .… 40

2.10.2 繪制正方形 .… … 41

2.10.3 海龜繪圖應用實例 … … … 42

2 .11 上機實踐 ..42

2 .12 案例研究: 使用 Pillow 庫處理圖像文件 .… … 43

2 .13 AI 輔助編程: Python 語言基礎 ..… … 44

第3 章 程序流程控制 .… 45

3 .1 程序的流程 .… … … 45

3 .1 .1 輸入、 處理和輸出 .45

3 .1 .2 算法和數據結構.… 45

3 .1 .3 程序流程圖 .… … 46

3 .2 順序結構 ..47

3 .3 選擇結構 ..47

3 .3 .1 分支結構的形式.… 48

3 .3 .2 單分支結構 .… … 48

3 .3 .3 雙分支結構 .… … 48

3 .3 .4 多分支結構 .… … 49

3 .3 .5 if 語句的嵌套.… … 51

3 .3 .6 if 語句典型示例代碼 … … … 51

3 .3 .7 模式匹配語句 match…case … 52

3 .3 .8 選擇結構綜合舉例 .54

3 .4 循環結構 ..56

3 .4.1 可疊代對象 .… … 56

3 .4.2 range 對象 .… … … 56

3 .4.3 for 循環 ..56

3 .4.4 while 循環 .… … … 57

3 .4.5 循環的嵌套 .… … 58

3 .4.6 break 語句 .… … … 59

3 .4.7 continue 語句 .… … 60

3 .4.8 死循環(無限循環) .60

3 .4.9 else 子句 .… … … 61

3 .4.10 enumerate() 函數和循環 … 61Ⅴ

3 .4.11 zip() 函數和循環 .62

3 .4.12 map() 函數和循環 … … … 62

3 .4.13 循環語句典型示例代碼… … 62

3 .4.14 循環結構綜合舉例 … … … 63

3 .5 綜合應用: turtle 模塊的復雜圖形繪制 ..64

3 .5 .1 繪制正方形(改進版) … … … 64

3 .5 .2 繪制圓形螺旋 .… 64

3 .6 上機實踐 ..65

3 .7 案例研究: 使用嵌套循環實現圖像處理算法 .… … 69

3 .8 AI 輔助編程: 程序流程控制 … 69

第4 章 常用內置數據類型 … … … 70

4.1 Python 內置數據類型概述 … 70

4.1 .1 數值數據類型 .… 70

4.1 .2 序列數據類型 .… 70

4.1 .3 集合數據類型 .… 71

4.1 .4 字典數據類型 .… 71

4.1 .5 NoneType 、NotImplementedType和 EllipsisType .… 71

4.1 .6 其他數據類型 .… 71

4.2 int 數據類型(任意精度整數) … 72

4.2.1 整型字面量 .… … 72

4.2.2 int 對象 ..72

4.2.3 int 對象的方法 .… 73

4.2.4 整數的運算 .… … 73

4.3 float 類型(有限精度浮點數) … 74

4.3 .1 浮點類型字面量.… 74

4.3 .2 float 對象 .… … … 74

4.3 .3 float 對象的方法 .75

4.3 .4 浮點數的表示和相等性比較 … 75

4.3 .5 浮點數的運算 .… 75

4.4 bool 數據類型 .… … 76

4.4.1 布爾值字面量 .… 76

4.4.2 bool 對象 .… … … 76

4.4.3 布爾值的運算 .… 76

4.5 complex 類型 .… … … 77

4.5 .1 復數字面量 .… … 77

4.5 .2 complex 對象 .… … 77

4.5 .3 complex 對象的屬性和方法 ..… 77

4.5 .4 復數的運算 .… … 77

4.6 條件表達式、 關系運算符、 測試運算符和邏輯運算符.78

4.6 .1 條件表達式 .… … 78

4.6 .2 關系運算符和測試運算符 ..78

4.6 .3 邏輯運算符 .… … 79

4.7 算術運算符和位運算符 … … … 80

4.7 .1 算術運算符 .… … 80

4.7 .2 位運算符 .… … … 81

4.8 混合運算和數值類型轉換 … … 81

4.8.1 隱式轉換 .… … … 81

4.8.2 顯式轉換(強制轉換) … … … 82

4.9 內置標準數學函數.… 82

4.9 .1 內置數學運算函數 .82

4.9 .2 數制轉換函數 .… 83

4.10 math 模塊和數學函數 … … … 83

4.10.1 math 模塊的 API .83

4.10.2 math 模塊應用舉例 … … … 85

4.11 random 模塊和隨機函數 … … 86

4.11 .1 種子和隨機狀態 .86

4.11 .2 隨機整數 .… … … 87

4.11 .3 隨機序列 .… … … 87

4.12 綜合應用舉例 .… … 88

4.12.1 蒙特卡羅模擬: 賭徒破產命運 ..88

4.12.2 使用隨機數估算圓周率… … 90

4.12.3 使用阿基米德方法估算圓周率..90

4.13 上機實踐 ..91

4.14 案例研究: 科學計算和數據分析 ..… … 95

4.15 AI 輔助編程: 常用內置數據類型 ..95

第5 章 組合數據類型 .… 96

5 .1 Python 序列數據概述 … … … 96

5 .1 .1 數組 ..… 96

5 .1 .2 序列數據類型 .… 96

5 .2 序列數據的基本操作.97

5 .2.1 序列的長度、 最大值、 最小值、求和 ..… 97Ⅵ

5 .2.2 序列的索引訪問操作 … … … 97

5 .2.3 序列的切片操作.… 98

5 .2.4 序列的連接和重復操作 … … 98

5 .2.5 序列的成員關系操作 … … … 99

5 .2.6 序列的比較運算操作 … … … 99

5 .2.7 序列的排序操作 .100

5 .2.8 內置函數all() 和any() … … 100

5 .2.9 序列的拆分操作 .100

5 .3 列表 ..… … 101

5 .3 .1 使用列表字面量創建列表實例對象 .… … … 101

5 .3 .2 使用list 對象創建列表實例對象 ..101

5 .3 .3 列表解析表達式 .102

5 .3 .4 列表的序列操作 .102

5 .3 .5 列表對象的方法 .103

5 .3 .6 列表的典型示例代碼 … … 103

5 .4 元組 ..… … 104

5 .4.1 使用元組字面量創建元組實例對象 .… … … 104

5 .4.2 使用tuple 對象創建元組實例對象 .… … … 105

5 .4.3 元組的序列操作 .105

5 .4.4 元組對象的方法 .105

5 .4.5 元組的典型示例代碼 … … 106

5 .5 字符串 ..… 106

5 .5 .1 使用字符串字面量創建字符串對象 .… … 107

5 .5 .2 字符串編碼 .… … 107

5 .5 .3 轉義字符 .… … … 107

5 .5 .4 使用內置函數str() 創建字符串對象 .… … 108

5 .5 .5 字符串的序列操作 … … … 108

5 .5 .6 字符串對象的方法 … … … 109

5 .5 .7 字符串的格式化 .111

5 .5 .8 f 字符串(字符串插值) … … 114

5 .5 .9 字符串的典型示例代碼 … … 115

5 .5 .10 字符串應用舉例 .116

5 .6 字節序列 ..116

5 .6 .1 bytes 字面量 .… 117

5 .6 .2 創建bytes 對象 .117

5 .6 .3 創建bytearray 對象 … … … 117

5 .6 .4 bytes 和bytearray 的序列操作 ..118

5 .6 .5 字節編碼和字節解碼 … … 118

5 .6 .6 字節序列的典型示例代碼 ..119

5 .7 字典(映射) .… … … 119

5 .7 .1 對象的哈希(hash) 值 … … 119

5 .7 .2 字典的定義 .… … 119

5 .7 .3 字典解析表達式 .120

5 .7 .4 字典的訪問操作 .120

5 .7 .5 字典的視圖對象 .121

5 .7 .6 字典的遍歷 .… … 121

5 .7 .7 判斷字典鍵是否存在 … … 121

5 .7 .8 字典對象的長度和比較 … … 121

5 .7 .9 字典對象的方法 .122

5 .7 .10 字典的典型示例代碼 … … 122

5 .8 集合 ..… … 123

5 .8.1 集合的定義 .… … 123

5 .8.2 集合解析表達式 .124

5 .8.3 判斷集合元素是否存在 … … 124

5 .8.4 集合的運算: 並集、 交集、差集和對稱差集 .125

5 .8.5 集合的比較運算: 相等、子集和超集 .… … 125

5 .8.6 集合的長度、 元素最大值、元素最小值、 元素和 … … … 126

5 .8.7 可變集合的方法 .126

5 .8.8 集合的典型示例代碼 … … 127

5 .9 數據類型綜合應用舉例 … … 127

5 .9 .1 字符串簡單加密和解密 … … 127

5 .9 .2 去除列表中的重復項 … … 128

5 .9 .3 基於列表的簡易花名冊管理系統 .… … … 129

5 .9 .4 頻數表和直方圖 .130

5 .10 上機實踐 .… … … 131

5 .11 案例研究: 猜單詞遊戲 … … … 133Ⅶ

5 .12 AI 輔助編程: 組合數據類型 ..… 134

第6 章 輸入、 輸出和文件 … … … 135

6 .1 輸入和輸出概述 .… 135

6 .2 命令行參數 .… … … 135

6 .2.1 sys.argv 與命令行參數 … … 135

6 .2.2 argparse 模塊和命令行參數解析 .… … … 136

6 .3 標準輸入函數和標準輸出函數 ..… … 137

6 .3 .1 輸入函數和輸出函數 … … 137

6 .3 .2 交互式用戶輸入 .138

6 .3 .3 運行時提示輸入密碼 … … 138

6 .4 文件和文件對象 .… 139

6 .4.1 文件對象和open 函數 … … 139

6 .4.2 文件的打開、 寫入、 讀取和關閉 ..140

6 .4.3 with 語句和上下文管理協議 ..140

6 .5 文本文件的寫入、 讀取和編碼 ..… … 141

6 .5 .1 文本文件的寫入 .141

6 .5 .2 文本文件的讀取 .142

6 .5 .3 文本文件的編碼 .143

6 .6 二進制文件的寫入和讀取 … … 143

6 .6 .1 二進制文件的寫入 … … … 143

6 .6 .2 二進制文件的讀取 … … … 144

6 .7 隨機文件的寫入和讀取 … … 145

6 .8 CSV 格式文件的讀取和寫入 ..… … 146

6 .8.1 CSV 格式文件和csv 模塊 … 146

6 .8.2 csv.reader 對象和 CSV文件的讀取 .… … 146

6 .8.3 csv. writer 對象和 CSV文件的寫入 .… … 147

6 .9 對象序列化 .… … … 147

6 .9 .1 對象序列化概述 .147

6 .9 .2 pickle 模塊和對象序列化 … 147

6 .9 .3 json 模塊和JSON 格式數據 ..148

6 .10 os 模塊和文件目錄操作 … … 149

6 .11 標準輸入、輸出和錯誤流 … … 149

6 .11 .1 標準輸入、 輸出和錯誤流文件對象 .… … 149

6 .11 .2 讀取任意長度的輸入流 … 150

6 .11 .3 標準輸入、 輸出和錯誤流重定向 .… … … 151

6 .12 重定向和管道 .… 151

6 .12.1 重定向標準輸出到一個文件 ..152

6 .12.2 重定向文件到標準輸入 … 152

6 .12.3 管道 ..153

6 .12.4 過濾器 .… … … 153

6 .13 綜合應用: 文件數據的統計和分析 .… … 155

6 .13 .1 統計存儲在文本文件中的學生成績信息 .155

6 .13 .2 統計存儲在文本文件中的天氣溫度信息 .155

6 .13 .3 統計存儲在 CSV 文件中的學生成績信息 .156

6 .13 .4 基於字典的通訊錄 … … … 156

6 .14 上機實踐 .… … … 158

6 .15 案例研究: 21 點撲克牌遊戲 ..… 162

6 .16 AI 輔助編程: 輸入、 輸出和文件 ..162

第7 章 錯誤和異常處理 … … … 163

7 .1 程序的錯誤 .… … … 163

7 .1 .1 語法錯誤 .… … … 163

7 .1 .2 運行時錯誤 .… … 163

7 .1 .3 邏輯錯誤 .… … … 164

7 .2 異常處理 ..165

7 .2.1 異常處理概述 .… 165

7 .2.2 內置的異常類 .… 165

7 .2.3 引發異常 .… … … 166

7 .2.4 捕獲處理異常機制概述 … … 167

7 .2.5 Python 虛擬機捕獲處理異常 ..167Ⅷ

7 .2.6 使用try…except…else…finally 語句捕獲處理異常 … 167

7 .2.7 捕獲異常的順序 .168

7 .2.8 finally 塊和發生異常後的處理 ..168

7 .2.9 自定義異常類 .… 169

7 .3 斷言處理 ..169

7 .3 .1 斷言處理概述 .… 169

7 .3 .2 assert 語句和 AssertionError類 ..… 170

7 .3 .3 啟用/禁用斷言 .170

7 .4 程序的基本調試方法 … … … 171

7 .4.1 語法錯誤的調試 .171

7 .4.2 運行時錯誤的調試 … … … 171

7 .4.3 邏輯錯誤的調試 .171

7 .5 使用logging 模塊記錄日誌 ..… … 172

7 .5 .1 logging 模塊概述 .172

7 .5 .2 logging 的配置和使用 … … 173

7 .6 綜合應用: 錯誤和異常處理 ..… … 175

7 .6 .1 兩個整數的輸入及求和 … … 175

7 .6 .2 打開指定的文件並顯示文件的內容 .… … 176

7 .7 上機實踐 ..177

7 .8 案例研究: 使用調試器調試Python 程序 .… … … 177

7 .9 AI 輔助編程: 錯誤和異常處理 ..177

第8 章 函數和函數式編程 … … 178

8.1 函數概述 ..178

8.1 .1 函數的基本概念 .178

8.1 .2 函數的功能 .… … 178

8.1 .3 Python 函數分類 .178

8.2 函數的聲明和調用 .179

8.2.1 函數對象的創建 .179

8.2.2 函數的調用 .… … 180

8.2.3 函數的副作用 .… 181

8.2.4 lambda 表達式和匿名函數 ..181

8.3 參數的傳遞 .… … … 181

8.3 .1 形式參數和實際參數 … … 181

8.3 .2 形式參數變量和對象引用傳遞 ..182

8.3 .3 傳遞不可變對象的引用 … … 182

8.3 .4 傳遞可變對象的引用 … … 183

8.3 .5 可選參數 .… … … 183

8.3 .6 位置參數和命名參數(關鍵字參數) ..184

8.3 .7 可變參數(打包參數) 和解包參數 ..184

8.3 .8 強制命名參數(Keywordonly) ..186

8.3 .9 參數類型檢查和類型註(annotation) .… 186

8.4 函數的返回值 .… … 187

8.4.1 return 語句和函數返回值 .… … … 187

8.4.2 多條return 語句 .188

8.4.3 返回多個值 .… … 188

8.5 變量的作用域 .… … 189

8.5 .1 全局變量 .… … … 189

8.5 .2 局部變量 .… … … 189

8.5 .3 全局語句global .190

8.5 .4 非局部語句nonlocal … … 191

8.5 .5 類成員變量 .… … 191

8.5 .6 查看局部變量和全局變量(locals 和globals 函數) … 191

8.6 遞歸函數 ..192

8.6 .1 遞歸函數的定義 .192

8.6 .2 遞歸函數的原理 .192

8.6 .3 編寫遞歸函數需要註意的問題 ..193

8.6 .4 遞歸函數的應用: 最大公約數 .… … … 193

8.6 .5 遞歸函數的應用:漢諾塔 .… … … 194

8.7 內置函數的使用 .… 194

8.7 .1 內置函數一覽 .… 195

8.7 .2 eval() 函數(動態表達式的求值) ..195Ⅸ

8.7 .3 exec() 函數(動態語句的執行) ..195

8.7 .4 compile() 函數 .… 196

8.8 Python 函數式編程基礎 … … 196

8.8.1 作為對象的函數 .196

8.8.2 高階函數 .… … … 196

8.8.3 map() 函數 .… … 196

8.8.4 filter() 函數 .… … 197

8.8.5 operator 模塊和操作符函數 ..198

8.8.6 functools.reduce() 函數 … … 198

8.8.7 偏函數 .… … … 199

8.8.8 sorted() 函數 .… 199

8.8.9 函數裝飾器 .… … 199

8.9 綜合應用: 使用turtle 模塊繪制復雜的圖形 .… 201

8.9 .1 繪制多邊形 .… … 201

8.9 .2 遞歸圖形 .… … … 201

8.10 上機實踐 .… … … 202

8.11 案例研究: 井字棋遊戲 … … 203

8.12 AI 輔助編程: 函數和函數式編程 ..… 203

第9 章 面向對象的程序設計 … 204

9 .1 面向對象的概念 .… 204

9 .1 .1 對象的定義 .… … 204

9 .1 .2 封裝 ..204

9 .1 .3 繼承 ..204

9 .1 .4 多態性 .… … … 204

9 .2 類對象和實例對象 .205

9 .2.1 類對象 .… … … 205

9 .2.2 實例對象 .… … … 205

9 .3 屬性 ..… … 206

9 .3 .1 實例對象屬性 .… 206

9 .3 .2 類對象屬性 .… … 207

9 .3 .3 私有屬性和公有屬性 … … 207

9 .3 .4 @property 裝飾器 … … … 208

9 .3 .5 特殊屬性 .… … … 209

9 .3 .6 自定義屬性 .… … 210

9 .4 方法 ..… … 211

9 .4.1 對象實例方法 .… 211

9 .4.2 靜態方法( @staticmethod)..… … 211

9 .4.3 類方法(@classmethod) … … 212

9 .4.4 __init__() 方法和__new__()方法 ..213

9 .4.5 __del__() 方法 .… 214

9 .4.6 私有方法與公有方法 … … 214

9 .4.7 方法重載 .… … … 215

9 .5 繼承 ..… … 216

9 .5 .1 派生類 .… … … 216

9 .5 .2 查看繼承的層次關系 … … 217

9 .5 .3 類成員的繼承和重寫 … … 217

9 .6 對象的特殊方法 .… 218

9 .6 .1 對象的特殊方法概述 … … 218

9 .6 .2 運算符重載與對象的特殊方法 ..218

9 .6 .3 @functools.total_ordering裝飾器 .… … … 220

9 .6 .4 __call__() 方法和可調用對象 ..220

9 .7 對象的引用、 淺拷貝和深拷貝 ..… 221

9 .7 .1 對象的引用 .… … 221

9 .7 .2 對象的淺拷貝 .… 221

9 .7 .3 對象的深拷貝 .… 222

9 .8 可疊代對象: 疊代器和生成器 ..… 222

9 .8.1 可疊代對象 .… … 222

9 .8.2 疊代器 .… … … 222

9 .8.3 疊代器協議 .… … 223

9 .8.4 可疊代對象的疊代: iter()函數和next() 函數 … … … 223

9 .8.5 可疊代對象的疊代: for語句 ..223

9 .8.6 自定義可疊代對象和疊代器 .… … … 224

9 .8.7 生成器函數 .… … 224

9 .8.8 反向疊代: reversed疊代器 .… … … 225Ⅹ

9 .8.9 生成器表達式 .… 226

9 .8.10 range 可疊代對象 … … … 226

9 .8.11 map 疊代器和itertools.starmap 疊代器 .227

9 .8.12 filter 疊代器和itertools.filterfalse 疊代器 … … … 227

9 .8.13 zip 疊代器和itertools.zip_longest 疊代器 … … … 228

9 .8.14 enumerate 疊代器 … … … 228

9 .8.15 無窮序列疊代器itertools.count、cycle 和repeat … … 229

9 .8.16 累計疊代器itertools.accumulate .… 229

9 .8.17 級聯疊代器itertools.chain ..229

9 .8.18 選擇壓縮疊代器itertools.compress .… … 229

9 .8.19 截取疊代器itertools.dropwhile 和takewhile … 230

9 .8.20 切片疊代器itertools.islice ..230

9 .8.21 分組疊代器itertools.groupby .… … 230

9 .8.22 返回多個疊代器itertools.tee ..231

9 .8.23 組合疊代器itertools.combinations 和combinations_with_replacement … … … 231

9 .8.24 排列疊代器itertools.permutations .… 231

9 .8.25 笛卡兒積疊代器itertools.product .… … … 232

9 .9 自定義類應用舉例 .232

9 .9 .1 Color 類 .… … … 232

9 .9 .2 Histogram 類 .… 233

9 .10 上機實踐 .… … … 235

9 .11 案例研究: 文本相似度比較分析 ..… 235

9 .12 AI 輔助編程: 面向對象的程序設計 .… … … 235

第10 章 模塊和模塊化程序設計 ..236

10.1 模塊化程序設計的概念 … 236

10.1 .1 模塊化程序設計 … … … 236

10.1 .2 模塊的 API .236

10.1 .3 模塊的實現 .237

10.1 .4 模塊的客戶端.238

10.1 .5 模塊化程序設計的優越性 .… … 238

10.2 模塊的設計和實現 … … … 238

10.2.1 模塊設計的一般原則 … 238

10.2.2 API 設計 .… 239

10.2.3 創建模塊 .… 239

10.2.4 模塊的私有函數 … … … 239

10.2.5 模塊的測試代碼 … … … 240

10.2.6 編寫模塊文檔字符串 … 241

10.2.7 按字節編譯的. pyc文件 .… … … 241

10.3 模塊的導入和使用 … … … 242

10.3 .1 導入模塊和使用模塊 .… … … 242

10.3 .2 導入模塊中的成員 … … 242

10.3 .3 重新加載模塊.243

10.3 .4 動態導入模塊.243

10.3 .5 查看導入的模塊 … … … 243

10.4 包 ..… … 244

10.4.1 包的概念 .… 244

10.4.2 創建包 .… … 244

10.4.3 包的導入和使用 … … … 245

10.5 模塊的導入順序 .245

10.5 .1 import 語句導入模塊的類型 .… … … 245

10.5 .2 模塊搜索路徑.246

10.5 .3 導入模塊時的搜索順序 .… … … 246

10.5 .4 dir() 函數 .… 247

10.6 名稱空間與名稱查找順序 ..… 247

10.6 .1 名稱空間概述.247Ⅺ

10.6 .2 名稱查找順序.247

10.6 .3 頂層模塊和__name__變量 .… … … 248

10.6 .4 Python 解釋器是頂層模塊 .… … … 249

10.6 .5 全局名稱空間.249

10.6 .6 局部名稱空間.249

10.6 .7 類和對象名稱空間 … … 250

10.7 上機實踐 .… … … 250

10.8 案例研究: 基於模塊的庫存管理系統 .… 251

10.9 AI 輔助編程: 模塊和模塊化程序設計 .251

第11 章 數據結構與算法基礎 … 252

11 .1 數據結構基礎 .… 252

11 .1 .1 數據結構的定義 … … … 252

11 .1 .2 數據的邏輯結構 … … … 253

11 .1 .3 數據的物理結構 … … … 253

11 .1 .4 常用算法 .… 254

11 .2 常用的數據結構 .254

11 .2.1 線性表 .… … 254

11 .2.2 隊列 .… … … 255

11 .2.3 棧 ..255

11 .2.4 樹 ..255

11 .2.5 圖 ..258

11 .2.6 堆 ..258

11 .2.7 散列表 .… … 258

11 .3 算法及其性能分析 … … … 258

11 .3 .1 算法 .… … … 258

11 .3 .2 算法的時間復雜度分析 .… … … 259

11 .3 .3 增長量級 .… 259

11 .3 .4 算法的空間復雜度分析 .… … … 260

11 .4 查找算法 .… … … 260

11 .4.1 順序查找法 .260

11 .4.2 二分查找法 .262

11 .4.3 Python 語言提供的查找算法 .… 263

11 .5 排序算法 .… … … 263

11 .5 .1 冒泡排序法 .263

11 .5 .2 選擇排序法 .264

11 .5 .3 插入排序法 .265

11 .5 .4 歸並排序法 .266

11 .5 .5 快速排序法 .267

11 .5 .6 Python 語言提供的排序算法 .… … … 268

11 .6 數組 ..… 269

11 .6 .1 列表和數組 .269

11 .6 .2 array.array 對象和數組 .… … … 269

11 .7 棧和隊列 .… … … 270

11 .7 .1 棧的實現: 使用列表 … 270

11 .7 .2 deque 對象 .… 271

11 .7 .3 deque 作為棧 .272

11 .7 .4 deque 作為隊列 … … … 272

11 .8 collections 模塊的其他數據結構 .… … … 272

11 .8.1 collections 模塊概述 … … 272

11 .8.2 namedtuple 對象 … … … 272

11 .8.3 UserDict、UserList和 UserString 對象 … … 273

11 .8.4 defaultdict 對象 … … … 274

11 .8.5 OrderedDict 對象 … … 274

11 .8.6 ChainMap 對象 … … … 275

11 .8.7 Counter 對象 .276

11 .9 上機實踐 .… … … 277

11 .10 案例研究: 程序運行時間度量分析 .278

11 .11 AI 輔助編程: 數據結構與算法基礎 .… 279

第12 章 圖形用戶界面 .280

12 .1 圖形用戶界面概述 … … … 280

12.1 .1 tkinter .… … 280

12.1 .2 其他 GUI 庫簡介 … … 280

12 .2 tkinter 概述 .… … 281

12.2.1 tkinter 模塊 .281

12.2.2 圖形用戶界面構成 … … 281

12.2.3 框架和 GUI 應用程序類 .… … 282

12.2.4 tkinter 主窗口 … … … 282Ⅻ

12 .3 幾何布局管理器 .283

12.3 .1 pack 幾何布局管理器..… 283

12.3 .2 grid 幾何布局管理器..… 284

12.3 .3 place 幾何布局管理器..… 285

12 .4 事件處理 .… … … 286

12.4.1 事件類型 .… 286

12.4.2 事件綁定 .… 286

12.4.3 事件處理函數.287

12 .5 常用組件 .… … … 287

12.5 .1 Label(標簽) .287

12.5 .2 LabelFrame(標簽框架) .… … … 288

12.5 .3 Button(按鈕) .288

12.5 .4 Message(消息) … … … 289

12.5 .5 Entry(單行文本框) … … 290

12.5 .6 Text(多行文本框) … … 290

12.5 .7 Radiobutton(單選按鈕) .… … … 291

12.5 .8 Checkbutton(復選框) … 292

12.5 .9 Listbox(列表框) … … … 293

12.5 .10 OptionMenu(選擇項)..295

12.5 .11 Scale(移動滑塊) … … 296

12.5 .12 Toplevel(頂層窗口)..297

12.5 .13 ttk(子模塊控件) … … 297

12 .6 對話框 ..297

12.6 .1 通用消息對話框 … … … 298

12.6 .2 文件對話框 .299

12.6 .3 顏色選擇對話框 … … … 299

12.6 .4 通用對話框應用舉例 … 299

12.6 .5 簡單對話框 .301

12 .7 菜單和工具欄 .… 302

12.7 .1 創建主菜單 .302

12.7 .2 創建上下文菜單 … … … 303

12.7 .3 菜單應用舉例.304

12 .8 基於 wxPython 的圖形用戶界面設計入門 … … … 306

12.8.1 wxPython 概述 … … … 306

12.8.2 安裝 wxPython 庫 … … 306

12.8.3 wxPython 應用程序的基本架構 .… 307

12.8.4 使用 wxPython 開發簡易文本編輯器 … … … 307

12 .9 上機實踐 .… … … 309

12 .10 案例研究: 簡易圖形用戶界面計算器.309

12 .11 AI 輔助編程: 圖形用戶界面 ..309

第13 章 圖形繪制和數據可視化...310

13 .1 Python 繪圖模塊概述 … … 310

13 .2 Matplotlib 模塊 .310

13 .2.1 Matplotlib 模塊概述 … … 310

13 .2.2 圖形顯示: 用戶界面後端 .… … … 311

13 .2.3 輸出格式: 硬拷貝後端 .… … … 311

13 .2.4 Matplotlib 的特點 … … 312

13 .2.5 安裝 Matplotlib … … … 312

13 .3 Matplotlib 基本繪圖 … … 312

13 .3 .1 繪制折線圖: 使用一個列表數據 .… 312

13 .3 .2 繪制折線圖: 使用兩個列表數據 .… 313

13 .3 .3 繪制多條曲線圖 … … … 313

13 .3 .4 設置坐標軸範圍 … … … 314

13 .3 .5 設置坐標軸標題和圖表標題 .… 315

13 .3 .6 設置圖例 .… 315

13 .3 .7 保存圖形到文件 … … … 315

13 .3 .8 基本繪圖應用舉例 … … 315

13 .4 常用圖表類型的繪制 … … 316

13 .4.1 選擇圖表類型.316

13 .4.2 條形圖 .… … 316

13 .4.3 餅圖 .… … … 317

13 .4.4 散點圖 .… … 319

13 .4.5 直方圖 .… … 319􀃼

13 .5 面向對象的 Matplotlib繪圖 ..… 320

13 .5 .1 面向對象的繪圖 … … … 320

13 .5 .2 繪制多個子圖.321

13 .6 上機實踐 .… … … 322

13 .7 案例研究: 漢諾塔問題求解動畫 .… … … 323

13 .8 AI 輔助編程: 圖形繪制和數據可視化 .… 323

第14 章 數值日期和時間處理..324

14.1 相關模塊概述 .… 324

14.1 .1 數值處理的相關模塊 … 324

14.1 .2 日期和時間處理的相關模塊 .… … … 324

14.2 cmath 模塊和復數數學函數 ..… 324

14.3 數值運算模塊 NumPy … … 326

14.3 .1 數值運算模塊的基本使用 .… … … 326

14.3 .2 創建數組 .… 326

14.3 .3 處理數組 .… 327

14.3 .4 數組應用舉例.327

14.4 日期和時間處理 .328

14.4.1 相關術語 .… 328

14.4.2 時間對象 .… 328

14.4.3 測量程序運行時間 … … 329

14.4.4 日期對象 .… 329

14.4.5 獲取當前日期和時間 … 330

14.4.6 日期和時間格式化為字符串 .… … 330

14.4.7 日期和時間字符串解析為日期和時間對象 … … … 330

14.5 綜合應用舉例 .… 331

14.6 上機實踐 .… … … 332

14.7 案例研究: 使用pandas進行數據分析和處理 … … 333

14.8 AI 輔助編程: 數值日期和時間處理 .… … … 334

第15 章 字符串和文本處理 … … 335

15 .1 相關模塊概述 .… 335

15 .1 .1 字符串和文本處理的相關模塊 .… 335

15 .1 .2 字符串處理概述的常用方法 .… … … 335

15 .2 正則表達式 .… … 335

15 .2.1 正則表達式語言概述 … 336

15 .2.2 正則表達式引擎 … … … 336

15 .2.3 普通字符和轉義字符 … 336

15 .2.4 字符類和預定義字符類 .… … 337

15 .2.5 邊界匹配符 .337

15 .2.6 重復限定符 .338

15 .2.7 匹配算法: 貪婪和懶惰 .… … … 338

15 .2.8 選擇分支 .… 339

15 .2.9 分組和向後引用 … … … 339

15 .2.10 正則表達式的匹配模式.… … … 341

15 .2.11 常用正則表達式 … … 341

15 .3 正則表達式模塊re … … … 341

15 .3 .1 匹配和搜索函數 … … … 341

15 .3 .2 匹配選項 .… 342

15 .3 .3 正則表達式對象 … … … 342

15 .3 .4 匹配對象 .… 343

15 .3 .5 匹配和替換 .343

15 .3 .6 分隔字符串 .344

15 .4 正則表達式應用舉例 … … 344

15 .4.1 字符串包含驗證 … … … 344

15 .4.2 字符串查找和拆分 … … 345

15 .4.3 字符串替換和清除 … … 345

15 .4.4 字符串查找和截取 … … 345

15 .5 中文分詞庫jieba .346

15 .5 .1 安裝jieba 庫 .346

15 .5 .2 jieba 庫的分詞模式和常用函數 .… 346

15 .5 .3 使用jieba 庫分析統計中文文檔 .… 347􀃽

15 .6 詞雲庫 Wordcloud … … … 348

15 .6 .1 安裝 Wordcloud … … … 348

15 .6 .2 Wordcloud 庫的 API … 348

15 .6 .3 定制詞雲圖的繪制參數 .… … … 348

15 .6 .4 使用 Wordcloud 庫顯示中文詞雲圖 .350

15 .7 綜合應用舉例 .… 351

15 .7 .1 文本統計 .… 351

15 .7 .2 基因預測 .… 352

15 .8 上機實踐 .… … … 353

15 .9 案例研究: NLTK 與自然語言處理 .… 354

15 .10 AI 輔助編程: 字符串和文本處理 .… 355

第16 章 數據庫訪問 .… 356

16 .1 數據庫基礎 .… … 356

16 .1 .1 數據庫的概念.356

16 .1 .2 數據庫模型 .356

16 .1 .3 關系數據庫 .358

16 .2 Python 數據庫訪問模塊 … 359

16 .2.1 通用數據庫訪問模塊 .… … … 359

16 .2.2 專用數據庫訪問模塊 .… … … 359

16 .2.3 SQLite 數據庫和sqlite3模塊 .… … … 359

16 .3 使用sqlite3 模塊連接和操作SQLite 數據庫 … … … 360

16 .3 .1 訪問數據庫的典型步驟 .… … … 360

16 .3 .2 創建數據庫和表 … … … 362

16 .3 .3 數據庫表的插入、 更新和刪除操作 .362

16 .3 .4 數據庫表的查詢操作 … 363

16 .4 使用SQLiteStudio 查看和維護SQLite 數據庫 … … 363

16 .5 上機實踐 .… … … 364

16 .6 案例研究1 : 基於數據庫和GUI 的教務管理系統 … … … 364

16.7 案例研究2: 基於 MySQL 的庫存管理系統 .… … 364

16.8 AI 輔助編程: 數據庫訪問 ..… 365

第17 章 網絡編程和通信 … … … 366

17.1 網絡編程的基本概念 … … … 366

17.1.1 網絡基礎知識 .366

17.1.2 TCP/IP 簡介 .… 366

17.1.3 IP 地址和域名 .367

17.1.4 統一資源定位器 … … … 368

17.2 基於socket 的網絡編程 ..… 369

17.2.1 socket 概述 .… 369

17.2.2 創建socket 對象 … … … 370

17.2.3 將服務器端socket 綁定到指定地址上 .… 370

17.2.4 服務器端socket 開始偵聽..371

17.2.5 連接和接收連接 … … … 371

17.2.6 發送和接收數據 … … … 372

17.2.7 簡單 TCP 程序:Echo Server .… 372

17.2.8 簡單 UDP 程序:

Echo Server .… 373

17.2.9 UDP 程序: QuoteServer .… … … 374

17.3 基於urllib 的網絡編程 … … 375

17 .3 .1 打開和讀取 URL 網絡資源 .… … … 375

17 .3 .2 創建 Request 對象 … … 375

17 .4 基於http 的網絡編程 … … 376

17 .5 基於ftplib 的網絡編程 … … 376

17 .6 基於poplib 和smtplib 的網絡編程 .… … … 378

17 .6 .1 使用poplib 接收郵件 .… … … 378

17 .6 .2 使用smtplib 發送郵件 .… … … 378

17 .7 上機實踐 .… … … 379􀃾

17 .8 案例研究: 網絡爬蟲實現案例 ..… 379

17 .9 AI 輔助編程: 網絡編程和通信 ..380

第18 章 並行計算: 進程、 線程和協程 ..381

18.1 並行處理概述 .… 381

18.1 .1 進程、 線程和協程 … … 381

18.1 .2 Python 語言與並行處理相關模塊.382

18.2 基於線程的並發處理 … … 382

18.2.1 threading 模塊概述 … … 382

18.2.2 使用 Thread 對象創建線程 .… … … 383

18.2.3 自定義派生於 Thread 的對象 .… … … 384

18.2.4 線程加入 .… 384

18.2.5 用戶線程和daemon線程 .… … … 385

18.2.6 Timer 線程.… 386

18.2.7 基於原語鎖的簡單同步 .… … … 387

18.2.8 基於條件變量的同步和通信 .… … 388

18.2.9 基於queue 模塊中隊列的同步 .… … 389

18.2.10 基於 Event 的同步和通信 .… … 390

18.3 基於進程的並行計算 … … 390

18.3 .1 multiprocessing 模塊概述 .… … … 390

18.3 .2 創建和使用進程 … … … 391

18.3 .3 進程的數據共享 … … … 392

18.3 .4 進程池 .… … 393

18.4 基於線程池/進程池的並發和並行任務 .394

18.4.1 concurrent.futures模塊概述 .… 394

18.4.2 使用 ThreadPoolExecutor並發執行任務.395

18.4.3 使用 ProcessPoolExecutor並發執行任務.396

18.5 基於asyncio 的異步IO編程 ..… 397

18.5 .1 asyncio 模塊概述 … … 397

18.5 .2 創建協程對象.397

18.5 .3 創建任務對象.398

18.6 應用舉例 .… … … 398

18.6 .1 使用 Pool 並行計算查找素數 .… 398

18.6 .2 使用 ProcessPoolExecutor並行判斷素數.399

18.6 .3 使用 ThreadPoolExecutor多線程爬取網頁 … … … 400

18.7 上機實踐 .… … … 402

18.8 案例研究: 文本統計並行處理 ..… 402

18.9 AI 輔助編程: 並行計算 … 402

第19 章 系統管理 .… … 403

19 .1 系統管理相關模塊 … … … 403

19 .2 目錄、 文件和磁盤的基本操作 .… … … 403

19 .2.1 創建目錄 .… 403

19 .2.2 臨時目錄和文件的創建 .… … … 403

19 .2.3 切換和獲取當前工作目錄 .… … … 404

19 .2.4 目錄內容列表.404

19 .2.5 文件通配符和glob.glob() 函數.… 404

19 .2.6 遍歷目錄和os. walk()函數 .… … … 404

19 .2.7 判斷文件/目錄是否存在 .… … … 405

19 .2.8 測試文件類型.405

19 .2.9 文件的日期及大小 … … 405

19 .2.10 文件和目錄的刪除 … … 406

19 .2.11 文件和目錄的復制、重命名和移動 … … … 406

19 .2.12 磁盤的基本操作 … … 407

19 .3 執行操作系統命令和運行其他程序 .… … … 407

19 .3 .1 os.system() 函數 … … 407

19 .3 .2 os. popen() 函數 … … … 407

19 .3 .3 subprocess 模塊 … … … 407􀃿

19 .4 獲取終端的大小 .408

19 .5 文件的壓縮和解壓縮 … … 409

19 .5 .1 shutil 模塊支持的壓縮和解壓縮格式.409

19 .5 .2 make_archive() 函數和文件壓縮 .409

19 .5 .3 unpack_archive() 函數和文件解壓縮.410

19 .6 configparser 模塊和配置文件 ..… 410

19 .6 .1 INI 文件及INI 文件格式 .… … … 410

19 .6 .2 ConfigParser 對象和INI 文件操作 … … … 410

19 .7 應用舉例 .… … … 412

19 .7 .1 病毒掃描 .… 412

19 .7 .2 文件目錄樹 .413

19 .8 上機實踐 .… … … 413

19 .9 案例研究1 : 簡易圖形用戶界面壓縮軟件 … … … 413

19 .10 案例研究2 : 使用scikitlearn 進行機器學習 … … 414

19 .11 AI 輔助編程: 系統管理 … 414

附錄 A Python 計算生態 .… 415

參考文獻 ...416