Python編程做中學 Learn to Code by Solving Problems: A Python Programming Primer

[加]丹尼爾·津加羅(Daniel Zingaro)

  • Python編程做中學-preview-1
  • Python編程做中學-preview-2
Python編程做中學-preview-1

商品描述

本書是一本零基礎的Python編程入門書。全書介紹了Python的基本知識、條件語句、循環語句、列表、函數,並涉及到數據結構、文件讀寫、算法等基本知識,引入了編程競賽中重要的軟件運行效率的概念。本書立足各編程挑戰網站上的真題,將編程的基本思想和Python的知識點拆解成小任務,使讀者在解題的過程中逐步探索,以親自上手實踐的方式學習編程。

本書適合想要零基礎學習編程和Python的人閱讀。

作者簡介

丹尼尔·辛格罗(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:單詞計數 4

挑戰 4

輸入 4

輸出 4

1.3 字符串 4

1.3.1 表示字符串 5

1.3.2 字符串操作符 5

1.3.3 字符串方法 6

1.4 整數和浮點數 7

1.4.1 變量 9

1.4.2 賦值語句 9

1.4.3 改變變量的值 10

1.5 使用變量來計數單詞 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

挑戰 15

輸入 15

輸出 15

1.9 Python中的更多數學 15

1.9.1 訪問Pi 15

1.9.2 指數 16

1.10 字符串和整數之間的轉換 16

1.11 解決問題 18

1.12 小結 19

1.13 練習 19

1.14 備註 19

第 2章 做判斷 20

問題3:獲勝球隊 20

挑戰 20

輸入 20

輸出 21

2.1 有條件執行 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

挑戰 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 小結 35

2.11 練習 36

2.12 備註 36

第3章 重復代碼:定循環 37

問題5:三個杯子 37

挑戰 37

輸入 37

輸出 38

3.1 為什麽要循環? 38

3.2 for循環 38

3.3 嵌套 40

3.4 解決問題 42

問題6:已占用停車位 44

挑戰 44

輸入 44

輸出 44

3.5 一種新循環 44

3.6 索引 45

3.7 循環的範圍 46

3.8 範圍用於循環遍歷索引 48

3.9 解決問題 49

問題7:數據套餐 50

挑戰 50

輸入 50

輸出 50

3.10 循環讀取輸入 50

3.11 解決問題 51

3.12 小結 52

3.13 練習 53

3.14 備註 53

第4章 重復代碼:不定循環 54

問題8:老虎機 54

挑戰 54

輸入 54

輸出 55

4.1 探索一個測試用例 55

4.2 for循環的局限性 56

4.3 while循環 57

4.3.1 使用while循環 57

4.3.2 循環中的嵌套循環 60

4.3.3 添加布爾操作符 61

4.4 解決問題 61

4.5 模操作符 64

4.6 F-字符串 66

問題9:歌曲播放列表 67

挑戰 67

輸入 67

輸出 68

4.7 字符串切片 68

4.8 解決問題 70

問題10:秘密句子 71

挑戰 72

輸入 72

輸出 72

4.9 for循環的另一個局限性 72

4.10 while循環遍歷索引 73

4.11 解決問題 75

4.12 break和continue 75

4.12.1 break 76

4.12.2 continue 77

4.13 小結 78

4.14 練習 78

4.15 備註 78

第5章 用列表來組織值 79

問題11:村莊鄰域 79

挑戰 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 從列表中移除數值 88

5.6 解決問題 89

5.7 避免代碼重復:還有兩個解決

方案 91

5.7.1 使用一個巨大的大小 91

5.7.2 建立保存大小的列表 92

問題12:學校旅行 93

挑戰 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

挑戰 101

輸入 101

輸出 101

5.12 表示一個表格 101

5.12.1 探索一個測試用例 101

5.12.2 嵌套列表 102

5.13 解決問題 104

5.14 小結 105

5.15 練習 106

5.16 備註 106

第6章 用函數來設計程序 107

問題14:紙牌游戲 107

挑戰 107

輸入 108

輸出 108

6.1 探索一個測試用例 108

6.2 定義和調用函數 109

6.2.1 沒有實參的函數 110

6.2.2 帶實參的函數 110

6.2.3 關鍵字實參 112

6.2.4 局部變量 112

6.2.5 可變的形參 113

6.2.6 返回值 114

6.3 函數文檔 116

6.4 解決問題 117

問題15:可動人偶 119

挑戰 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 小結 131

6.8 練習 132

6.9 備註 132

第7章 讀寫文件 133

問題16:文章格式化 133

挑戰 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:農場播種 141

挑戰 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:選擇數字最小的

草種 150

7.4.6 任務5:寫輸出 151

7.5 小結 156

7.6 練習 156

7.7 備註 156

第8章 用集合和字典來組織值 157

問題18:電子郵件地址 157

挑戰 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

挑戰 167

輸入 167

輸出 168

8.7 探索一個測試用例 168

8.8 字典 169

8.9 索引字典 171

8.10 循環遍歷字典 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

挑戰 180

輸入 180

輸出 180

8.13 探索一個測試用例 180

8.14 解決問題 182

8.15 小結 183

8.16 練習 184

8.17 備註 184

第9章 用完全搜索設計算法 185

問題21:救生員 185

挑戰 185

輸入 186

輸出 186

9.1 探索一個測試用例 186

9.2 解決問題 187

9.2.1 解雇一名救生員 187

9.2.2 主程序 188

9.2.3 程序的效率 189

問題22:滑雪場 190

挑戰 190

輸入 191

輸出 191

9.3 探索一個測試用例 191

9.4 解決問題 192

9.4.1 確定一個範圍的成本 192

9.4.2 主程序 193

問題23:奶牛棒球 195

挑戰 195

輸入 195

輸出 195

9.5 使用三個嵌套循環 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 小結 206

9.11 練習 206

9.12 備註 206

第 10章 大O和程序效率 208

10.1 計時的問題 208

10.2 大O 210

10.2.1 常數時間 210

10.2.2 線性時間 211

10.2.3 平方時間 214

10.2.4 立方時間 216

10.2.5 多變量 217

10.2.6 對數時間 218

10.2.7 n log n時間 219

10.2.8 處理函數調用 220

10.2.9 小結 222

問題24:最長圍巾 222

挑戰 222

輸入 223

輸出 223

10.3 探索一個測試用例 223

10.4 算法1 223

10.5 算法2 224

問題25:絲帶染色 226

挑戰 226

輸入 226

輸出 227

10.6 探索一個測試用例 227

10.7 解決問題 227

10.8 小結 230

10.9 練習 230

10.10 備註 230

後記 231

附錄A 問題鳴謝 232