本書作者在構(gòu)建Python程序的過程中,將經(jīng)過證明的、做過類測試的、回歸基本的策略首次引入到Python程序設(shè)計教學中。本書以聚焦問題解決的分層漸進方法介紹了編程的基本原理,并在各個章節(jié)增加了新的語法和概念,以及展示了好的編程風格應(yīng)該是什么樣的,分階段開發(fā)了一個復雜的程序。本書關(guān)注的是問題的解決,強調(diào)算法思維。
出版者的話
譯者序
前言
第1章 Python編程簡介 1
1.1 計算的基本概念 1
1.1.1 為何編程 1
1.1.2 硬件和軟件 2
1.1.3 數(shù)字領(lǐng)域 3
1.1.4 編程的過程 4
1.1.5 為何選擇Python 5
1.1.6 Python編程環(huán)境 6
1.2 一個完整的Python程序 7
1.2.1 打印輸出 9
1.2.2 字符串文字(字符串) 9
1.2.3 轉(zhuǎn)義序列 10
1.2.4 打印復雜圖形 11
1.2.5 注釋、空白和可讀性 12
1.3 程序錯誤 14
1.3.1 語法錯誤 15
1.3.2 邏輯錯誤 17
1.4 程序分解 17
1.4.1 函數(shù) 18
1.4.2 控制流 21
1.4.3 標識符和關(guān)鍵字 23
1.4.4 調(diào)用其他函數(shù)的函數(shù) 24
1.4.5 運行時錯誤的例子 26
1.5 案例研究:繪圖 27
1.5.1 結(jié)構(gòu)化版本 27
1.5.2 沒有冗余的最終版本 29
1.5.3 執(zhí)行流分析 30
本章小結(jié) 31
自測題 32
習題 35
編程項目 39
第2章 數(shù)據(jù)和確定循環(huán) 40
2.1 基本數(shù)據(jù)概念 40
2.1.1 數(shù)據(jù)類型 40
2.1.2 表達式 41
2.1.3 字面量 43
2.1.4 算術(shù)運算符 44
2.1.5 運算優(yōu)先級 46
2.1.6 混合和轉(zhuǎn)換類型 48
2.2 變量 49
2.2.1 使用變量的程序 52
2.2.2 自增/自減運算符 56
2.2.3 打印多個值 57
2.3 for循環(huán) 59
2.3.1 使用循環(huán)變量 62
2.3.2 關(guān)于循環(huán)范圍的細節(jié) 64
2.3.3 字符串乘法與打印部分行 67
2.3.4 嵌套for循環(huán) 70
2.4 管理復雜性 72
2.4.1 作用域 72
2.4.2 偽代碼 74
2.4.3 常量 78
2.5 案例研究:沙漏圖 80
2.5.1 問題分解和偽代碼 81
2.5.2 初始結(jié)構(gòu)化版本 83
2.5.3 增加一個常量 84
本章小結(jié) 86
自測題 86
習題 91
編程項目 94
第3章 參數(shù)與圖形 98
3.1 參數(shù) 98
3.1.1 參數(shù)的機制 103
3.1.2 參數(shù)的限制 105
3.1.3 多個參數(shù) 107
3.1.4 參數(shù)與常量 110
3.1.5 可選參數(shù) 110
3.2 返回值 111
3.2.1 math模塊 113
3.2.2 random模塊 116
3.2.3 定義返回值的函數(shù) 119
3.2.4 返回多個值 123
3.3 交互式程序 124
3.4 圖形 128
3.4.1 DrawingPanel簡介 129
3.4.2 畫線和形狀 131
3.4.3 顏色 133
3.4.4 使用循環(huán)畫圖 137
3.4.5 文本與字體 139
3.4.6 圖像 141
3.4.7 畫圖過程分解 141
3.5 案例研究:拋射軌跡 144
3.5.1 非結(jié)構(gòu)化解決方案 146
3.5.2 結(jié)構(gòu)化解決方案 148
3.5.3 圖形版本 150
本章小結(jié) 153
自測題 153
習題 158
編程項目 164
第4章 條件執(zhí)行 166
4.1 if/else語句 166
4.1.1 關(guān)系運算符 168
4.1.2 if/else語句嵌套 170
4.1.3 if/else語句分解 174
4.1.4 多個判別條件 176
4.2 累積算法 176
4.2.1 累積求和 176
4.2.2 求最小/最大值循環(huán) 178
4.2.3 使用if語句的累積求和 181
4.2.4 舍入誤差 183
4.3 函數(shù)中的條件執(zhí)行 185
4.3.1 前置條件和后置條件 185
4.3.2 拋出異常 186
4.3.3 回顧返回值 189
4.3.4 分支選擇推理 191
4.4 字符串 193
4.4.1 字符串方法 194
4.4.2 按索引訪問字符 196
4.4.3 字母和數(shù)值之間的轉(zhuǎn)換 200
4.4.4 累積文本算法 202
4.5 案例研究:基礎(chǔ)代謝率 203
4.5.1 單人非結(jié)構(gòu)化BMR解決方案 204
4.5.2 雙人非結(jié)構(gòu)化BMR解決方案 207
4.5.3 雙人結(jié)構(gòu)化BMR解決方案 209
4.5.4 過程式設(shè)計啟發(fā)式 212
本章小結(jié) 216
自測題 216
習題 221
編程項目 223
第5章 程序邏輯與不確定循環(huán) 224
5.1 while循環(huán) 224
5.1.1 尋找最小因數(shù)的循環(huán) 226
5.1.2 循環(huán)的啟動 227
5.2 柵欄算法 230
5.2.1 帶if語句的柵欄循環(huán) 232
5.2.2 哨兵循環(huán) 234
5.2.3 帶最小/最大值的哨兵循環(huán) 236
5.3 布爾邏輯 238
5.3.1 邏輯運算符 239
5.3.2 布爾變量與標志 241
5.3.3 謂詞函數(shù) 243
5.3.4 布爾Zen 245
5.3.5 短路求值 248
5.4 健壯的程序 251
5.4.1 try/except語句 252
5.4.2 處理用戶錯誤 255
5.5 斷言與程序邏輯 256
5.5.1 針對斷言的推理 258
5.5.2 一個詳細的斷言示例 259
5.6 案例研究:數(shù)字猜謎游戲 262
5.6.1 不帶提示的初始版本 263
5.6.2 帶提示的隨機化版本 264
5.6.3 健壯的最終版本 267
本章小結(jié) 270
自測題 270
習題 276
編程項目 279
第6章 文件處理 280
6.1 文件讀取基礎(chǔ)知識 280
6.1.1 數(shù)據(jù)和文件 280
6.1.2 在Python中讀取文件 282
6.1.3 基于行的文件處理 285
6.1.4 文件結(jié)構(gòu)與消耗式輸入 286
6.1.5 提示輸入文件 290
6.2 基于標記的處理 292
6.2.1 數(shù)值輸入 294
6.2.2 處理非法輸入 295
6.2.3 行與標記的混合使用 296
6.2.4 處理不同數(shù)量的標記 297
6.2.5 復雜的輸入文件 301
6.3 高級文件處理 303
6.3.1 多行輸入記錄 303
6.3.2 文件輸出 305
6.3.3 從網(wǎng)頁中讀取數(shù)據(jù) 308
6.4 案例研究:郵政編碼查詢 310
本章小結(jié) 316
自測題 316
習題 318
編程項目 321
第7章 列表 323
7.1 列表基礎(chǔ)知識 323
7.1.1 創(chuàng)建列表 324
7.1.2 訪問列表元素 326
7.1.3 遍歷列表 330
7.1.4 完整列表程序 332
7.1.5 隨機訪問 335
7.1.6 列表方法 336
7.2 列表遍歷算法 342
7.2.1 列表作為參數(shù) 342
7.2.2 列表的查找 343
7.2.3 替換與刪除值 347
7.2.4 列表的逆序 348
7.2.5 列表中數(shù)據(jù)的移動 352
7.2.6 循環(huán)嵌套算法 355
7.2.7 列表推導 356
7.3 引用語義 357
7.3.1 值與引用 357
7.3.2 修改列表參數(shù) 360
7.3.3 空值 361
7.3.4 可變性 363
7.3.5 元組 366
7.4 多維列表 371
7.4.1 矩形列表 371
7.4.2 鋸齒狀列表 373
7.4.3 像素列表 377
7.5 案例研究:本福德定律 381
7.5.1 統(tǒng)計值 382
7.5.2 完成程序 385
本章小結(jié) 389
自測題 390
習題 395
編程項目 397
第8章 字典與集合 399
8.1 字典的基本概念 399
8.1.1 創(chuàng)建字典 401
8.1.2 字典操作 404
8.1.3 遍歷字典 406
8.1.4 字典排序 408
8.2 字典的高級應(yīng)用 409
8.2.1 字典的統(tǒng)計 409
8.2.2 嵌套的數(shù)據(jù)集合 414
8.2.3 字典推導 417
8.3 集合 419
8.3.1 集合的基本概念 419
8.3.2 集合操作 422
8.3.3 集合效率 425
8.3.4 集合示例:彩票 427
本章小結(jié) 429
自測題 429
習題 433
編程項目 434
第9章 遞歸 436
9.1 遞歸思維 436
9.1.1 一個非編程的示例 436
9.1.2 從迭代到遞歸 438
9.1.3 遞歸解決方案的結(jié)構(gòu) 441
9.1.4 反轉(zhuǎn)文件 442
9.1.5 遞歸調(diào)用堆棧 444
9.2 遞歸函數(shù)和數(shù)據(jù) 449
9.2.1 整數(shù)的冪 449
9.2.2 最大公約數(shù) 451
9.2.3 目錄爬蟲 455
9.3 遞歸圖形 459
9.3.1 Cantor集 459
9.3.2 Sierpinski三角形 461
9.4 遞歸回溯 464
9.4.1 向北/向東旅行 464
9.4.2 八皇后問題 469
9.4.3 在找到解后停止 474
9.5 案例研究:前綴計算器 477
9.5.1 中綴、前綴和后綴表示法 478
9.5.2 計算前綴表達式 478
9.5.3 完整程序 481
本章小結(jié) 483
自測題 484
習題 487
編程項目 490
第10章 搜索和排序 492
10.1 搜索和排序庫 492
10.1.1 二分查找 493
10.1.2 排序 498
10.1.3 洗牌 499
10.2 程序復雜度 500
10.2.1 實證分析 502
10.2.2 復雜度類 507
10.3 實現(xiàn)搜索和排序的算法 509
10.3.1 順序搜索 509
10.3.2 二分查找 510
10.3.3 遞歸二分查找 512
10.3.4 選擇排序 514
10.4 案例研究:實現(xiàn)歸并排序 516
10.4.1 拆分和合并列表 517
10.4.2 遞歸歸并排序 519
10.4.3 運行性能 522
10.4.4 混合方法 524
本章小結(jié) 525
自測題 526
習題 529
編程項目 531
第11章 類與對象 532
11.1 面向?qū)ο缶幊? 532
11.1.1 類和對象 533
11.1.2 日期對象 534
11.2 對象狀態(tài)和行為 535
11.2.1 數(shù)據(jù)屬性 535
11.2.2 初始化器 537
11.2.3 方法 540
11.2.4 訪問器和賦值器 543
11.2.5 打印對象狀態(tài) 546
11.2.6 對象相等與排序 547
11.3 封裝 549
11.3.1 封裝的目的 550
11.3.2 私有屬性和屬性方法 550
11.3.3 類不變性 555
11.4 案例研究:股票類設(shè)計 558
11.4.1 面向?qū)ο笤O(shè)計啟發(fā)式 559
11.4.2 Stock屬性和方法頭 560
11.4.3 Stock方法和屬性方法實現(xiàn) 562
本章小結(jié) 564
自測題 565
習題 566
編程項目 569
第12章 函數(shù)式編程 570
12.1 函數(shù)式編程的概念 570
12.1.1 副作用 571
12.1.2 一等函數(shù) 572
12.1.3 高階函數(shù) 573
12.1.4 lambda表達式 575
12.2 數(shù)據(jù)集合的函數(shù)操作 578
12.2.1 map函數(shù) 579
12.2.2 filter函數(shù) 580
12.2.3 reduce函數(shù) 581
12.2.4 列表推導 584
12.3 函數(shù)閉包 585
12.3.1 生成器函數(shù) 588
12.3.2 惰性求值 591
12.3.3 可迭代對象 592
12.3.4 生成器表達式 593
12.4 案例研究:完美數(shù)值 594
12.4.1 求和 595
12.4.2 第五個完美數(shù)值 598
12.4.3 利用并發(fā) 599
本章小結(jié) 602
自測題 602
習題 603
編程項目 604
附錄A Python摘要 605