本書是一本零基礎的Python編程入門書。全書介紹了Python的基本知識、條件語句、循環(huán)語句、列表、函數(shù),并涉及到數(shù)據(jù)結(jié)構、文件讀寫、算法等基本知識,引入了編程競賽中重要的軟件運行效率的概念。本書立足各編程挑戰(zhàn)網(wǎng)站上的真題,將編程的基本思想和Python的知識點拆解成小任務,使讀者在解題的過程中逐步探索,以親自上手實踐的方式學習編程。
本書適合想要零基礎學習編程和Python的人閱讀。
掌握Python可以讓計算機幫我們做各種各樣的事情,而實踐是掌握知識的有效方法。本書通過各大編程競賽網(wǎng)站的真題來講解Python編程知識,優(yōu)勢體現(xiàn)在:
1. 學習路線清晰,章節(jié)目標明確;
2. 由各編程網(wǎng)站上的真題推進章節(jié),可自行線上評測。
丹尼爾·辛格羅(Daniel Zingaro)博士是多倫多大學密西沙加分校計算機科學教學流中的獲獎副教授,他在主動學習方面的專長得到了國際認可。他也是《算法思維》(No Starch Press)的作者。
第 1章 啟程 1
1.1 我們要做的事情 1
1.2 Python Shell 2
1.2.1 Windows 2
1.2.2 macOS 3
1.2.3 Linux 3
問題1:單詞計數(shù) 4
挑戰(zhàn) 4
輸入 4
輸出 4
1.3 字符串 4
1.3.1 表示字符串 5
1.3.2 字符串操作符 5
1.3.3 字符串方法 6
1.4 整數(shù)和浮點數(shù) 7
1.4.1 變量 9
1.4.2 賦值語句 9
1.4.3 改變變量的值 10
1.5 使用變量來計數(shù)單詞 11
1.6 讀輸入 11
1.7 寫輸出 12
1.8 解決問題:一個完整的Python
程序 13
1.8.1 啟動文本編輯器 13
1.8.2 Windows 13
1.8.3 macOS 13
1.8.4 Linux 13
1.8.5 程序 13
1.8.6 運行程序 14
1.8.7 提交給裁判員 14
問題2:圓錐體積 15
挑戰(zhàn) 15
輸入 15
輸出 15
1.9 Python中的更多數(shù)學 15
1.9.1 訪問Pi 15
1.9.2 指數(shù) 16
1.10 字符串和整數(shù)之間的轉(zhuǎn)換 16
1.11 解決問題 18
1.12 小結(jié) 19
1.13 練習 19
1.14 備注 19
第 2章 做判斷 20
問題3:獲勝球隊 20
挑戰(zhàn) 20
輸入 20
輸出 21
2.1 有條件執(zhí)行 21
2.2 布爾類型 22
2.3 關系操作符 22
2.4 if語句 24
2.4.1 單獨的if 24
2.4.2 帶有elif的if 25
2.4.3 帶有else的if 26
2.5 解決問題 28
問題4:電話推銷員 29
挑戰(zhàn) 29
輸入 30
輸出 30
2.6 布爾操作符 30
2.6.1 or操作符 30
2.6.2 and操作符 31
2.6.3 not操作符 31
2.7 解決問題 32
2.8 注釋 34
2.9 輸入和輸出重定向 34
2.10 小結(jié) 35
2.11 練習 36
2.12 備注 36
第3章 重復代碼:定循環(huán) 37
問題5:三個杯子 37
挑戰(zhàn) 37
輸入 37
輸出 38
3.1 為什么要循環(huán)? 38
3.2 for循環(huán) 38
3.3 嵌套 40
3.4 解決問題 42
問題6:已占用停車位 44
挑戰(zhàn) 44
輸入 44
輸出 44
3.5 一種新循環(huán) 44
3.6 索引 45
3.7 循環(huán)的范圍 46
3.8 范圍用于循環(huán)遍歷索引 48
3.9 解決問題 49
問題7:數(shù)據(jù)套餐 50
挑戰(zhàn) 50
輸入 50
輸出 50
3.10 循環(huán)讀取輸入 50
3.11 解決問題 51
3.12 小結(jié) 52
3.13 練習 53
3.14 備注 53
第4章 重復代碼:不定循環(huán) 54
問題8:老虎機 54
挑戰(zhàn) 54
輸入 54
輸出 55
4.1 探索一個測試用例 55
4.2 for循環(huán)的局限性 56
4.3 while循環(huán) 57
4.3.1 使用while循環(huán) 57
4.3.2 循環(huán)中的嵌套循環(huán) 60
4.3.3 添加布爾操作符 61
4.4 解決問題 61
4.5 模操作符 64
4.6 F-字符串 66
問題9:歌曲播放列表 67
挑戰(zhàn) 67
輸入 67
輸出 68
4.7 字符串切片 68
4.8 解決問題 70
問題10:秘密句子 71
挑戰(zhàn) 72
輸入 72
輸出 72
4.9 for循環(huán)的另一個局限性 72
4.10 while循環(huán)遍歷索引 73
4.11 解決問題 75
4.12 break和continue 75
4.12.1 break 76
4.12.2 continue 77
4.13 小結(jié) 78
4.14 練習 78
4.15 備注 78
第5章 用列表來組織值 79
問題11:村莊鄰域 79
挑戰(zhàn) 79
輸入 80
輸出 80
5.1 為什么是列表? 80
5.2 列表 81
5.3 列表的可變性 83
5.4 學習有關方法 85
5.5 列表方法 86
5.5.1 添加到一個列表 87
5.5.2 對列表排序 88
5.5.3 從列表中移除數(shù)值 88
5.6 解決問題 89
5.7 避免代碼重復:還有兩個解決
方案 91
5.7.1 使用一個巨大的大小 91
5.7.2 建立保存大小的列表 92
問題12:學校旅行 93
挑戰(zhàn) 93
輸入 93
輸出 93
隱藏的麻煩 93
5.8 分割字符串和連接列表 94
5.8.1 將字符串分割成列表 94
5.8.2 將列表連接成字符串 94
5.9 改變列表值 95
5.10 解決大部分的問題 96
5.10.1 探索一個測試用例 96
5.10.2 代碼 97
5.11 如何處理隱藏的麻煩 98
5.11.1 探索一個測試用例 98
5.11.2 更多列表操作 99
5.11.3 尋找最大值的索引 99
5.11.4 解決問題 100
問題13:面包房獎金 100
挑戰(zhàn) 101
輸入 101
輸出 101
5.12 表示一個表格 101
5.12.1 探索一個測試用例 101
5.12.2 嵌套列表 102
5.13 解決問題 104
5.14 小結(jié) 105
5.15 練習 106
5.16 備注 106
第6章 用函數(shù)來設計程序 107
問題14:紙牌游戲 107
挑戰(zhàn) 107
輸入 108
輸出 108
6.1 探索一個測試用例 108
6.2 定義和調(diào)用函數(shù) 109
6.2.1 沒有實參的函數(shù) 110
6.2.2 帶實參的函數(shù) 110
6.2.3 關鍵字實參 112
6.2.4 局部變量 112
6.2.5 可變的形參 113
6.2.6 返回值 114
6.3 函數(shù)文檔 116
6.4 解決問題 117
問題15:可動人偶 119
挑戰(zhàn) 120
輸入 120
輸出 120
6.5 表示盒子 120
6.6 自頂向下的設計 121
6.6.1 進行自頂向下的設計 121
6.6.2 最高層 121
6.6.3 任務1:讀輸入 123
6.6.4 任務2:檢查所有盒子是否
都沒問題 124
6.6.5 任務3:獲得只有左右高度的
新盒子列表 126
6.6.6 任務4:對盒子進行排序 127
6.6.7 任務5:判斷盒子是否
整理好 127
6.6.8 整合在一起 129
6.7 小結(jié) 131
6.8 練習 132
6.9 備注 132
第7章 讀寫文件 133
問題16:文章格式化 133
挑戰(zhàn) 133
輸入 133
輸出 134
7.1 操作文件 134
7.1.1 打開文件 134
7.1.2 讀取文件 135
7.1.3 寫入文件 138
7.1.4 關閉文件 139
7.2 解決問題 139
7.2.1 探索一個測試用例 139
7.2.2 代碼 140
問題17:農(nóng)場播種 141
挑戰(zhàn) 142
輸入 142
輸出 142
7.3 探索一個測試用例 142
7.4 自頂向下的設計 145
7.4.1 頂層 145
7.4.2 任務1:讀取輸入 146
7.4.3 任務2:識別奶牛 147
7.4.4 任務3:排除草種 149
7.4.5 任務4:選擇數(shù)字最小的
草種 150
7.4.6 任務5:寫輸出 151
7.5 小結(jié) 156
7.6 練習 156
7.7 備注 156
第8章 用集合和字典來組織值 157
問題18:電子郵件地址 157
挑戰(zhàn) 157
輸入 158
輸出 158
8.1 使用列表 158
8.1.1 清理一個電子郵件地址 158
8.1.2 主程序 160
8.2 搜索列表的效率 161
8.3 集合 162
8.4 集合方法 164
8.5 搜索集合的效率 165
8.6 解決問題 166
問題19:常見單詞 167
挑戰(zhàn) 167
輸入 167
輸出 168
8.7 探索一個測試用例 168
8.8 字典 169
8.9 索引字典 171
8.10 循環(huán)遍歷字典 173
8.11 倒置字典 175
8.12 解決問題 177
8.12.1 代碼 177
8.12.2 添加后綴 178
8.12.3 尋找第k個最常見的
單詞 179
8.12.4 主程序 179
問題20:城市和州 180
挑戰(zhàn) 180
輸入 180
輸出 180
8.13 探索一個測試用例 180
8.14 解決問題 182
8.15 小結(jié) 183
8.16 練習 184
8.17 備注 184
第9章 用完全搜索設計算法 185
問題21:救生員 185
挑戰(zhàn) 185
輸入 186
輸出 186
9.1 探索一個測試用例 186
9.2 解決問題 187
9.2.1 解雇一名救生員 187
9.2.2 主程序 188
9.2.3 程序的效率 189
問題22:滑雪場 190
挑戰(zhàn) 190
輸入 191
輸出 191
9.3 探索一個測試用例 191
9.4 解決問題 192
9.4.1 確定一個范圍的成本 192
9.4.2 主程序 193
問題23:奶牛棒球 195
挑戰(zhàn) 195
輸入 195
輸出 195
9.5 使用三個嵌套循環(huán) 195
9.5.1 代碼 195
9.5.2 程序的效率 198
9.6 先排序 198
9.6.1 代碼 198
9.6.2 程序的效率 200
9.7 Python模塊 201
9.8 bisect模塊 202
9.9 解決問題 204
9.10 小結(jié) 206
9.11 練習 206
9.12 備注 206
第 10章 大O和程序效率 208
10.1 計時的問題 208
10.2 大O 210
10.2.1 常數(shù)時間 210
10.2.2 線性時間 211
10.2.3 平方時間 214
10.2.4 立方時間 216
10.2.5 多變量 217
10.2.6 對數(shù)時間 218
10.2.7 n log n時間 219
10.2.8 處理函數(shù)調(diào)用 220
10.2.9 小結(jié) 222
問題24:最長圍巾 222
挑戰(zhàn) 222
輸入 223
輸出 223
10.3 探索一個測試用例 223
10.4 算法1 223
10.5 算法2 224
問題25:絲帶染色 226
挑戰(zhàn) 226
輸入 226
輸出 227
10.6 探索一個測試用例 227
10.7 解決問題 227
10.8 小結(jié) 230
10.9 練習 230
10.10 備注 230
后記 231
附錄A 問題鳴謝 232