本書(shū)是一本真正地從零開(kāi)始講解Python編程的圖書(shū),它旨在讓零基礎(chǔ)讀者較快地掌握編程知識(shí),并能使用程序來(lái)滿足自己的需要。
本書(shū)共有9個(gè)部分,除第1部分外,其余部分都以一個(gè)階段性項(xiàng)目結(jié)尾。第1部分(第1~2章)介紹了學(xué)習(xí)編程的意義;第2部分(第3~6章)介紹編程的基本知識(shí);第3部分(第7~12章)講解了字符串、元組以及與用戶交互的代碼;第4部分(第13~15章)介紹如何編寫(xiě)程序來(lái)進(jìn)行選擇;第5部分(第16~19章)主要涉及循環(huán)的相關(guān)知識(shí);第6部分(第20~23章)引入了函數(shù)和模塊化的相關(guān)概念;第7部分(第24~29章)介紹了一些高級(jí)對(duì)象類(lèi)型,如可變對(duì)象、列表、字典等;第8部分(第30~34章)為面向?qū)ο缶幊痰南嚓P(guān)知識(shí);第9部分(第35~38章)介紹了一些可供讀者使用的現(xiàn)成代表庫(kù)。
學(xué)習(xí)計(jì)算機(jī)編程的有效方式就是實(shí)踐。不管讀者是想要提升自己的編程能力還是只想完成一些項(xiàng)目,都可從本書(shū)得到一些啟發(fā)。本書(shū)專門(mén)為初學(xué)者所設(shè)計(jì),以一步接一步、一個(gè)項(xiàng)目接一個(gè)項(xiàng)目的方式幫助他們學(xué)習(xí)編程。對(duì)初學(xué)者來(lái)說(shuō),學(xué)習(xí)編程正當(dāng)其時(shí)!
本書(shū)使用Python語(yǔ)言向讀者介紹計(jì)算機(jī)編程的基礎(chǔ)知識(shí)。在這本實(shí)操任務(wù)驅(qū)動(dòng)的圖書(shū)中,讀者幾乎在每一頁(yè)需要完成一些操作,從而完成38個(gè)緊湊的課時(shí)和8個(gè)基礎(chǔ)項(xiàng)目的學(xué)習(xí)。精美的插圖、難度適宜的習(xí)題以及恰到好處的提示,可以幫助讀者極快地養(yǎng)成程序員的思維方式。
通過(guò)本書(shū),你可以:
掌握在任何語(yǔ)言中都可以使用的編程技巧;
不需要任何經(jīng)驗(yàn)就可以學(xué)習(xí)編寫(xiě)代碼;
學(xué)習(xí)Python這門(mén)面向初學(xué)者的語(yǔ)言;
通過(guò)大量的習(xí)題和實(shí)例鞏固和提高編程能力。
Ana Bell博士是麻省理工學(xué)院(Massachusetts Institute of Technology,MIT)電子工程和計(jì)算機(jī)科學(xué)系的講師。
她用Python主講了兩門(mén)計(jì)算機(jī)科學(xué)入門(mén)課程,歷時(shí)已有五年之久。其中一門(mén)課程的目標(biāo)人群是那些沒(méi)有任何編程經(jīng)驗(yàn)的學(xué)生,另一門(mén)課程在前一門(mén)課程的基礎(chǔ)上進(jìn)行了拓展。她非常樂(lè)于向?qū)W生講授編程知識(shí),并且享受學(xué)生們?cè)趯W(xué)習(xí)編程過(guò)程中由于不斷進(jìn)步而逐漸獲得的自信。用不同的方式向?qū)W生講述同一個(gè)概念,學(xué)生能夠融會(huì)貫通地理解和應(yīng)用是她收獲的回報(bào)。
她在普林斯頓大學(xué)時(shí)開(kāi)始接觸Python,并在自己的研究中應(yīng)用Python解決問(wèn)題。根據(jù)自己的經(jīng)驗(yàn),她覺(jué)得Python是一種天性自然的語(yǔ)言,非常易于學(xué)習(xí)和使用。
第 1部分 學(xué)習(xí)編程
第 1章 為什么要學(xué)習(xí)編程 3
1.1 為什么編程很重要 3
1.1.1 編程并不僅限于專業(yè)人員 3
1.1.2 改善自己的生活 4
1.1.3 挑戰(zhàn)自我 4
1.2 起點(diǎn)與終點(diǎn) 5
1.3 我們的編程學(xué)習(xí)計(jì)劃 7
1.3.1 開(kāi)始步驟 7
1.3.2 實(shí)踐!實(shí)踐!實(shí)踐 7
1.3.3 像程序員一樣思考 8
1.4 總結(jié) 9
第 2章 學(xué)習(xí)編程語(yǔ)言的基本原則 10
2.1 編程是一項(xiàng)技能 10
2.2 以烘焙為比喻 11
2.2.1 理解“烘焙一塊面包”這個(gè)任務(wù) 11
2.2.2 尋找菜譜 12
2.2.3 用流程圖展示菜譜的可視化表現(xiàn)形式 13
2.2.4 使用現(xiàn)有的菜譜或自己創(chuàng)建一份菜譜 14
2.3 思考、編碼、測(cè)試、調(diào)試、重復(fù) 14
2.3.1 理解任務(wù) 16
2.3.2 任務(wù)的黑盒表現(xiàn)形式 16
2.3.3 編寫(xiě)偽碼 18
2.4 編寫(xiě)容易閱讀的代碼 18
2.4.1 使用描述性和有意義的名稱 19
2.4.2 對(duì)代碼進(jìn)行注釋 19
2.5 總結(jié) 20
第 2部分 變量、類(lèi)型、表達(dá)式和語(yǔ)句
第3章 介紹Python編程語(yǔ)言 23
3.1 安裝Python 23
3.1.1 什么是Python 24
3.1.2 下載Python 3.5版本 24
3.1.3 Anaconda Python發(fā)布包 24
3.1.4 集成開(kāi)發(fā)環(huán)境 24
3.2 設(shè)置工作空間 26
3.2.1 IPython控制臺(tái) 27
3.2.2 文件編輯器 29
3.3 總結(jié) 31
第4章 變量和表達(dá)式:為對(duì)象賦予名稱和值 32
4.1 為對(duì)象提供名稱 33
4.1.1 數(shù)學(xué)與編程 33
4.1.2 計(jì)算機(jī)可以做什么?不可以做什么 34
4.2 變量 35
4.2.1 對(duì)象就是可以進(jìn)行操作的物品 35
4.2.2 對(duì)象具有名稱 35
4.2.3 允許什么樣的對(duì)象名稱 36
4.2.4 創(chuàng)建變量 37
4.2.5 更新變量 38
4.3 總結(jié) 40
4.4 章末檢測(cè) 40
第5章 對(duì)象的類(lèi)型和代碼的語(yǔ)句 41
5.1 對(duì)象的類(lèi)型 42
5.2 編程中對(duì)象的基本類(lèi)型 42
5.2.1 整數(shù) 42
5.2.2 表示小數(shù)的浮點(diǎn)數(shù) 43
5.2.3 表示真/假的布爾值 44
5.2.4 表示字符序列的字符串 44
5.2.5 空值 44
5.3 使用基本類(lèi)型的數(shù)據(jù)值 45
5.3.1 表達(dá)式的構(gòu)件 45
5.3.2 不同類(lèi)型之間的轉(zhuǎn)換 46
5.3.3 數(shù)學(xué)運(yùn)算對(duì)對(duì)象類(lèi)型的影響 46
5.4 總結(jié) 48
第6章 階段性項(xiàng)目:第 一個(gè)Python程序—時(shí)分轉(zhuǎn)換 49
6.1 思考、編碼、測(cè)試、調(diào)試、重復(fù) 50
6.2 分解任務(wù) 50
6.2.1 設(shè)置輸入 51
6.2.2 設(shè)置輸出 51
6.3 實(shí)現(xiàn)轉(zhuǎn)換公式 51
6.3.1 多少小時(shí) 51
6.3.2 多少分鐘 52
6.4 第 一個(gè)Python程序:解決方案一 52
6.5 第 一個(gè)Python程序:解決方案二 54
6.6 總結(jié) 55
6.7 章末檢測(cè) 55
第3部分 字符串、元組以及與用戶的交互
第7章 介紹字符串對(duì)象:字符序列 59
7.1 字符串就是字符序列 60
7.2 字符串的基本操作 60
7.2.1 創(chuàng)建字符串對(duì)象 60
7.2.2 理解字符串的索引 61
7.2.3 理解字符串的截取 62
7.3 字符串對(duì)象的其他操作 63
7.3.1 使用len()獲取字符串的字符數(shù)量 63
7.3.2 用upper()和lower()進(jìn)行字母大小寫(xiě)的轉(zhuǎn)換 64
7.4 總結(jié) 65
7.5 章末檢測(cè) 65
第8章 字符串的高級(jí)操作 66
8.1 與子字符串有關(guān)的操作 67
8.1.1 使用find()在字符串中查找一個(gè)特定的子字符串 67
8.1.2 用“in”判斷字符串中是否包含某個(gè)子字符串 68
8.1.3 用count()獲取一個(gè)子字符串的出現(xiàn)次數(shù) 69
8.1.4 用replace()替換子字符串 69
8.2 數(shù)學(xué)操作 70
8.3 總結(jié) 71
8.4 章末檢測(cè) 71
第9章 簡(jiǎn)單的錯(cuò)誤消息 72
9.1 輸入語(yǔ)句并嘗試執(zhí)行 72
9.2 理解字符串錯(cuò)誤消息 73
9.3 總結(jié) 74
9.4 章末檢測(cè) 74
第 10章 元組對(duì)象:任意類(lèi)型的對(duì)象序列 75
10.1 元組就是數(shù)據(jù)序列 76
10.2 理解對(duì)元組的操作 77
10.2.1 用len()獲取元組的長(zhǎng)度 77
10.2.2 用[]獲取元組索引以及截取元組的部分內(nèi)容 77
10.2.3 執(zhí)行數(shù)學(xué)操作 79
10.2.4 在元組內(nèi)部交換對(duì)象 79
10.3 總結(jié) 80
10.4 章末檢測(cè) 80
第 11章 與用戶的交互 81
11.1 顯示輸出 82
11.1.1 打印表達(dá)式 82
11.1.2 打印多個(gè)對(duì)象 83
11.2 獲取用戶的輸入 83
11.2.1 提示用戶進(jìn)行輸入 84
11.2.2 讀取輸入 84
11.2.3 把輸入存儲(chǔ)在變量中 85
11.2.4 把用戶的輸入轉(zhuǎn)換為不同類(lèi)型 85
11.2.5 要求更多的輸入 86
11.3 總結(jié) 87
11.4 章末檢測(cè) 87
第 12章 階段性項(xiàng)目:姓名的混搭 88
12.1 理解問(wèn)題陳述 89
12.1.1 畫(huà)出程序的基本結(jié)構(gòu) 89
12.1.2 設(shè)計(jì)例子 90
12.1.3 把問(wèn)題抽象化為偽碼 90
12.2 分割名字和姓氏 91
12.2.1 尋找名字和姓氏之間的空格 91
12.2.2 使用變量保存經(jīng)過(guò)處理的值 91
12.2.3 對(duì)到目前為止完成的工作進(jìn)行測(cè)試 92
12.3 存儲(chǔ)所有名字的一半 93
12.4 對(duì)名字的一半進(jìn)行組合 94
12.5 總結(jié) 95
第4部分 在程序中做出選擇
第 13章 在程序中引入選擇機(jī)制 99
13.1 根據(jù)條件做出選擇 100
13.1.1 是否問(wèn)題和真假語(yǔ)句 100
13.1.2 在語(yǔ)句中添加條件 101
13.2 編寫(xiě)代碼做出選擇 101
13.2.1 一個(gè)例子 102
13.2.2 做出選擇的代碼:基本方式 103
13.3 程序的結(jié)構(gòu)變化 103
13.3.1 做出多個(gè)選擇 104
13.3.2 根據(jù)另一個(gè)選擇結(jié)果做出選擇 104
13.3.3 一個(gè)更加復(fù)雜的嵌套的條件的例子 106
13.4 總結(jié) 108
13.5 章末檢測(cè) 108
第 14章 做出更復(fù)雜的選擇 109
14.1 組合多個(gè)條件 110
14.1.1 由真/假表達(dá)式組成的條件 111
14.1.2 操作符的優(yōu)先級(jí)規(guī)則 112
14.2 選擇需要執(zhí)行的代碼行 114
14.2.1 執(zhí)行某個(gè)操作 114
14.2.2 綜合討論 117
14.2.3 對(duì)代碼塊進(jìn)行的思考 119
14.3 總結(jié) 120
14.4 章末檢測(cè) 121
第 15章 階段性項(xiàng)目:冒險(xiǎn)游戲 122
15.1 制定游戲規(guī)則 122
15.2 創(chuàng)建不同的路徑 123
15.3 更多的選項(xiàng)?可以,盡管?chē)L試 124
15.4 總結(jié) 126
第5部分 重復(fù)執(zhí)行任務(wù)
第 16章 用循環(huán)重復(fù)任務(wù) 129
16.1 重復(fù)一個(gè)任務(wù) 130
16.1.1 在程序中引入非線性結(jié)構(gòu) 130
16.1.2 無(wú)限循環(huán) 131
16.2 循環(huán)一定的次數(shù) 132
16.3 循環(huán)N次 134
16.3.1 常見(jiàn)的0到N–1的循環(huán) 135
16.3.2 展開(kāi)循環(huán) 135
16.4 總結(jié) 136
16.5 章末檢測(cè) 136
第 17章 自定義的循環(huán) 137
17.1 自定義的循環(huán) 138
17.2 對(duì)字符串進(jìn)行循環(huán) 139
17.3 總結(jié) 141
17.4 章末檢測(cè) 141
第 18章 在條件滿足時(shí)一直重復(fù)任務(wù) 143
18.1 在條件為真時(shí)保持循環(huán) 144
18.1.1 通過(guò)循環(huán)進(jìn)行猜數(shù) 144
18.1.2 while循環(huán) 145
18.1.3 無(wú)限循環(huán) 146
18.2 for循環(huán)和while循環(huán)的比較 147
18.3 對(duì)循環(huán)進(jìn)行控制 149
18.3.1 提前退出循環(huán) 149
18.3.2 回到循環(huán)的開(kāi)始位置 150
18.4 總結(jié) 152
18.5 章末檢測(cè) 152
第 19章 階段性項(xiàng)目:拼字游戲(藝術(shù)版) 153
19.1 理解問(wèn)題陳述 154
19.1.1 更改所有合法單詞的表示形式 154
19.1.2 用給定的字母卡組建一個(gè)合法的單詞 156
19.2 把代碼劃分為代碼段 159
19.3 總結(jié) 161
第6部分 將代碼組織為可復(fù)用的代碼塊
第 20章 創(chuàng)建持久性的程序 165
20.1 把一個(gè)較大的任務(wù)分解為更小的任務(wù) 166
20.1.1 在線訂購(gòu)一件商品 166
20.1.2 理解主要概念 168
20.2 在編程中引入黑盒代碼 169
20.2.1 使用代碼模塊 169
20.2.2 代碼的抽象化 169
20.2.3 復(fù)用代碼 170
20.3 子任務(wù)存在于它們自己的環(huán)境中 172
20.4 總結(jié) 173
20.5 章末檢測(cè) 174
第 21章 用函數(shù)實(shí)現(xiàn)模塊化和抽象 175
21.1 編寫(xiě)函數(shù) 176
21.1.1 函數(shù)基礎(chǔ)知識(shí):函數(shù)的輸入 177
21.1.2 函數(shù)基礎(chǔ)知識(shí):函數(shù)執(zhí)行的操作 178
21.1.3 函數(shù)基礎(chǔ)知識(shí):函數(shù)的返回信息 178
21.2 使用函數(shù) 179
21.2.1 返回多個(gè)值 180
21.2.2 沒(méi)有return語(yǔ)句的函數(shù) 182
21.3 編寫(xiě)函數(shù)說(shuō)明書(shū) 184
21.4 總結(jié) 184
21.5 章末檢測(cè) 185
第 22章 函數(shù)的高級(jí)操作 186
22.1 從兩個(gè)角度思考函數(shù) 187
22.1.1 函數(shù)編寫(xiě)者的角度 187
22.1.2 函數(shù)使用者的角度 187
22.2 函數(shù)的作用域 188
22.2.1 簡(jiǎn)單的作用域例子 188
22.2.2 作用域規(guī)則 188
22.3 嵌套函數(shù) 192
22.4 把函數(shù)作為參數(shù)傳遞 193
22.5 返回一個(gè)函數(shù) 194
22.6 總結(jié) 195
22.7 章末檢測(cè) 195
第 23章 階段性項(xiàng)目:對(duì)朋友進(jìn)行分析 197
23.1 讀取文件 198
23.1.1 文件格式 198
23.1.2 換行符 198
23.1.3 刪除換行符 199
23.1.4 使用元組存儲(chǔ)信息 200
23.1.5 返回什么 200
23.2 對(duì)用戶的輸入進(jìn)行凈化 201
23.3 測(cè)試和調(diào)試到目前為止所編寫(xiě)的代碼 202
23.3.1 文件對(duì)象 202
23.3.2 編寫(xiě)一個(gè)包含姓名和電話號(hào)碼的文本文件 202
23.3.3 打開(kāi)文件以進(jìn)行讀取 203
23.4 重復(fù)使用函數(shù) 203
23.5 分析信息 204
23.5.1 規(guī)范 204
23.5.2 幫助函數(shù) 205
23.6 總結(jié) 208
第7部分 使用可變數(shù)據(jù)類(lèi)型
第 24章 可變對(duì)象和不可變對(duì)象 211
24.1 不可變對(duì)象 212
24.2 對(duì)可變性的需求 214
24.3 總結(jié) 216
24.4 章末檢測(cè) 216
第 25章 對(duì)列表進(jìn)行操作 217
25.1 列表與元組的比較 218
25.2 創(chuàng)建列表和獲取特定位置的元素 219
25.3 對(duì)元素進(jìn)行計(jì)數(shù)以及獲取元素的位置 220
25.4 在列表中添加元素:append、insert和extend 221
25.4.1 使用append 221
25.4.2 使用insert 222
25.4.3 使用extend 222
25.5 從列表中移除元素:pop 223
25.6 更改元素的值 224
25.7 總結(jié) 225
25.8 章末檢測(cè) 226
第 26章 列表的高級(jí)操作 227
26.1 排序和反轉(zhuǎn)列表 228
26.2 列表的列表 229
26.3 把字符串轉(zhuǎn)換為列表 230
26.4 列表的應(yīng)用 231
26.4.1 堆!231
26.4.2 隊(duì)列 232
26.5 總結(jié) 233
26.6 章末檢測(cè) 233
第 27章 字典作為對(duì)象之間的映射 234
27.1 創(chuàng)建字典、鍵和值 236
27.2 在字典中添加鍵值對(duì) 237
27.3 從字典中刪除鍵值對(duì) 238
27.4 獲取字典中所有的鍵和值 239
27.5 為什么應(yīng)該使用字典 241
27.5.1 使用頻率字典進(jìn)行計(jì)數(shù) 241
27.5.2 創(chuàng)建非常規(guī)的字典 242
27.6 總結(jié) 243
27.7 章末檢測(cè) 243
第 28章 別名以及復(fù)制列表和字典 245
28.1 使用對(duì)象的別名 246
28.1.1 不可變對(duì)象的別名 246
28.1.2 可變對(duì)象的別名 247
28.1.3 可變對(duì)象作為函數(shù)的參數(shù) 249
28.2 創(chuàng)建可變對(duì)象的副本 250
28.2.1 復(fù)制可變對(duì)象的命令 250
28.2.2 獲取有序列表的副本 251
28.2.3 對(duì)可變對(duì)象進(jìn)行迭代時(shí)需要小心 252
28.2.4 為什么要存在別名 253
28.3 總結(jié) 254
28.4 章末檢測(cè) 254
第 29章 階段性項(xiàng)目:文檔的相似度 255
29.1 把問(wèn)題分解為不同的子任務(wù) 256
29.2 讀取文件信息 256
29.3 保存文件中的所有單詞 257
29.4 把單詞映射到它們的頻率 259
29.5 使用相似度比較兩個(gè)文檔 260
29.6 最終的整合 261
29.7 一個(gè)可能的擴(kuò)展 262
29.8 總結(jié) 263
第8部分 使用面向?qū)ο缶幊虅?chuàng)建自己的對(duì)象類(lèi)型
第30章 創(chuàng)建自己的對(duì)象類(lèi)型 267
30.1 為什么需要新類(lèi)型 268
30.2 什么組成了一個(gè)對(duì)象 269
30.2.1 對(duì)象的屬性 269
30.2.2 對(duì)象的行為 270
30.3 使用點(diǎn)號(hào)記法 270
30.4 總結(jié) 271
第31章 為對(duì)象類(lèi)型創(chuàng)建類(lèi) 272
31.1 用類(lèi)實(shí)現(xiàn)新的對(duì)象類(lèi)型 273
31.2 數(shù)據(jù)屬性作為對(duì)象的屬性 273
31.2.1 用_ _init_ _初始化對(duì)象 274
31.2.2 在_ _init_ _內(nèi)部創(chuàng)建對(duì)象屬性 274
31.3 方法作為對(duì)象的操作和行為 275
31.4 使用定義的對(duì)象類(lèi)型 276
31.5 在_ _init_ _中創(chuàng)建帶參數(shù)的類(lèi) 277
31.6 作用于類(lèi)名而不是對(duì)象的點(diǎn)號(hào)記法 278
31.7 總結(jié) 279
31.8 章末檢測(cè) 279
第32章 使用自己的對(duì)象類(lèi)型 280
32.1 定義堆棧對(duì)象 281
32.1.1 選擇數(shù)據(jù)屬性 281
32.1.2 實(shí)現(xiàn)Stack類(lèi)的方法 282
32.2 使用Stack對(duì)象 283
32.2.1 創(chuàng)建一個(gè)煎餅堆!283
32.2.2 創(chuàng)建一個(gè)圓堆!284
32.3 總結(jié) 287
32.4 章末檢測(cè) 287
第33章 對(duì)類(lèi)進(jìn)行自定義 288
33.1 覆寫(xiě)一個(gè)特殊的方法 289
33.2 在自己的類(lèi)中覆寫(xiě)print()方法 291
33.3 背后發(fā)生的事情 292
33.4 可以對(duì)類(lèi)做什么 293
33.5 總結(jié) 294
33.6 章末檢測(cè) 294
第34章 階段性項(xiàng)目:牌類(lèi)游戲 295
34.1 使用已經(jīng)存在的類(lèi) 296
34.2 詳細(xì)分析游戲規(guī)則 296
34.3 定義Player類(lèi) 297
34.4 定義CardDeck類(lèi) 298
34.5 模擬牌類(lèi)游戲 299
34.5.1 設(shè)置對(duì)象 299
34.5.2 模擬游戲中的回合 300
34.6 用類(lèi)實(shí)現(xiàn)模塊化和抽象 301
34.7 總結(jié) 302
第9部分 使用程序庫(kù)完善自己的程序
第35章 實(shí)用的程序庫(kù) 305
35.1 導(dǎo)入程序庫(kù) 306
35.2 用math庫(kù)進(jìn)行數(shù)學(xué)運(yùn)算 308
35.3 用random庫(kù)操作隨機(jī)數(shù) 309
35.3.1 隨機(jī)化的列表 309
35.3.2 模擬概率游戲 310
35.3.3 使用種子重復(fù)結(jié)果 311
35.4 用time庫(kù)對(duì)程序進(jìn)行計(jì)時(shí) 312
35.4.1 使用時(shí)鐘 312
35.4.2 使程序暫停運(yùn)行 312
35.5 總結(jié) 313
35.6 章末檢測(cè) 313
第36章 測(cè)試和調(diào)試程序 314
36.1 使用unittest程序庫(kù) 315
36.2 將程序與測(cè)試分離 316
36.3 調(diào)試代碼 319
36.4 總結(jié) 321
36.5 章末檢測(cè) 322
第37章 圖形用戶接口程序庫(kù) 323
37.1 一個(gè)圖形用戶接口庫(kù) 323
37.2 使用tkinter庫(kù)設(shè)置程序 324
37.3 添加部件 325
37.4 添加事件處理函數(shù) 327
37.5 總結(jié) 329
37.6 章末檢測(cè) 330
第38章 階段性項(xiàng)目:追逐游戲 331
38.1 確認(rèn)問(wèn)題的組成部分 332
38.2 在窗口中創(chuàng)建兩個(gè)形狀 332
38.3 在畫(huà)布中移動(dòng)形狀 335
38.4 檢測(cè)形狀之間的碰撞 337
38.5 可能的擴(kuò)展 338
38.6 總結(jié) 339
附錄A 各章習(xí)題的答案 340
附錄B Python語(yǔ)法摘要 381
附錄C 有趣的Python程序庫(kù) 384