本書以培養(yǎng)讀者以計(jì)算機(jī)科學(xué)家一樣的思維方式來理解Python語(yǔ)言編程。貫穿全書的主體是如何思考、設(shè)計(jì)、開發(fā)的方法,而具體的編程語(yǔ)言,只是提供了一個(gè)具體場(chǎng)景方便介紹的媒介。
全書共21章,詳細(xì)介紹Python語(yǔ)言編程的方方面面。本書從基本的編程概念開始講起,包括語(yǔ)言的語(yǔ)法和語(yǔ)義,而且每個(gè)編程概念都有清晰的定義,引領(lǐng)讀者循序漸進(jìn)地學(xué)習(xí)變量、表達(dá)式、語(yǔ)句、函數(shù)和數(shù)據(jù)結(jié)構(gòu)。書中還探討了如何處理文件和數(shù)據(jù)庫(kù),如何理解對(duì)象、方法和面向?qū)ο缶幊,如何使用調(diào)試技巧來修正語(yǔ)法錯(cuò)誤、運(yùn)行時(shí)錯(cuò)誤和語(yǔ)義錯(cuò)誤。每一章都配有術(shù)語(yǔ)表和練習(xí)題,方便讀者鞏固所學(xué)的知識(shí)和技巧。此外,每一章都抽出一節(jié)來講解如何調(diào)試程序。作者針對(duì)每章所專注的語(yǔ)言特性,或者相關(guān)的開發(fā)問題,總結(jié)了調(diào)試的方方面面。
本書的第2版與第1版相比,做了很多更新,將編程語(yǔ)言從Python 2升級(jí)成Python 3,并修改了很多示例和練習(xí),增加了新的章節(jié),更全面地介紹Python語(yǔ)言。
這是一本實(shí)用的學(xué)習(xí)指南,適合沒有Python編程經(jīng)驗(yàn)的程序員閱讀,也適合高中或大學(xué)的學(xué)生、Python愛好者及需要了解編程基礎(chǔ)的人閱讀。對(duì)于首次接觸程序設(shè)計(jì)的人來說,是一本不可多得的佳作。
如果想要學(xué)習(xí)如何編程,從Python語(yǔ)言入手是一個(gè)很好的開端。本書從基本的編程概念開始,一步步引導(dǎo)讀者了解Python語(yǔ)言,再逐漸掌握函數(shù)、遞歸、數(shù)據(jù)結(jié)構(gòu)和面向?qū)ο笤O(shè)計(jì)等高階概念。本書第2版及其輔助代碼均已升級(jí),支持Python 3。
每章后的練習(xí)可以幫助讀者加深對(duì)剛學(xué)的編程概念的理解。本書是高中和大學(xué)階段的學(xué)生、自學(xué)者,以及需要了解編程基礎(chǔ)的專業(yè)人士的理想讀物。初學(xué)者可以在瀏覽器中學(xué)習(xí)如何開始Python編程。
? 從基礎(chǔ)開始,包括語(yǔ)言的語(yǔ)法和語(yǔ)義。
? 掌握每一個(gè)編程概念的清晰定義。
? 循序漸進(jìn)地學(xué)習(xí)值、變量、語(yǔ)句、函數(shù)和數(shù)據(jù)結(jié)構(gòu)。
? 了解如何操作文件和數(shù)據(jù)庫(kù)。
? 理解對(duì)象、方法和面向?qū)ο缶幊獭?br />
? 使用各種調(diào)試技巧來修復(fù)語(yǔ)法錯(cuò)誤、運(yùn)行時(shí)錯(cuò)誤和語(yǔ)義錯(cuò)誤。
? 通過一系列案例研究來探索函數(shù)、數(shù)據(jù)結(jié)構(gòu)和算法。
本書的示例代碼均在GitHub倉(cāng)庫(kù)中維護(hù),讀者很容易下載和修改。
Allen Downey是歐林工程學(xué)院的計(jì)算機(jī)科學(xué)教授,曾任教于韋爾斯利學(xué)院、科爾比學(xué)院和加州大學(xué)伯克利分校。他是加州大學(xué)伯克利分校的計(jì)算機(jī)科學(xué)博士,并擁有MIT的碩士和學(xué)士學(xué)位。
譯者介紹
趙普明 畢業(yè)清華大學(xué)計(jì)算機(jī)系,從事軟件開發(fā)行業(yè)近10年。從2.3版本開始接觸Python,工作中使用Python編寫腳本程序,用于快速原型構(gòu)建以及日志計(jì)算等日常作業(yè);業(yè)余時(shí),作為一個(gè)編程語(yǔ)言愛好者,對(duì)D、Kotlin、Lua、Clojure、Scala、Julia、Go等語(yǔ)言均有了解,但至今仍為Python獨(dú)特的風(fēng)格、簡(jiǎn)潔的設(shè)計(jì)而驚嘆。
第1章 程序之道 1
1.1 什么是程序 1
1.2 運(yùn)行Python 2
1.3 第一個(gè)程序 3
1.4 算術(shù)操作符 3
1.5 值和類型 4
1.6 形式語(yǔ)言和自然語(yǔ)言 5
1.7 調(diào)試 6
1.8 術(shù)語(yǔ)表 7
1.9 練習(xí) 8
第2章 變量、表達(dá)式和語(yǔ)句 9
2.1 賦值語(yǔ)句 9
2.2 變量名稱 9
2.3 表達(dá)式和語(yǔ)句 10
2.4 腳本模式 11
2.5 操作順序 12
2.6 字符串操作 13
2.7 注釋 13
2.8 調(diào)試 14
2.9 術(shù)語(yǔ)表 15
2.10 練習(xí) 16
第3章 函數(shù) 17
3.1 函數(shù)調(diào)用 17
3.2 數(shù)學(xué)函數(shù) 18
3.3 組合 19
3.4 添加新函數(shù) 19
3.5 定義和使用 21
3.6 執(zhí)行流程 21
3.7 形參和實(shí)參 22
3.8 變量和形參是局部的 23
3.9 棧圖 23
3.10 有返回值函數(shù)和無返回值函數(shù) 24
3.11 為什么要有函數(shù) 25
3.12 調(diào)試 26
3.13 術(shù)語(yǔ)表 26
3.14 練習(xí) 27
第4章 案例研究:接口設(shè)計(jì) 30
4.1 turtle模塊 30
4.2 簡(jiǎn)單重復(fù) 31
4.3 練習(xí) 32
4.4 封裝 33
4.5 泛化 34
4.6 接口設(shè)計(jì) 34
4.7 重構(gòu) 35
4.8 一個(gè)開發(fā)計(jì)劃 36
4.9 文檔字符串 37
4.10 調(diào)試 38
4.11 術(shù)語(yǔ)表 38
4.12 練習(xí) 39
第5章 條件和遞歸 41
5.1 向下取整除法操作符和求模操作符 41
5.2 布爾表達(dá)式 42
5.3 邏輯操作符 42
5.4 條件執(zhí)行 43
5.5 選擇執(zhí)行 43
5.6 條件鏈 44
5.7 嵌套條件 44
5.8 遞歸 45
5.9 遞歸函數(shù)的棧圖 46
5.10 無限遞歸 47
5.11 鍵盤輸入 47
5.12 調(diào)試 48
5.13 術(shù)語(yǔ)表 49
5.14 練習(xí) 50
第6章 有返回值的函數(shù) 53
6.1 返回值 53
6.2 增量開發(fā) 54
6.3 組合 56
6.4 布爾函數(shù) 57
6.5 再談遞歸 58
6.6 堅(jiān)持信念 59
6.7 另一個(gè)示例 60
6.8 檢查類型 60
6.9 調(diào)試 61
6.10 術(shù)語(yǔ)表 63
6.11 練習(xí) 63
第7章 迭代 65
7.1 重新賦值 65
7.2 更新變量 66
7.3 while語(yǔ)句 66
7.4 break語(yǔ)句 68
7.5 平方根 68
7.6 算法 70
7.7 調(diào)試 70
7.8 術(shù)語(yǔ)表 71
7.9 練習(xí) 71
第8章 字符串 73
8.1 字符串是一個(gè)序列 73
8.2 len 74
8.3 使用for循環(huán)進(jìn)行遍歷 74
8.4 字符串切片 75
8.5 字符串是不可變的 76
8.6 搜索 77
8.7 循環(huán)和計(jì)數(shù) 77
8.8 字符串方法 78
8.9 操作符in 79
8.10 字符串比較 79
8.11 調(diào)試 80
8.12 術(shù)語(yǔ)表 82
8.13 練習(xí) 82
第9章 案例分析:文字游戲 85
9.1 讀取單詞列表 85
9.2 練習(xí) 86
9.3 搜索 87
9.4 使用下標(biāo)循環(huán) 88
9.5 調(diào)試 90
9.6 術(shù)語(yǔ)表 90
9.7 練習(xí) 91
第10章 列表 93
10.1 列表是一個(gè)序列 93
10.2 列表是可變的 94
10.3 遍歷一個(gè)列表 95
10.4 列表操作 95
10.5 列表切片 96
10.6 列表方法 96
10.7 映射、過濾和化簡(jiǎn) 97
10.8 刪除元素 98
10.9 列表和字符串 99
10.10 對(duì)象和值 100
10.11 別名 101
10.12 列表參數(shù) 102
10.13 調(diào)試 103
10.14 術(shù)語(yǔ)表 104
10.15 練習(xí) 105
第11章 字典 108
11.1 字典是一種映射 108
11.2 使用字典作為計(jì)數(shù)器集合 110
11.3 循環(huán)和字典 111
11.4 反向查找 111
11.5 字典和列表 112
11.6 備忘 114
11.7 全局變量 115
11.8 調(diào)試 117
11.9 術(shù)語(yǔ)表 118
11.10 練習(xí) 119
第12章 元組 121
12.1 元組是不可變的 121
12.2 元組賦值 122
12.3 作為返回值的元組 123
12.4 可變長(zhǎng)參數(shù)元組 124
12.5 列表和元組 124
12.6 字典和元組 126
12.7 序列的序列 127
12.8 調(diào)試 128
12.9 術(shù)語(yǔ)表 129
12.10 練習(xí) 129
第13章 案例研究:選擇數(shù)據(jù)結(jié)構(gòu) 132
13.1 單詞頻率分析 132
13.2 隨機(jī)數(shù) 133
13.3 單詞直方圖 134
13.4 最常用的單詞 135
13.5 可選形參 136
13.6 字典減法 137
13.7 隨機(jī)單詞 138
13.8 馬爾可夫分析 138
13.9 數(shù)據(jù)結(jié)構(gòu) 140
13.10 調(diào)試 141
13.11 術(shù)語(yǔ)表 142
13.12 練習(xí) 143
第14章 文件 144
14.1 持久化 144
14.2 讀和寫 144
14.3 格式操作符 145
14.4 文件名和路徑 146
14.5 捕獲異!147
14.6 數(shù)據(jù)庫(kù) 148
14.7 封存 149
14.8 管道 150
14.9 編寫模塊 151
14.10 調(diào)試 152
14.11 術(shù)語(yǔ)表 152
14.12 練習(xí) 153
第15章 類和對(duì)象 155
15.1 用戶定義類型 155
15.2 屬性 156
15.3 矩形 157
15.4 作為返回值的實(shí)例 158
15.5 對(duì)象是可變的 159
15.6 復(fù)制 159
15.7 調(diào)試 161
15.8 術(shù)語(yǔ)表 161
15.9 練習(xí) 162
第16章 類和函數(shù) 163
16.1 時(shí)間 163
16.2 純函數(shù) 164
16.3 修改器 165
16.4 原型和計(jì)劃 166
16.5 調(diào)試 167
16.6 術(shù)語(yǔ)表 168
16.7 練習(xí) 168
第17章 類和方法 170
17.1 面向?qū)ο筇匦浴?70
17.2 打印對(duì)象 171
17.3 另一個(gè)示例 172
17.4 一個(gè)更復(fù)雜的示例 173
17.5 init方法 173
17.6 _ _str_ _方法 174
17.7 操作符重載 175
17.8 基于類型的分發(fā) 175
17.9 多態(tài) 177
17.10 接口和實(shí)現(xiàn) 177
17.11 調(diào)試 178
17.12 術(shù)語(yǔ)表 179
17.13 練習(xí) 179
第18章 繼承 181
18.1 卡片對(duì)象 181
18.2 類屬性 182
18.3 對(duì)比卡牌 183
18.4 牌組 184
18.5 打印牌組 185
18.6 添加、刪除、洗牌和排序 185
18.7 繼承 186
18.8 類圖 188
18.9 數(shù)據(jù)封裝 189
18.10 調(diào)試 190
18.11 術(shù)語(yǔ)表 191
18.12 練習(xí) 191
第19章 Python拾珍 194
19.1 條件表達(dá)式 194
19.2 列表理解 195
19.3 生成器表達(dá)式 196
19.4 any和all 197
19.5 集合 197
19.6 計(jì)數(shù)器 199
19.7 defaultdict 200
19.8 命名元組 201
19.9 收集關(guān)鍵詞參數(shù) 202
19.10 術(shù)語(yǔ)表 203
19.11 練習(xí) 203
第20章 調(diào)試 205
20.1 語(yǔ)法錯(cuò)誤 205
20.2 運(yùn)行時(shí)錯(cuò)誤 207
20.2.1 我的程序什么都不做 207
20.2.2 我的程序卡死了 207
20.2.3 無限循環(huán) 208
20.2.4 無限遞歸 208
20.2.5 執(zhí)行流程 208
20.2.6 當(dāng)我運(yùn)行程序,會(huì)得到一個(gè)異!209
20.2.7 我添加了太多print語(yǔ)句,被輸出淹沒了 210
20.3 語(yǔ)義錯(cuò)誤 210
20.3.1 我的程序運(yùn)行不正確 211
20.3.2 我有一個(gè)巨大而復(fù)雜的表達(dá)式,而它和我預(yù)料的不同 211
20.3.3 我有一個(gè)函數(shù),返回值和預(yù)期不同 212
20.3.4 我真的真的卡住了,我需要幫助 212
20.3.5 不行,我真的需要幫助 212
第21章 算法分析 214
21.1 增長(zhǎng)量級(jí) 215
21.2 Python基本操作的分析 217
21.3 搜索算法的分析 218
21.4 散列表 219
21.5 術(shù)語(yǔ)表 223
譯后記 224