每個人的 Python : 數學、算法和游戲編程訓練營

張益琿

  • 出版商: 清華大學
  • 出版日期: 2021-10-01
  • 定價: $534
  • 售價: 8.5$454
  • 語言: 簡體中文
  • 頁數: 324
  • 裝訂: 平裝
  • ISBN: 7302589763
  • ISBN-13: 9787302589761
  • 相關分類: Python程式語言
  • 下單後立即進貨 (約4週~6週)

  • 每個人的 Python : 數學、算法和游戲編程訓練營-preview-1
  • 每個人的 Python : 數學、算法和游戲編程訓練營-preview-2
  • 每個人的 Python : 數學、算法和游戲編程訓練營-preview-3
每個人的 Python : 數學、算法和游戲編程訓練營-preview-1

買這商品的人也買了...

商品描述

本書以數學為切入點,以Python編程語言為工具,介紹大量流行的編程題目的解題思路,並且提供了多種解題方案。本書涉及的編程題目領域廣泛,包括數字類題目、圖形類題目、字符串類題目、數據結構類題目以及游戲類題目等,由淺入深地訓練讀者的編程思維能力。通過本書的學習,讀者可以掌握使用編程工具解決問題的核心思路,並能夠獨立思考和解決各種場景下的編程問題。 對於從未接觸過編程的人員來說,本書以問題驅動的教學方法,因為有趣且強調動手實踐,非常適合初學者快速入門。對於編程人員來說,本書介紹的解題思路和算法可以幫助編程人員提高代碼質量。本書也適合編程領域的求職者使用,書中提供的編程題目很多都是面試中常見的算法問題。

作者簡介

張益琿(網名:琿少)
多年iOS開發經驗,51CTO學院、CSDN學院簽約講師 ,主要從事移動端應用開發,曾就職於國內知名電商網站,從事iOS端應用程序的業務開發與性能優化工作。
目前在國內知名社交產品公司從事IM系統的架構設計工作。
對iOS開發、React Native和Flutter跨平台開發及JavaScript前端開發都擁有豐富的經驗。
已出版《iOS開發實戰:從零基礎到App Store上架》《React Native全教程:移動端跨平台應用開發》《iOS開發實戰:從零基礎到上架App Store(第3版)》《Swift從零到精通iOS開發》等多本編程著作。
開源中國特邀技術專家,發表相關技術博客400餘篇,訪問量100萬餘次。

目錄大綱

