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