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