本書作者在構(gòu)建Python程序的過程中,將經(jīng)過證明的、做過類測(cè)試的、回歸基本的策略首次引入到Python程序設(shè)計(jì)教學(xué)中。本書以聚焦問題解決的分層漸進(jìn)方法介紹了編程的基本原理,并在各個(gè)章節(jié)增加了新的語(yǔ)法和概念,以及展示了好的編程風(fēng)格應(yīng)該是什么樣的,分階段開發(fā)了一個(gè)復(fù)雜的程序。本書關(guān)注的是問題的解決,強(qiáng)調(diào)算法思維。
出版者的話
譯者序
前言
第1章 Python編程簡(jiǎn)介 1
1.1 計(jì)算的基本概念 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 一個(gè)完整的Python程序 7
1.2.1 打印輸出 9
1.2.2 字符串文字(字符串) 9
1.2.3 轉(zhuǎn)義序列 10
1.2.4 打印復(fù)雜圖形 11
1.2.5 注釋、空白和可讀性 12
1.3 程序錯(cuò)誤 14
1.3.1 語(yǔ)法錯(cuò)誤 15
1.3.2 邏輯錯(cuò)誤 17
1.4 程序分解 17
1.4.1 函數(shù) 18
1.4.2 控制流 21
1.4.3 標(biāo)識(shí)符和關(guān)鍵字 23
1.4.4 調(diào)用其他函數(shù)的函數(shù) 24
1.4.5 運(yùn)行時(shí)錯(cuò)誤的例子 26
1.5 案例研究:繪圖 27
1.5.1 結(jié)構(gòu)化版本 27
1.5.2 沒有冗余的最終版本 29
1.5.3 執(zhí)行流分析 30
本章小結(jié) 31
自測(cè)題 32
習(xí)題 35
編程項(xiàng)目 39
第2章 數(shù)據(jù)和確定循環(huán) 40
2.1 基本數(shù)據(jù)概念 40
2.1.1 數(shù)據(jù)類型 40
2.1.2 表達(dá)式 41
2.1.3 字面量 43
2.1.4 算術(shù)運(yùn)算符 44
2.1.5 運(yùn)算優(yōu)先級(jí) 46
2.1.6 混合和轉(zhuǎn)換類型 48
2.2 變量 49
2.2.1 使用變量的程序 52
2.2.2 自增/自減運(yùn)算符 56
2.2.3 打印多個(gè)值 57
2.3 for循環(huán) 59
2.3.1 使用循環(huán)變量 62
2.3.2 關(guān)于循環(huán)范圍的細(xì)節(jié) 64
2.3.3 字符串乘法與打印部分行 67
2.3.4 嵌套for循環(huán) 70
2.4 管理復(fù)雜性 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 增加一個(gè)常量 84
本章小結(jié) 86
自測(cè)題 86
習(xí)題 91
編程項(xiàng)目 94
第3章 參數(shù)與圖形 98
3.1 參數(shù) 98
3.1.1 參數(shù)的機(jī)制 103
3.1.2 參數(shù)的限制 105
3.1.3 多個(gè)參數(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 返回多個(gè)值 123
3.3 交互式程序 124
3.4 圖形 128
3.4.1 DrawingPanel簡(jiǎn)介 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
自測(cè)題 153
習(xí)題 158
編程項(xiàng)目 164
第4章 條件執(zhí)行 166
4.1 if/else語(yǔ)句 166
4.1.1 關(guān)系運(yùn)算符 168
4.1.2 if/else語(yǔ)句嵌套 170
4.1.3 if/else語(yǔ)句分解 174
4.1.4 多個(gè)判別條件 176
4.2 累積算法 176
4.2.1 累積求和 176
4.2.2 求最小/最大值循環(huán) 178
4.2.3 使用if語(yǔ)句的累積求和 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è)計(jì)啟發(fā)式 212
本章小結(jié) 216
自測(cè)題 216
習(xí)題 221
編程項(xiàng)目 223
第5章 程序邏輯與不確定循環(huán) 224
5.1 while循環(huán) 224
5.1.1 尋找最小因數(shù)的循環(huán) 226
5.1.2 循環(huán)的啟動(dòng) 227
5.2 柵欄算法 230
5.2.1 帶if語(yǔ)句的柵欄循環(huán) 232
5.2.2 哨兵循環(huán) 234
5.2.3 帶最小/最大值的哨兵循環(huán) 236
5.3 布爾邏輯 238
5.3.1 邏輯運(yùn)算符 239
5.3.2 布爾變量與標(biāo)志 241
5.3.3 謂詞函數(shù) 243
5.3.4 布爾Zen 245
5.3.5 短路求值 248
5.4 健壯的程序 251
5.4.1 try/except語(yǔ)句 252
5.4.2 處理用戶錯(cuò)誤 255
5.5 斷言與程序邏輯 256
5.5.1 針對(duì)斷言的推理 258
5.5.2 一個(gè)詳細(xì)的斷言示例 259
5.6 案例研究:數(shù)字猜謎游戲 262
5.6.1 不帶提示的初始版本 263
5.6.2 帶提示的隨機(jī)化版本 264
5.6.3 健壯的最終版本 267
本章小結(jié) 270
自測(cè)題 270
習(xí)題 276
編程項(xiàng)目 279
第6章 文件處理 280
6.1 文件讀取基礎(chǔ)知識(shí) 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 基于標(biāo)記的處理 292
6.2.1 數(shù)值輸入 294
6.2.2 處理非法輸入 295
6.2.3 行與標(biāo)記的混合使用 296
6.2.4 處理不同數(shù)量的標(biāo)記 297
6.2.5 復(fù)雜的輸入文件 301
6.3 高級(jí)文件處理 303
6.3.1 多行輸入記錄 303
6.3.2 文件輸出 305
6.3.3 從網(wǎng)頁(yè)中讀取數(shù)據(jù) 308
6.4 案例研究:郵政編碼查詢 310
本章小結(jié) 316
自測(cè)題 316
習(xí)題 318
編程項(xiàng)目 321
第7章 列表 323
7.1 列表基礎(chǔ)知識(shí) 323
7.1.1 創(chuàng)建列表 324
7.1.2 訪問列表元素 326
7.1.3 遍歷列表 330
7.1.4 完整列表程序 332
7.1.5 隨機(jī)訪問 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ù)的移動(dòng) 352
7.2.6 循環(huán)嵌套算法 355
7.2.7 列表推導(dǎo) 356
7.3 引用語(yǔ)義 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)計(jì)值 382
7.5.2 完成程序 385
本章小結(jié) 389
自測(cè)題 390
習(xí)題 395
編程項(xiàng)目 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 字典的高級(jí)應(yīng)用 409
8.2.1 字典的統(tǒng)計(jì) 409
8.2.2 嵌套的數(shù)據(jù)集合 414
8.2.3 字典推導(dǎo) 417
8.3 集合 419
8.3.1 集合的基本概念 419
8.3.2 集合操作 422
8.3.3 集合效率 425
8.3.4 集合示例:彩票 427
本章小結(jié) 429
自測(cè)題 429
習(xí)題 433
編程項(xiàng)目 434
第9章 遞歸 436
9.1 遞歸思維 436
9.1.1 一個(gè)非編程的示例 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 案例研究:前綴計(jì)算器 477
9.5.1 中綴、前綴和后綴表示法 478
9.5.2 計(jì)算前綴表達(dá)式 478
9.5.3 完整程序 481
本章小結(jié) 483
自測(cè)題 484
習(xí)題 487
編程項(xiàng)目 490
第10章 搜索和排序 492
10.1 搜索和排序庫(kù) 492
10.1.1 二分查找 493
10.1.2 排序 498
10.1.3 洗牌 499
10.2 程序復(fù)雜度 500
10.2.1 實(shí)證分析 502
10.2.2 復(fù)雜度類 507
10.3 實(shí)現(xiàn)搜索和排序的算法 509
10.3.1 順序搜索 509
10.3.2 二分查找 510
10.3.3 遞歸二分查找 512
10.3.4 選擇排序 514
10.4 案例研究:實(shí)現(xiàn)歸并排序 516
10.4.1 拆分和合并列表 517
10.4.2 遞歸歸并排序 519
10.4.3 運(yùn)行性能 522
10.4.4 混合方法 524
本章小結(jié) 525
自測(cè)題 526
習(xí)題 529
編程項(xiàng)目 531
第11章 類與對(duì)象 532
11.1 面向?qū)ο缶幊? 532
11.1.1 類和對(duì)象 533
11.1.2 日期對(duì)象 534
11.2 對(duì)象狀態(tài)和行為 535
11.2.1 數(shù)據(jù)屬性 535
11.2.2 初始化器 537
11.2.3 方法 540
11.2.4 訪問器和賦值器 543
11.2.5 打印對(duì)象狀態(tài) 546
11.2.6 對(duì)象相等與排序 547
11.3 封裝 549
11.3.1 封裝的目的 550
11.3.2 私有屬性和屬性方法 550
11.3.3 類不變性 555
11.4 案例研究:股票類設(shè)計(jì) 558
11.4.1 面向?qū)ο笤O(shè)計(jì)啟發(fā)式 559
11.4.2 Stock屬性和方法頭 560
11.4.3 Stock方法和屬性方法實(shí)現(xiàn) 562
本章小結(jié) 564
自測(cè)題 565
習(xí)題 566
編程項(xiàng)目 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表達(dá)式 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 列表推導(dǎo) 584
12.3 函數(shù)閉包 585
12.3.1 生成器函數(shù) 588
12.3.2 惰性求值 591
12.3.3 可迭代對(duì)象 592
12.3.4 生成器表達(dá)式 593
12.4 案例研究:完美數(shù)值 594
12.4.1 求和 595
12.4.2 第五個(gè)完美數(shù)值 598
12.4.3 利用并發(fā) 599
本章小結(jié) 602
自測(cè)題 602
習(xí)題 603
編程項(xiàng)目 604
附錄A Python摘要 605