第1章  走進Python世界 1
1.1  認識Python 1
1.1.1  Python的由來 1
1.1.2  Python可以做什麼 2
1.2  開發環境準備 3
1.2.1  安裝Python語言包 3
1.2.2  使用Sublime Text編程工具 4
1.3  編程中的基礎概念 6
1.3.1  面向過程編程中的基礎概念 6
1.3.2  面向對象編程中的基礎概念 8
1.4  Python語法初步 9
1.4.1  編程風格 9
1.4.2  變量與數據類型 10
1.4.3  運算符 13
1.4.4  流程控制語句 15
1.4.5  常用的數學函數 17
1.4.6  字符串操作相關方法 18
1.4.7  列表操作相關方法 20
1.4.8  字典操作相關方法 20
1.4.9  函數 21
1.5  Python面向對象編程 22
1.5.1  Python中的類 23
1.5.2  類的繼承 24
1.5.3  模塊和包的應用 25
本章結語 27
第2章  編程與數學 28
2.1  二進制運算 28
2.1.1  計算機的思考方式 29
2.1.2  計算機中數據的存儲方式 30
2.2  靈活使用程序打印數據 31
2.2.1  小試牛刀——打印乘法口訣表 31
2.2.2  小試牛刀——打印簡單圖形 33
2.3  小試牛刀——簡易計算器 36
2.3.1  接收用戶輸入 37
2.3.2  在終端運行的簡易計算器 38
本章結語 40
第3章  有趣的數字——特殊數 41
3.1  阿姆斯特朗數 41
3.1.1  什麼是阿姆斯特朗數 42
3.1.2  算法與實現——判斷一個數是否為阿姆斯特朗數 42
3.2  自除數 43
3.2.1  算法與實現——篩選自除數 43
3.2.2  使用高級循環方法對代碼進行優化 44
3.3  完全平方數 45
3.3.1  算法實現——四平方數和定理 45
3.3.2  編程實現——解決完全平方數問題 46
3.4  強整數 47
3.4.1  編程實現——篩選強整數 47
3.4.2  代碼改進——強整數檢索上限的尋找 48
3.5  迴文數 48
3.5.1  編程實現——判斷迴文數 48
3.5.2  代碼改進——求迴文素數 49
3.6  醜數 50
3.6.1  編程實現——如何判斷醜數 51
3.6.2  代碼改進——嘗試找到第n個醜數 52
3.6.3  代碼改進——解決醜數擴展問題 53
3.6.4  算法改進——使用二分查找第n個醜數 53
3.7  完美數 55
3.7.1  完美數的故事 55
3.7.2  編程實現——如何判斷完美數 55
3.8  快樂數 56
3.9  順次數 57
3.10  步進數 58
3.11  中心對稱數 60
3.11.1  編程實現——通過字典映射來判斷中心對稱數 60
3.11.2  代碼改進——查找指定位數的中心對稱數 60
3.11.3  代碼改進——確定中心對稱數的個數 61
3.12  累加數 63
3.13  易混淆數 64
本章結語 65
第4章  有趣的數字——數字計算 66
4.1  二進制相關運算 66
4.1.1  編程實現——二進制求和 66
4.1.2  編程實現——求十進制數的反碼 67
4.1.3  編程實現——計算漢明距離 68
4.1.4  代碼改進——求二進制數中1的最長間距 69
4.1.5  代碼改進——顛倒二進制數 70
4.2  玩轉四則運算 70
4.2.1  編程實現——一個數的各位相加 71
4.2.2  編程實現——不用加減乘除運算符做加法 72
4.2.3  代碼改進——求階乘的尾數 73
4.3  數字間的特殊運算 74
4.3.1  編程實現——平方根函數 74
4.3.2  編程實現——求平方數之和 75
4.3.3  編程實現——判斷一個數是否為某數的冪次方 75
4.4  計算質數 76
4.4.1  編程實現——統計質數個數 76
4.4.2  編程實現——深度判斷二進制數中特殊數的個數 78
4.5  數字轉換 79
4.5.1  編程實現——整數轉換 79
4.5.2  編程實現——整數轉換成十六進制數 80
4.5.3  編程實現——將分數轉換成小數 81
4.5.4  編程實現——羅馬數字轉整數 83
4.5.5  代碼改進——整數轉羅馬數字 84
本章結語 85
第5章  圖形世界的點線面 86
5.1  有趣的點與線 86
5.1.1  編程實現——連點成線 86
5.1.2  編程實現——最短時間內訪問所有的點 88
5.1.3  編程實現——找到穿過最多點的直線 89
5.2  圖形的奧妙 91
5.2.1  編程實現——輸出楊輝三角 91
5.2.2  代碼改進——嘗試輸出楊輝三角的某一行 92
5.2.3  編程實現——規劃一個矩形合理的長和寬 93
5.2.4  編程實現——判斷矩形是否重疊 94
5.2.5  代碼改進——判斷圓和矩形是否有重疊 95
5.2.6  編程實現——統計有效三角形的個數 97
5.3  周長與面積 98
5.3.1  編程實現——求重疊矩形的面積 98
5.3.2  編程實現——找到最小面積的矩形 100
5.3.3  編程實現——求三角形的最大周長 103
5.3.4  編程實現——求最大的三角形面積 104
5.4  凸多邊形 105
5.4.1  什麼是凸多邊形 105
5.4.2  向量叉乘 106
5.4.3  編程實現——判斷凸多邊形 106
5.5  三維圖形 107
5.5.1  編程實現——計算三維形體的錶面積 107
5.5.2  代碼改進——求解三維形體的投影面積 109
本章結語 110
第6章  探索字符的世界——字符串操作 111
6.1  字符串的排列 111
6.1.1  編程實現——格式化字符串 111
6.1.2  編程實現——格式化字符串進階 113
6.1.3  編程實現——字符串全排列 114
6.1.4  編程實現——根據字符出現的頻率進行排序 116
6.1.5  編程實現——交換字符 117
6.2  字符串的分割 119
6.2.1  平衡字符串的分割 119
6.2.2  編程實現——分割出迴文字符串 120
6.2.3  編程實現——分割字符串獲取最大分數 121
6.3  字符串的查找與統計 121
6.3.1  編程實現——統計連續字符的長度 121
6.3.2  編程實現——檢查字符串中所有的字符是否 122
6.3.3  編程實現——查找 次出現的 字符 123
6.3.4  編程實現——求最長不含重複字符的子字符串長度 124
6.3.5  編程實現——查找常用字符 125
6.4  字符串的變換 126
6.4.1  編程實現——字符串平移 126
6.4.2  編程實現——字符串平移加密 127
6.4.3  編程實現——壓縮字符串 128
6.4.4  編程實現——字符串解壓 129
6.4.5  編程實現——將數字翻譯成字符串 131
本章結語 132
第7章  探索字符的世界——字符串應用 133
7.1  單詞提取 133
7.1.1  編程實現——統計字符串中的單詞個數 133
7.1.2  編程實現——返回字符最後一個單詞的長度 134
7.1.3  編程實現——統計最常用的單詞 135
7.1.4  編程實現——拆分單詞 136
7.1.5  編程實現——計算單詞的最短距離 137
7.2  詞句重組 138
7.2.1  編程實現——從字符串中返回字母組成單詞 138
7.2.2  編程實現——語句逆序 139
7.2.3  編程實現——語句重排 139
7.2.4  編程實現——單詞前綴替換 140
7.3  單詞縮寫 141
7.3.1  編程實現——判斷是否有相同的縮寫 141
7.3.2  編程實現——列舉單詞所有縮寫形式 143
7.4  語句處理 144
7.4.1  編程實現——比較語句的差異 144
7.4.2  編程實現——分析詞組 145
7.5  迴文字符串 146
7.5.1  編程實現——驗證迴文字符串 146
7.5.2  編程實現——構造迴文字符串 147
7.5.3  編程實現——找到最長的迴文子字符串 149
7.5.4  編程實現——拼接構成迴文串 149
7.6  字符串的複雜操作 150
7.6.1  編程實現——字符串解碼 150
7.6.2  編程實現——構建IP地址 152
7.6.3  編程實現——驗證IP地址的有效性 153
7.6.4  編程實現——實現模糊匹配 155
本章結語 156
第8章  玩轉數據結構——列表與鍊錶 157
8.1  獲取列表中的信息 158
8.1.1  編程實現——尋找列表平衡點 158
8.1.2  編程實現——找到列表中缺失的元素 158
8.1.3  代碼改進——尋找所有整數中兩數之差**對值的最大值 159
8.1.4  代碼改進——根據條件獲取列表中的值 161
8.1.5  代碼改進——尋找列表中連續元素的和的最大值 161
8.1.6  代碼改進——尋找列表中最長的連續遞增序列 163
8.1.7  代碼改進——尋找重複次數最多的元素 164
8.1.8  代碼改進——尋找列表的凸點 165
8.2  列表操作 166
8.2.1  編程實現——將列表中的0進行後置 166
8.2.2  代碼改進——遞增列表的合併 167
8.2.3  代碼改進——向列表中插入元素 169
8.2.4  代碼改進——清除重複元素 169
8.2.5  代碼改進——列表分隔問題 171
8.2.6  代碼改進——對列表進行原地排序 172
8.2.7  代碼改進——判斷列表是否有序 172
8.2.8  編程實現——構建斐波那契數列 173
8.3  列表中元素的和 174
8.3.1  編程實現——找到列表中合適的兩個元素 174
8.3.2  代碼改進——找出列表中所有滿足條件的三元素組 175
8.4  簡單鍊錶操作 177
8.4.1  編程實現——遍歷鍊錶 178
8.4.2  代碼改進——刪除鍊錶中的節點 179
8.4.3  代碼改進——鍊錶合併 181
8.4.4  代碼改進——鍊錶轉整數 182
8.5  特殊性質的鍊錶 183
8.5.1  編程實現——判斷迴文鍊錶 183
8.5.2  代碼改進——判斷環形鍊錶 183
8.5.3  鍊錶重構——奇偶排列的鍊錶 185
8.6  高級鍊錶操作 186
8.6.1  編程實現——鍊錶大數求和 186
8.6.2  代碼改進——鍊錶重排 188
8.6.3  代碼改進——對鍊錶進行原地排序 189
8.6.4  代碼改進——旋轉鍊錶 190
8.6.5  代碼改進——交換鍊錶相鄰的節點 191
8.6.6  編程實現——設計鍊錶結構 192
本章結語 195
第9章  玩轉數據結構——棧、堆與隊列 196
9.1  簡單棧數據結構 196
9.1.1  編程實現——設計棧結構 197
9.1.2  代碼改進——利用棧清理無效的括號 198
9.1.3  代碼改進——處理平衡括號 199
9.1.4  代碼改進——進行括號內容逆序 200
9.1.5  代碼改進——刪除最外層括號 201
9.1.6  代碼改進——補充缺失的括號 202
9.1.7  代碼改進——遞歸刪除重複的相鄰字符 203
9.1.8  代碼改進——實現條件運算符 205
9.1.9  代碼改進——簡化文件路徑 206
9.2  堆的簡單應用 208
9.2.1  什麼是堆 208
9.2.2  編程實現——查找高頻單詞 209
9.2.3  編程實現——尋找最接近原點的n個點 210
9.3  隊列的簡單應用 211
9.3.1  編程實現——設計隊列211
9.3.2  代碼改進——設計循環隊列 213
本章結語 215
第10章  玩轉數據結構——樹與圖 216
10.1  二叉樹的判定 217
10.1.1  編程實現——解析二叉樹的深度 218
10.1.2  代碼改進——平衡二叉樹的判定 220
10.1.3  代碼改進——對稱二叉樹的判定 221
10.1.4  代碼改進——判斷兩棵二叉樹是否相同 223
10.1.5  代碼改進——二叉樹相加 224
10.1.6  代碼改進——單值二叉樹的判定 226
10.2  二叉樹的遍歷 226
10.2.1  編程實現——二叉樹的前序遍歷 227
10.2.2  代碼改進——二叉樹的中序遍歷和後序遍歷 228
10.2.3  代碼改進——根據層序遍歷二叉樹 228
10.2.4  代碼改進——垂直遍歷二叉樹 230
10.2.5  代碼改進——將二叉樹的遍歷方式推廣到N叉樹 231
10.3  構造二叉樹 233
10.3.1  編程實現——從遍歷結果構造二叉樹 233
10.3.2  代碼改進——通過有序列表構造二叉搜索樹 236
10.3.3  代碼改進——在二叉搜索樹中插入元素 237
10.4  刪除二叉樹中的節點 238
10.4.1  編程實現——在二叉搜索樹中刪除節點 238
10.4.2  代碼改進——清除二叉樹中的指定葉子節點 241
10.5  獲取二叉樹中存儲的信息 242
10.5.1  編程實現——判斷是否為堂兄弟節點 242
10.5.2  代碼改進——獲取二叉樹中指定節點值的和 243
10.5.3  代碼改進——計算二叉樹路徑的和 244
10.5.4  代碼改進——計算樹及所有子樹的平均值 246
10.5.5  代碼改進——完全二叉樹的節點個數 247
10.6  圖結構的應用 249
10.6.1  編程實現——網格中的最近距離 249
10.6.2  代碼改進——找到無環圖中所有的路徑 252
本章結語 253
第11章  燒腦遊戲編程—— 熱身篇 254
11.1  上樓梯 254
11.2  猜數字遊戲 255
11.3  套餐組合問題 256
11.4  種樹問題 257
11.5  算術機器人 258
11.6  單行的鍵盤 259
11.7  統計運動員的名次 260
11.8  分金幣 260
11.9  傳繡球遊戲 261
11.10  撲克遊戲 263
11.11  酒瓶子問題 264
11.12  所有可能的木板長度 265
11.13  電腦高手 265
11.14  燈泡問題 267
11.14.1  亮著的燈泡 267
11.14.2  不同功能的按鈕 268
11.14.3  藍色燈光的燈泡 270
11.14.4  翻轉燈泡的狀態 271
11.15  寶石鑑定 272
11.16  翻轉遊戲 272
11.17  井字棋的輸贏判定 273
11.18  分發糖果問題 275
11.18.1  怎樣分糖果可以盡可能多地使兒童滿足 275
11.18.2  給弟弟分糖果 276
11.18.3  分發糖果 277
11.19  排布硬幣 278
11.20  列表變換遊戲 279
11.21  國際象棋中的車 280
11.22  計算員工的平均工資 282
11.23  比賽計分 283
11.24  股票買賣的最大盈利 284
11.25  單詞組合遊戲 285
本章結語 286
第12章  燒腦遊戲編程——進階篇 287
12.1  統計戰艦個數 287
12.2  田忌賽馬 289
12.3  炸彈人遊戲 290
12.4  消除數字 291
12.5  為賽車加油 293
12.6  馬走日 295
12.7  最大的島嶼面積 297
12.8  跳躍遊戲 298
12.9  拿石子遊戲 301
12.10  分割繩子 301
12.11  載人過河 302
12.12  迅捷斥候——提莫 304
12.13  水壺問題 305
12.14  疊羅漢 307
12.15  活字印刷術 308
本章結語 309
第13章  巧用編程工具 310
13.1  更加強大的編輯器 310
13.1.1  下載與配置VSCode 311
13.1.2  進行Python代碼的調試 312
13.2  編寫有趣的界面應用 315
13.2.1  使用Python開發桌面應用 315
13.2.2  進行用戶交互 316
13.3  看得見的遊戲 317
13.4  各種有趣而強大的Python模塊 319
13.4.1  快速搭建網站 320
13.4.2  智能爬蟲 321
本章結語 324