本書專門針對(duì)Python新手量身定做,涵蓋了Python 3 實(shí)際開發(fā)的重要知識(shí)點(diǎn),內(nèi)容包括:Python語(yǔ)言的類型和對(duì)象、操作符和表達(dá)式、編程結(jié)構(gòu)和控制流、函數(shù)、序列、多線程、正則表達(dá)式、面向?qū)ο缶幊獭⑽募僮鳌⒕W(wǎng)絡(luò)編程、郵件收發(fā)、數(shù)據(jù)庫(kù)操作等,提供Python爬蟲、數(shù)據(jù)處理項(xiàng)目范例,各章還安排了調(diào)試、問題解答、溫故知新、牛九小試等內(nèi)容,以幫助讀者學(xué)會(huì)處理程序異常、解答學(xué)習(xí)困惑、鞏固知識(shí)、學(xué)以致用。 本書通俗易懂、示例豐富、代碼可讀性及可操作性強(qiáng)。非常適合Python 3.x初學(xué)者、想學(xué)習(xí)和了解Python 3的程序員,也可作為Python網(wǎng)課、培訓(xùn)及大專院校教學(xué)用書。
本書專門針對(duì)Python新手量身設(shè)計(jì),涵蓋了Python 3.5 實(shí)際開發(fā)的重要知識(shí)點(diǎn)。編者使用通俗易懂的描述和豐富的示例代碼,并結(jié)合日常生活中的一些小事件,使本書讀起來(lái)生動(dòng)有趣,一些復(fù)雜的問題也以簡(jiǎn)單的形式展現(xiàn)出來(lái),讀者學(xué)起來(lái)不僅輕松,而且可以充分感受到Python的魅力。學(xué)編程必須動(dòng)手才能見到成效,本書在設(shè)計(jì)上特別強(qiáng)調(diào)講練結(jié)合,注重實(shí)踐,不僅在講解的過程中結(jié)合大量代碼示例,同時(shí)適時(shí)穿插小項(xiàng)目演練,以鍛煉讀者的程序設(shè)計(jì)能力。各章安排了程序調(diào)試、問題解答、溫故知新等主題,幫助讀者發(fā)現(xiàn)程序錯(cuò)誤,解答學(xué)習(xí)中的困惑,鞏固所學(xué)知識(shí)。本書后通過兩個(gè)Python熱門應(yīng)用——數(shù)據(jù)分析和網(wǎng)絡(luò)爬蟲,介紹了Python在實(shí)際開發(fā)中的方法和技巧,旨在提升讀者的開發(fā)技能,達(dá)成學(xué)以致用之目標(biāo)。
劉宇宙,計(jì)算科學(xué)學(xué)學(xué)士,多年工作經(jīng)驗(yàn),先后供職于上海海鼎、上海云卯、上海宏力達(dá),目前供職于上海透云科技碼上加事業(yè)部,擔(dān)任軟件工程師,從事大數(shù)據(jù)研發(fā)。先后從事過卡系統(tǒng)的研發(fā),云計(jì)算項(xiàng)目中IAAS系統(tǒng)的研發(fā),大數(shù)據(jù)項(xiàng)目研發(fā),物聯(lián)網(wǎng)研發(fā)。對(duì)Java、Python有深入研究。Python技術(shù)愛好者,在CSDN發(fā)表原創(chuàng)Python博文多篇。
目 錄
第1章 進(jìn)入Python 3.5的精彩世界 1
1.1 Python的起源 2
1.2 Python的應(yīng)用場(chǎng)合 3
1.3 從2.7到3.5,Python的新特性 5
1.4 如何學(xué)習(xí)Python 6
1.5 Python環(huán)境構(gòu)建 7
1.5.1 在Windows系統(tǒng)中安裝Python 7
1.5.2 在Linux和UNIX系統(tǒng)中安裝Python 14
1.5.3 在Mac OS系統(tǒng)中安裝Python 17
1.5.4 其他版本 18
1.6 從hello word開始 18
1.7 調(diào)試 19
1.8 問題解答 20
1.9 溫故知新,學(xué)以致用 21
第2章 開啟Python之旅 22
2.1 認(rèn)識(shí)程序 23
2.1.1 程序 23
2.1.2 調(diào)試 24
2.1.3 語(yǔ)法錯(cuò)誤 24
2.1.4 運(yùn)行錯(cuò)誤 24
2.1.5 語(yǔ)義錯(cuò)誤 25
2.2 數(shù)據(jù)類型 25
2.2.1 整型 25
2.2.2 浮點(diǎn)型 27
2.2.3 復(fù)數(shù) 28
2.2.4 數(shù)據(jù)類型轉(zhuǎn)換 28
2.2.5 常量 29
2.3 變量和關(guān)鍵字 29
2.3.1 變量 29
2.3.2 變量名稱 33
2.4 語(yǔ)句 34
2.5 表達(dá)式 35
2.6 運(yùn)算符和操作對(duì)象 36
2.6.1 什么是運(yùn)算符和操作對(duì)象 36
2.6.2 算術(shù)運(yùn)算符 36
2.6.3 比較運(yùn)算符 38
2.6.4 賦值運(yùn)算符 39
2.6.5 位運(yùn)算符 40
2.6.6 邏輯運(yùn)算符 41
2.6.7 成員運(yùn)算符 42
2.6.8 身份運(yùn)算符 43
2.6.9 運(yùn)算符優(yōu)先級(jí) 43
2.7 字符串操作 45
2.8 注釋 49
2.9 調(diào)試 50
2.10 問題解答 50
2.11 溫故知新,學(xué)以致用 51
第3章 列表和元組 52
3.1 通用序列操作 53
3.1.1 索引 53
3.1.2 分片 54
3.1.3 序列相加 57
3.1.4 乘法 58
3.1.5 成員資格 59
3.1.6 長(zhǎng)度、最小值和較大值 60
3.2 列表 60
3.2.1 更新列表 61
3.2.2 嵌套列表 65
3.2.3 列表方法 65
3.3 元組 74
3.3.1 tuple函數(shù) 75
3.3.2 元組的基本操作 75
3.3.3 元組內(nèi)置函數(shù) 76
3.4 列表與元組的區(qū)別 77
3.5 調(diào)試 78
3.6 問題解答 79
3.7 溫故知新,學(xué)以致用 79
第4章 字符串 81
4.1 字符串的基本操作 82
4.2 字符串格式化 83
4.2.1 字符串格式化符號(hào) 83
4.2.2 字符串格式化元組 85
4.3 字符串方法 87
4.3.1 find()方法 87
4.3.2 join()方法 88
4.3.3 lower()方法 89
4.3.4 upper()方法 90
4.3.5 swapcase()方法 91
4.3.6 replace()方法 91
4.3.7 split()方法 92
4.3.8 strip()方法 92
4.3.9 translate()方法 93
4.4 調(diào)試 94
4.5 問題解答 95
4.6 溫故知新,學(xué)以致用 95
第5章 字典 96
5.1 字典的使用 97
5.2 創(chuàng)建和使用字典 97
5.2.1 dict函數(shù) 98
5.2.2 字典的基本操作 98
5.2.3 字典的格式化字符串 100
5.2.4 字典和列表的區(qū)別 100
5.3 字典方法 101
5.3.1 clear()方法 101
5.3.2 copy()方法 102
5.3.3 fromkeys()方法 103
5.3.4 get()方法 104
5.3.5 key in dict方法 105
5.3.6 items()方法 105
5.3.7 keys()方法 105
5.3.8 setdefault()方法 106
5.3.9 update()方法 107
5.3.10 values()方法 107
5.4 調(diào)試 108
5.5 問題解答 108
5.6 溫故知新,學(xué)以致用 109
第6章 條件、循環(huán)和其他語(yǔ)句 110
6.1 使用文本編輯器 111
6.2 import的使用 113
6.2.1 import語(yǔ)句 113
6.2.2 使用逗號(hào)輸出 116
6.3 別樣的賦值 116
6.3.1 序列解包 116
6.3.2 鏈?zhǔn)劫x值 118
6.3.3 增量賦值 118
6.4 語(yǔ)句塊 119
6.5 條件語(yǔ)句 119
6.5.1 布爾變量的作用 120
6.5.2 if語(yǔ)句 121
6.5.3 else子句 122
6.5.4 elif子句 123
6.5.5 嵌套代碼塊 124
6.5.6 更多操作 124
6.5.7 斷言 127
6.6 循環(huán) 128
6.6.1 while循環(huán) 128
6.6.2 for循環(huán) 129
6.6.3 循環(huán)遍歷字典元素 131
6.6.4 迭代工具 132
6.6.5 跳出循環(huán) 134
6.6.6 循環(huán)中的else子句 136
6.7 pass語(yǔ)句 137
6.8 牛刀小試——猜字游戲編寫 138
6.9 Python程序調(diào)試 140
6.10 問題解答 141
6.11 溫故知新,學(xué)以致用 141
第7章 函數(shù) 142
7.1 調(diào)用函數(shù) 143
7.2 定義函數(shù) 145
7.3 函數(shù)的參數(shù) 147
7.3.1 必須參數(shù) 148
7.3.2 關(guān)鍵字參數(shù) 149
7.3.3 默認(rèn)參數(shù) 149
7.3.4 可變參數(shù) 153
7.3.5 組合參數(shù) 155
7.4 執(zhí)行流程 155
7.5 形參和實(shí)參 156
7.6 變量作用域 157
7.6.1 局部變量 157
7.6.2 全局變量 159
7.7 有返回值和無(wú)返回值函數(shù) 161
7.8 為什么要有函數(shù) 163
7.9 返回函數(shù) 163
7.10 遞歸函數(shù) 166
7.11 匿名函數(shù) 169
7.12 偏函數(shù) 171
7.13 牛刀小試——經(jīng)典排序之快速排序?qū)崿F(xiàn) 172
7.14 調(diào)試 173
7.15 問題解答 174
7.16 溫故知新,學(xué)以致用 174
第8章 面向?qū)ο缶幊?176
8.1 理解面向?qū)ο?177
8.1.1 什么是面向?qū)ο缶幊?177
8.1.2 面向?qū)ο笮g(shù)語(yǔ)簡(jiǎn)介 177
8.2 類的定義與使用 178
8.2.1 類的定義 178
8.2.2 類的使用 178
8.3 深入類 179
8.3.1 類的構(gòu)造方法 179
8.3.2 類的訪問權(quán)限 184
8.4 繼承 189
8.5 多態(tài) 192
8.6 封裝 196
8.7 多重繼承 197
8.8 獲取對(duì)象信息 199
8.9 類的專有方法 202
8.10 牛刀小試——出行建議 207
8.11 調(diào)試 209
8.12 問題解答 209
8.13 溫故知新,學(xué)以致用 210
第9章 異常 211
9.1 什么是異常 212
9.2 異常處理 212
9.3 拋出異常 213
9.4 捕捉多個(gè)異常 215
9.5 使用一個(gè)塊捕捉多個(gè)異常 216
9.6 捕捉對(duì)象 217
9.7 全捕捉 217
9.8 異常中的else 218
9.9 自定義異常 219
9.10 finally子句 220
9.11 異常和函數(shù) 222
9.12 bug的由來(lái) 223
9.13 溫故知新,學(xué)以致用 223
第10章 日期和時(shí)間 224
10.1 日期和時(shí)間 225
10.1.1 時(shí)間戳 225
10.1.2 時(shí)間格式化符號(hào) 225
10.1.3 struct_time元組 226
10.2 time模塊 227
10.2.1 time()函數(shù) 227
10.2.2 localtime([secs])函數(shù) 227
10.2.3 gmtime([secs])函數(shù) 228
10.2.4 mktime(t)函數(shù) 228
10.2.5 asctime([t])函數(shù) 229
10.2.6 ctime([secs])函數(shù) 229
10.2.7 sleep(secs)函數(shù) 230
10.2.8 clock()函數(shù) 230
10.2.9 strftime(format[, t])函數(shù) 231
10.2.10 strptime(string[, format])函數(shù) 232
10.2.11 三種時(shí)間格式轉(zhuǎn)化 232
10.3 datetime模塊 232
10.4 日歷模塊 236
10.5 牛刀小試——時(shí)間大雜燴 237
10.6 調(diào)試 242
10.7 溫故知新,學(xué)以致用 242
第11章 正則表達(dá)式 244
11.1 認(rèn)識(shí)正則表達(dá)式 245
11.2 re模塊 247
11.2.1 re.match函數(shù) 247
11.2.2 re.search方法 247
11.2.3 re.match與re.search的區(qū)別 248
11.3 貪婪模式和非貪婪模式 249
11.4 替換 250
11.5 編譯 250
11.6 溫故知新,學(xué)以致用 251
第12章 文件操作 252
12.1 打開文件 253
12.1.1 文件模式 254
12.1.2 緩沖 255
12.2 基本文件方法 255
12.2.1 讀和寫 256
12.2.2 讀寫行 258
12.2.3 關(guān)閉文件 260
12.2.4 文件重命名 261
12.2.5 刪除文件 262
12.3 對(duì)文件內(nèi)容進(jìn)行迭代 262
12.3.1 按字節(jié)處理 262
12.3.2 按行操作 263
12.3.3 使用fileinput實(shí)現(xiàn)懶加載式迭代 264
12.3.4 文件迭代器 264
12.4 StringIO函數(shù) 264
12.5 序列化與反序列化 265
12.5.1 一般序列化與反序列化 266
12.5.2 JSON序列化與反序列化 267
12.6 調(diào)試 269
12.7 問題解答 269
12.8 溫故知新,學(xué)以致用 270
第13章 多線程 271
13.1 線程和進(jìn)程 272
13.1.1 進(jìn)程 272
13.1.2 線程 272
13.1.3 多線程與多進(jìn)程 272
13.2 使用線程 273
13.2.1 全局解釋器鎖 273
13.2.2 退出線程 274
13.2.3 Python的線程模塊 274
13.3 _thread模塊 274
13.4 threading模塊 277
13.5 線程同步 282
13.6 線程優(yōu)先級(jí)隊(duì)列 284
13.7 線程與進(jìn)程比較 287
13.7.1 線程切換 287
13.7.2 計(jì)算密集型與IO密集型 288
13.7.3 異步IO 288
13.8 調(diào)試 289
13.9 問題解答 289
13.10 溫故知新,學(xué)以致用 290
第14章 發(fā)送和接收電子郵件 291
14.1 電子郵件介紹 292
14.2 發(fā)送郵件 293
14.2.1 SMTP發(fā)送郵件 293
14.2.2 發(fā)送HTML格式的郵件 296
14.2.3 發(fā)送帶附件的郵件 297
14.2.4 發(fā)送圖片 298
14.2.5 同時(shí)支持HTML和Plain格式 300
14.2.6 加密SMTP 301
14.3 POP3接收郵件 302
14.3.1 POP3下載郵件 302
14.3.2 解析郵件 303
14.4 調(diào)試 305
14.5 問題解答 305
14.6 溫故知新,學(xué)以致用 306
第15章 網(wǎng)絡(luò)編程 307
15.1 網(wǎng)絡(luò)編程初識(shí) 308
15.2 TCP/IP簡(jiǎn)介 308
15.3 網(wǎng)絡(luò)設(shè)計(jì)模塊 309
15.3.1 Socket簡(jiǎn)介 309
15.3.2 socket模塊 309
15.3.3 socket對(duì)象(內(nèi)建)方法 311
15.4 TCP編程 312
15.4.1 客戶端 312
15.4.2 服務(wù)器 315
15.5 UDP編程 319
15.6 urllib模塊 322
15.6.1 GET請(qǐng)求 322
15.6.2 POST請(qǐng)求 323
15.7 調(diào)試 324
15.8 問題解答 325
15.9 溫故知新,學(xué)以致用 325
第16章 操作數(shù)據(jù)庫(kù) 326
16.1 數(shù)據(jù)庫(kù)介紹 327
16.2 Python數(shù)據(jù)庫(kù)API 327
16.2.1 全局變量 328
16.2.2 異常 328
16.2.3 連接和游標(biāo) 329
16.2.4 類型 330
16.3 數(shù)據(jù)庫(kù)操作 331
16.3.1 數(shù)據(jù)庫(kù)連接 331
16.3.2 創(chuàng)建數(shù)據(jù)庫(kù)表 332
16.3.3 數(shù)據(jù)庫(kù)插入 333
16.3.4 數(shù)據(jù)庫(kù)查詢 334
16.3.5 數(shù)據(jù)庫(kù)更新 335
16.3.6 數(shù)據(jù)庫(kù)刪除 337
16.4 事務(wù) 338
16.5 調(diào)試 339
16.6 問題解答 339
16.7 溫故知新,學(xué)以致用 340
第17章 項(xiàng)目實(shí)戰(zhàn)——爬蟲 341
17.1 了解爬蟲 342
17.2 爬蟲的原理 342
17.3 爬蟲常用的幾種技巧 343
17.3.1 基本方法 343
17.3.2 使用服務(wù)器 343
17.3.3 cookie處理 344
17.3.4 偽裝成瀏覽器 344
17.3.5 登錄 345
17.4 爬蟲示例——抓取豆瓣電影Top250影評(píng)數(shù)據(jù) 345
17.4.1 確定URL格式 346
17.4.2 頁(yè)面抓取 346
17.4.3 提取相關(guān)信息 347
17.4.4 寫入文件 348
17.4.5 完善代碼 348
17.5 本章小結(jié) 351
第18章 項(xiàng)目實(shí)戰(zhàn)——數(shù)據(jù)分析 352
18.1 數(shù)據(jù)持久化 353
18.2 模塊化 357
18.2.1 數(shù)據(jù)庫(kù)操作模塊化 357
18.2.2 文件生成模塊化 360
18.2.3 郵件發(fā)送模塊化 361
18.3 數(shù)據(jù)分析的
第2章 開啟Python之旅本章主要介紹Python的基礎(chǔ)知識(shí),為后續(xù)章節(jié)學(xué)習(xí)相關(guān)內(nèi)容做鋪墊。2.1 認(rèn)識(shí)程序旅行前,我們要先熟悉地名,知道去哪里旅行,將會(huì)經(jīng)過哪里。學(xué)習(xí)編程語(yǔ)言也一樣,在學(xué)習(xí)之前要先了解程序、調(diào)試、語(yǔ)法錯(cuò)誤、運(yùn)行錯(cuò)誤、語(yǔ)義錯(cuò)誤等知識(shí)。2.1.1 程序我們都知道,出門旅行肯定要選擇交通工具,現(xiàn)在常用的交通工具有飛機(jī)、火車、輪船、汽車等,我們會(huì)根據(jù)自己的喜好和一些其他因素選擇對(duì)應(yīng)的交通工具。編程語(yǔ)言也一樣,我們選擇一門編程語(yǔ)言就相當(dāng)于選擇一種交通工具,那么,編程語(yǔ)言的“交通”工具是什么呢?是程序。程序是指根據(jù)語(yǔ)言提供的指令按照一定邏輯順序?qū)Λ@得的數(shù)據(jù)進(jìn)行運(yùn)算,并最終返回給我們的指令和數(shù)據(jù)的組合。在這里,運(yùn)算的含義是廣泛的,既包括數(shù)學(xué)計(jì)算之類的操作(如加減乘除),又包括尋找和替換字符串之類的操作。數(shù)據(jù)依據(jù)不同的需要組成不同的形式,處理后的數(shù)據(jù)也可能以另一種方式體現(xiàn)。程序是用語(yǔ)言寫成的。語(yǔ)言分高級(jí)語(yǔ)言和低級(jí)語(yǔ)言。低級(jí)語(yǔ)言有時(shí)叫機(jī)器語(yǔ)言或匯編語(yǔ)言。計(jì)算機(jī)真正“認(rèn)識(shí)”并能夠執(zhí)行的代碼,在我們看來(lái)是一串0和1組成的二進(jìn)制數(shù)字,這些數(shù)字代表指令和數(shù)據(jù)。早期的計(jì)算機(jī)科學(xué)家就是用這些枯燥乏味的數(shù)字編程。低級(jí)語(yǔ)言的出現(xiàn)是計(jì)算機(jī)程序語(yǔ)言的一大進(jìn)步,它用英文單詞或單詞的縮寫代表計(jì)算機(jī)執(zhí)行的指令,使編程的效率和程序的可讀性都有了很大提高,但它仍然和機(jī)器硬件關(guān)聯(lián)緊密,不符合人類的語(yǔ)言和思維習(xí)慣,而且要想把用低級(jí)語(yǔ)言寫的程序移植到其他平臺(tái),就必須重寫。高級(jí)語(yǔ)言的出現(xiàn)是程序語(yǔ)言發(fā)展的必然結(jié)果,也是計(jì)算機(jī)語(yǔ)言向人類的自然語(yǔ)言和思維方式逐步靠近和模擬的結(jié)果。由于高級(jí)語(yǔ)言是對(duì)人類邏輯思維的描述,用高級(jí)語(yǔ)言寫程序會(huì)感到比較自然,讀起來(lái)也比較容易,因此現(xiàn)在大部分程序都是用高級(jí)語(yǔ)言寫的。高級(jí)語(yǔ)言設(shè)計(jì)的目的是讓程序按照人類的思維和語(yǔ)言習(xí)慣書寫,是面向人的,而不是面向機(jī)器。我們用著方便,機(jī)器卻無(wú)法讀懂,更談不上運(yùn)行。所以,用高級(jí)語(yǔ)言寫的程序必須經(jīng)過“翻譯”程序的處理,將其轉(zhuǎn)換成機(jī)器可執(zhí)行的代碼,才能運(yùn)行在計(jì)算機(jī)上。如果想把高級(jí)語(yǔ)言寫的程序移植到其他的平臺(tái),只需在它的基礎(chǔ)上做少量更改就可以了。高級(jí)語(yǔ)言翻譯成機(jī)器代碼有兩種方法,即解釋和編譯。解釋型語(yǔ)言是邊讀源程序邊執(zhí)行。高級(jí)語(yǔ)言就是源代碼。解釋器每次會(huì)讀入一段源代碼,并執(zhí)行它,接著再讀入并執(zhí)行,如此重復(fù),直到結(jié)束,圖2-1顯示了解釋器的結(jié)構(gòu)。這個(gè)有點(diǎn)類似在鄉(xiāng)村里搭乘公交,只要碰到路上有人等公交,就停下來(lái)載人。編譯型語(yǔ)言是將源代碼完整的編譯成目標(biāo)代碼后才能執(zhí)行,以后在執(zhí)行時(shí)不需要再編譯。圖2-2顯示了一個(gè)編譯器的結(jié)構(gòu),這個(gè)有點(diǎn)類似我們乘坐的直達(dá)車,所有要乘車的人都從起點(diǎn)上車,中途不再搭載其他乘客。 圖2-1 解釋型語(yǔ)言的執(zhí)行方式 圖2-2 編譯型語(yǔ)言的執(zhí)行方式2.1.2 調(diào)試每當(dāng)遠(yuǎn)游時(shí),司機(jī)肯定要做幾件事情,如檢查發(fā)動(dòng)機(jī)是否正常、檢查油箱、檢查各項(xiàng)安全系統(tǒng)和液壓系統(tǒng)等,為的是盡可能減少在路途中發(fā)生意外情況。我們編程也是一樣的,需要經(jīng)常做檢查。有一些問題編譯器會(huì)幫助我們檢查出來(lái),問題查出后,簡(jiǎn)單的可以直接解決,對(duì)于稍微復(fù)雜的,需要通過調(diào)試來(lái)解決。程序是很容易出錯(cuò)的。程序錯(cuò)誤被稱為bug,查找bug的過程稱為調(diào)試(debugging)。我們?cè)诘?章中已經(jīng)介紹過一個(gè)很簡(jiǎn)單的調(diào)試示例。2.1.3 語(yǔ)法錯(cuò)誤在生活中有時(shí)會(huì)碰到這樣的情況,你本應(yīng)買今天去某地的火車票,已經(jīng)買好了,但當(dāng)進(jìn)站檢票時(shí),系統(tǒng)告訴你票不是今天的,這時(shí)你才發(fā)現(xiàn)購(gòu)買車票時(shí)輸錯(cuò)了日期。程序中這種錯(cuò)誤比生活中出現(xiàn)的次數(shù)多很多,稱為語(yǔ)法錯(cuò)誤(syntax errors)。Python程序在語(yǔ)法正確的情況下才能運(yùn)行,否則解釋器會(huì)顯示一條錯(cuò)誤信息。語(yǔ)法指的是程序的結(jié)構(gòu)和此結(jié)構(gòu)的規(guī)則。比如第1章的('Hello,world!'),括號(hào)中的單引號(hào)是成對(duì)的,執(zhí)行時(shí)才能正確執(zhí)行。如果輸入('Hello,world!)或(Hello,world!')就會(huì)報(bào)錯(cuò),這屬于語(yǔ)法錯(cuò)誤。我們?cè)陂喿x文章或聽人講話時(shí),可以容忍大多數(shù)語(yǔ)法錯(cuò)誤,不過Python并不如此寬容。程序中只要出現(xiàn)一處語(yǔ)法錯(cuò)誤,Python就會(huì)顯示錯(cuò)誤信息并退出,從而無(wú)法通過編譯。就如我們進(jìn)站,一旦票不滿足進(jìn)站要求,就無(wú)法進(jìn)入一樣。在編程生涯的開始階段,可能每踏出一步都會(huì)碰到大量語(yǔ)法方面的錯(cuò)誤,隨著經(jīng)驗(yàn)的增加,犯錯(cuò)會(huì)減少,踩過坑后,后面遇到類似的坑就能快速應(yīng)對(duì)了。2.1.4 運(yùn)行錯(cuò)誤我們可能在奔跑的交通工具內(nèi)愉悅地欣賞著遠(yuǎn)途的風(fēng)景,但此時(shí)交通工具突然慢慢停下來(lái)了,并且司機(jī)對(duì)大家宣布說(shuō),交通工具拋錨了。例如,出現(xiàn)輪胎破損、沒油了、發(fā)動(dòng)機(jī)壞了、撞車事故等。在Python中經(jīng)常會(huì)遇到類似的錯(cuò)誤,稱之為運(yùn)行時(shí)錯(cuò)誤(runtime errors)。即使是看起來(lái)無(wú)缺的程序,在運(yùn)行的過程中也會(huì)出現(xiàn)錯(cuò)誤。有人說(shuō),計(jì)算機(jī)不是善于計(jì)算嗎?確實(shí)如此。不過錯(cuò)的不是計(jì)算機(jī),而是我們?nèi)祟悺S?jì)算機(jī)說(shuō)到底是人類設(shè)計(jì)的,是我們所用的工具,和電視機(jī)、汽車從本質(zhì)上來(lái)說(shuō)是一樣的。鑒于現(xiàn)在計(jì)算機(jī)軟硬件的理論水平、工業(yè)制造水平、使用者的水平等一些內(nèi)在、外在的因素,出現(xiàn)錯(cuò)誤并不稀奇,且程序越復(fù)雜,出現(xiàn)異常的概率越大。異常的種類很多,如內(nèi)存用盡、除數(shù)為零的除法等都可能導(dǎo)致異常。Python為了把錯(cuò)誤的影響降至低,提供了專門的異常處理語(yǔ)句。運(yùn)行時(shí)錯(cuò)誤一般在代碼量偏多時(shí)才容易遇到。2.1.5 語(yǔ)義錯(cuò)誤經(jīng)常乘坐交通工具,難免有乘錯(cuò)車的情況出現(xiàn),比如你本應(yīng)該乘坐801路車,卻坐上了802路車,結(jié)果到達(dá)了不同的地方。在Python中經(jīng)常會(huì)發(fā)生類似的問題,此類問題稱為語(yǔ)義錯(cuò)誤(semantic errors)。程序即使有語(yǔ)義錯(cuò)誤,也能正常運(yùn)行,不會(huì)產(chǎn)生任何錯(cuò)誤信息,但得到的結(jié)果和我們預(yù)料的不一致。發(fā)生這種錯(cuò)誤一般是我們對(duì)語(yǔ)句的運(yùn)行機(jī)制了解得不夠透徹,自以為它應(yīng)該如此運(yùn)行,實(shí)際上卻不是這樣。還有可能是你解決問題的思路本身就是錯(cuò)的,寫的程序當(dāng)然是錯(cuò)的。查找語(yǔ)義錯(cuò)誤并不像我們坐錯(cuò)了車那么容易,它可能需要你根據(jù)結(jié)果進(jìn)行推理,不過推理的過程沒有那么簡(jiǎn)單易行,需要查看程序輸出,并嘗試弄明白到底做了什么。2.2 數(shù)據(jù)類型計(jì)算機(jī)是可以做數(shù)學(xué)計(jì)算的機(jī)器,計(jì)算機(jī)程序理所當(dāng)然可以處理各種數(shù)值。計(jì)算機(jī)能處理的遠(yuǎn)不止數(shù)值,還有文本、圖形、音頻、視頻、網(wǎng)頁(yè)等各種各樣的數(shù)據(jù),不同的數(shù)據(jù)需要定義不同的數(shù)據(jù)類型。Python 3中有6種標(biāo)準(zhǔn)的數(shù)據(jù)類型:Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Sets(集合)、Dictionary(字典)。本節(jié)首先講解Number數(shù)值類型,其他5種數(shù)據(jù)類型在后續(xù)章節(jié)介紹。Python 3支持3種不同的數(shù)值類型:整型(int)、浮點(diǎn)型(float)、復(fù)數(shù)(complex)。2.2.1 整型int通常被稱為整型或整數(shù),是正、負(fù)整數(shù),不帶小數(shù)點(diǎn)。在Python 3中,整型沒有限制大小,可以當(dāng)作long類型使用,所以Python 3沒有Python 2的long類型。例如,公司組織旅游,大家坐上了大巴準(zhǔn)備出發(fā),現(xiàn)在需要統(tǒng)計(jì)有多少人在車上,boss吩咐小萌清點(diǎn)一下人數(shù),小萌花了兩分鐘逐個(gè)點(diǎn)了一遍,總計(jì)51人。小萌在交互模式下輸入:>>> 5151這里使用的就是整形。到服務(wù)區(qū)后,大家休息了一下,再次準(zhǔn)備出發(fā)時(shí),boss又吩咐小萌清點(diǎn)一下人數(shù)。小萌苦笑一下,看來(lái)又得花兩分鐘清點(diǎn)人數(shù)了,為什么不叫一個(gè)人幫忙從車的另一頭清點(diǎn)呢?于是小萌叫小智幫忙從另一頭清點(diǎn)一下人數(shù)。一分鐘后,小萌和小智在車中間碰上了,小智告訴小萌他的計(jì)數(shù)是25人,小萌在交互模式下輸入:>>> 25 2550小萌準(zhǔn)備把數(shù)字報(bào)告給boss,突然想到上次報(bào)告的是51人,這次是50人,數(shù)字不同啊,還差1人,小萌在交互模式下輸入:>>> 51-501怎么少了一人呢?小萌突然慌了,然后仔細(xì)一想,原來(lái)是把自己忘加上了,于是再次輸入:>>> 25 25 151這次沒問題了。于是小萌給了boss和上次一樣的答案。boss示意司機(jī)可以發(fā)車了,又突然叫停,看天氣挺熱的,大家路上可能會(huì)口渴,于是吩咐小萌去服務(wù)區(qū)給每人買兩瓶水,再買一大包糖給大家在路上補(bǔ)充能量。每人兩瓶水,一共要買多少瓶呢?小萌在交互模式下輸入:>>> 512102一共要買102瓶水,這么多,于是小萌讓小智幫忙一起去提水。水和糖都買回來(lái)了,水好分,給每人兩瓶就是,這一大包糖該怎么給大家呢?看包裝袋上有總顆數(shù),一共有153顆,每人多少顆呢?小萌在交互模式下輸入:>>> 153/513.0好了,給每人發(fā)3顆糖就可以了。于是小萌高高興興發(fā)糖去了,小智也幫忙一起發(fā),每人給3顆。糖終于發(fā)完了,小萌很愜意,坐下來(lái)補(bǔ)充能量。小萌突然想到了什么,有153顆糖,分給51人,每人3顆糖沒錯(cuò),但計(jì)算出來(lái)的結(jié)果怎么是3.0呢?假如有155顆糖,計(jì)算結(jié)果會(huì)是怎樣的呢?輸入以下數(shù)據(jù):>>> 155/513.0392156862745097如果按這個(gè)結(jié)果分,就沒有辦法分了。這是怎么回事呢?原因是:在整數(shù)除法中,除法(/)計(jì)算結(jié)果是浮點(diǎn)數(shù),即使兩個(gè)整數(shù)恰好整除,結(jié)果也是浮點(diǎn)數(shù)。如果只想得到整數(shù)的結(jié)果,丟棄可能的分?jǐn)?shù)部分,可以使用地板除(//),整數(shù)的地板除(//)永遠(yuǎn)是整數(shù),即使除不盡。更改前面輸入的數(shù)據(jù):>>> 153//513這時(shí)就不是浮點(diǎn)數(shù)了。再看看155顆糖的結(jié)果:>>> 155//513153和155除以51都是3,這個(gè)就不對(duì)了。原來(lái)還有一個(gè)余數(shù)。因?yàn)榈匕宄?//)只取結(jié)果的整數(shù)部分,所以Python提供了一個(gè)余數(shù)運(yùn)算,可以得到兩個(gè)整數(shù)相除的余數(shù),看看153和155對(duì)51的取余:>>> 153%510>>> 155%512這次的結(jié)果就是想要的了。假如有155顆糖,就會(huì)多出2顆。小萌細(xì)細(xì)想著,嘴角泛起一絲自然的微笑,小智也發(fā)完糖了,過來(lái)向小萌匯報(bào),看見小萌的表情,小智心里頓時(shí)暖暖的,無(wú)須報(bào)告了。2.2.2 浮點(diǎn)型浮點(diǎn)型由整數(shù)部分與小數(shù)部分組成,也可以使用科學(xué)計(jì)數(shù)法表示。比如,小萌還在細(xì)想中,boss突然打斷了她的思維,問她總共花了多少錢。小萌理了一下思緒,每瓶水3.3元,一共102瓶,總共多少錢呢?輸入如下:>>> 3.3102336.59999999999997結(jié)果怎么這么長(zhǎng)?小萌看傻了,不過冷靜一看,原來(lái)是:整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式不同,整數(shù)運(yùn)算永遠(yuǎn)是的,而浮點(diǎn)數(shù)運(yùn)算可能會(huì)有四舍五入的誤差。“boss,一共336.6元”。“好的,加上買糖的錢了嗎”?小萌暗罵自己,瞧我這腦筋。再計(jì)算一次,每瓶水3.3元,一共102瓶,再加上一包糖15.5元,輸入如下:>>> 3.3102 15.5352.09999999999997這結(jié)果好像很凌亂,應(yīng)該這么輸入:>>> 336.6 15.5352.1這個(gè)結(jié)果就好看多了。報(bào)告給boss,一共花費(fèi)352.1元。小萌又開始思考了,浮點(diǎn)數(shù)相乘結(jié)果這么怪,浮點(diǎn)數(shù)的除法是怎樣的呢?想到了就實(shí)踐,輸入如下:>>> 153/51.03.0這個(gè)結(jié)果和153除以51的結(jié)果是一樣的,如果155除以51.0呢?輸入如下:>>> 155/51.03.0392156862745097結(jié)果和155除以51也是一樣的。那做地板除和取余又是怎樣的呢?輸入如下:>>> 155//51.03.0>>> 155%51.02.0可以看出,得到的結(jié)果都是浮點(diǎn)型的。2.2.3 復(fù)數(shù)復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成,可以用a bj或complex(a,b)表示,復(fù)數(shù)的實(shí)部a和虛部b都是浮點(diǎn)型。Python支持復(fù)數(shù),不過Python的復(fù)數(shù)我們當(dāng)前階段使用或接觸的比較少,此處就不再具體講解,讀者有一個(gè)概念即可,有興趣可以自行查閱相關(guān)資料。2.2.4 數(shù)據(jù)類型轉(zhuǎn)換有時(shí)我們要對(duì)數(shù)據(jù)內(nèi)置的類型進(jìn)行轉(zhuǎn)換,只需要將數(shù)據(jù)類型作為函數(shù)名即可。數(shù)據(jù)的類型轉(zhuǎn)換時(shí)有如下4個(gè)函數(shù)可以使用:? int(x) 將x轉(zhuǎn)換為一個(gè)整數(shù)。? float(x) 將x轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù)。? complex(x) 將x轉(zhuǎn)換為一個(gè)復(fù)數(shù),實(shí)數(shù)部分為 x,虛數(shù)部分為 0。? complex(x, y) 將x和y轉(zhuǎn)換為一個(gè)復(fù)數(shù),實(shí)數(shù)部分為x,虛數(shù)部分為y。x和y是數(shù)字表達(dá)式。比如,小萌去購(gòu)物,計(jì)算出應(yīng)付金額是352.1元,超市老板為免除找零的麻煩,讓小萌支付352元。Python中的轉(zhuǎn)換可以如下執(zhí)行:>>> int(352.1)352很容易就得到了轉(zhuǎn)換后的結(jié)果。但是金額的操作必須用浮點(diǎn)數(shù)進(jìn)行記賬,這個(gè)容易,用float函數(shù)就行了。輸入如下:>>> float(352.1)352.1這樣就得到了浮點(diǎn)型數(shù)據(jù)。結(jié)果跟輸入的一樣,這下怎么辦呢?把int函數(shù)放入float函數(shù)中是否可以呢?嘗試一下:>>> float(int(352.1))352.0這里先把352.1取整,得到整數(shù)352,再用float將352轉(zhuǎn)換成浮點(diǎn)數(shù)352.0,這樣就得到我們需要的結(jié)果了。雖然輸入的字符看起來(lái)有點(diǎn)復(fù)雜,但是還是得到結(jié)果了。這其實(shí)是函數(shù)的嵌套,后面會(huì)進(jìn)行具體介紹,此處做相關(guān)了解即可。2.2.5 常量所謂常量,就是不能變的變量,比如常用的數(shù)學(xué)常數(shù)π就是一個(gè)常量。在Python中,通常用全部大寫的變量名表示常量。Python中有兩個(gè)比較常見的常量,即PI和E。? PI:數(shù)學(xué)常量pi(圓周率,一般以π表示)。? E:數(shù)學(xué)常量e,即自然常數(shù)。這兩個(gè)常量將會(huì)在后續(xù)章節(jié)中使用,具體的用法在使用中體現(xiàn)。2.3 變量和關(guān)鍵字編程語(yǔ)言最強(qiáng)大的功能之一是操縱變量。變量(variable)是一個(gè)需要熟知的概念,如果你覺得數(shù)學(xué)讓你抓狂,別擔(dān)心,Python中的變量很好理解。變量基本上代表某個(gè)值的名字。2.3.1 變量變量指向各種類型值的名字,以后再用到這個(gè)值時(shí),直接引用名字即可,不用再寫具體的值。在Python中,變量的使用環(huán)境非常寬松,沒有明顯的變量聲明,而且類型不是固定的。你可以把一個(gè)整數(shù)賦值給變量,如果覺得不合適,把字符串賦給變量也可以。在Python中,等號(hào)(=)是賦值語(yǔ)句,可以把任意數(shù)據(jù)類型賦值給變量。如果要定義一個(gè)名為xiaohong的變量,該怎么操作呢?輸入如下:>>> xiaohong='XiaoHong'>>>字符串必須以引號(hào)標(biāo)記開始,并以引號(hào)標(biāo)記結(jié)束。此操作解釋:xiaohong是我們創(chuàng)建的變量,=是賦值語(yǔ)句,XiaoHong是變量值,需要用引號(hào)標(biāo)記。整句話的意思為:創(chuàng)建變量xiaohong并賦值為XiaoHong。小萌疑惑了,怎么前面輸入后按回車鍵就能輸出內(nèi)容,這里怎么跳到輸入提示狀態(tài)呢?別急,還記得前面講的print()嗎?print()是輸出函數(shù),看看這里,沒有使用輸出函數(shù),屏幕上當(dāng)然不會(huì)輸出內(nèi)容了。要輸出內(nèi)容應(yīng)該怎么操作呢?我們嘗試一下:>>> print(xiaohong)XiaoHong不錯(cuò),嘗試成功了。但為什么小萌輸入的是print(xiaohong),結(jié)果卻輸出XiaoHong呢?這就是變量的好處,可以只定義一個(gè)變量,比如xiaohong,把一個(gè)值賦給這個(gè)變量,比如XiaoHong,這樣當(dāng)我們輸出xiaohong時(shí),實(shí)際上輸出的是XiaoHong。在使用變量前需要對(duì)其賦值。沒有值的變量是沒有意義的,編譯器也不會(huì)編譯通過。例如,定義一個(gè)變量為abc,不賦任何值,輸入及結(jié)果如下:>>> abcTraceback (most recent call last): File "", line 1, in abcNameError: name 'abc' is not defined同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量,輸入如下:>>> a = 123 123>>> a='ABC'>>> print(a)ABC這種變量本身類型不固定的語(yǔ)言稱為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言。靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類型,如果賦值時(shí)類型不匹配就會(huì)報(bào)錯(cuò)。和靜態(tài)語(yǔ)言相比,動(dòng)態(tài)語(yǔ)言更靈活。當(dāng)不能確定變量或數(shù)據(jù)的類型時(shí),可以借助解釋器內(nèi)置的函數(shù)type進(jìn)行確認(rèn)。在交互模式下可以如下輸入:>>> type('Hello,world!')測(cè)試得到輸入的結(jié)果類型是字符串類型(str)。>>> type(100)測(cè)試得到輸入的結(jié)果類型是整型(int)。>>> type(3.0)測(cè)試得到輸入的結(jié)果類型是浮點(diǎn)型(float)。>>> a='test type'>>> type(a)測(cè)試得到輸入的結(jié)果類型是字符串類型(str)。>>> b=100>>> type(b)測(cè)試得到輸入的結(jié)果類型是整型(int)。>>> c=3.0>>> type(c)測(cè)試得到輸入的結(jié)果類型是浮點(diǎn)型(float)。只要是用雙引號(hào)或單引號(hào)括起來(lái)的值,都屬于字符串。交互模式下輸入:>>> type('test single quotes')>>> type("test double quote")>>> type("100")>>> type("3.0")>>> b=3>>> type(b)>>> b=100>>> type(b)>>> c=3.0>>> type(c)測(cè)試得到輸入的結(jié)果類型都是字符串類型(str)。注意不要把賦值語(yǔ)句的等號(hào)等同于數(shù)學(xué)中的等號(hào)。比如下面的代碼:a = 100a = a 200小萌一臉疑問,a = a 200是什么等式啊?讀書時(shí)不知道在這個(gè)等式上花費(fèi)了多少腦細(xì)胞,可別再拿這個(gè)騙我了,我可是讀過小學(xué)的。小萌啊小萌,計(jì)算機(jī)可不是人腦,也不需要遵循學(xué)校的知識(shí),計(jì)算機(jī)有計(jì)算機(jī)的思考方式。在編程語(yǔ)言中,賦值語(yǔ)句先計(jì)算右側(cè)的表達(dá)式a 200,得到結(jié)果300,再賦給變量a。由于a之前的值是100,重新賦值后,a的值變成300。我們通過交互模式驗(yàn)證,輸入如下:>>> a=100>>> a=a 200>>> print(a)300和我們所描述的結(jié)果一致。理解變量在計(jì)算機(jī)內(nèi)存中的表示也非常重要。當(dāng)我們輸入如下:>>> a='ABC'這時(shí),Python解釋器做了兩件事情:(1)在內(nèi)存中創(chuàng)建了一個(gè)'ABC'字符串。(2)在內(nèi)存中創(chuàng)建了一個(gè)名為a的變量,并把它指向'ABC'。也可以把一個(gè)變量a賦值給另一個(gè)變量b,這個(gè)操作實(shí)際上是把變量b指向變量a所指向的數(shù)據(jù),例如下面的代碼:>>> a='ABC'>>> b=a>>> a='XYZ'>>> print(b)一行輸出變量b的內(nèi)容到底是'ABC'還是'XYZ'呢?如果從數(shù)學(xué)意義上理解,就會(huì)錯(cuò)誤地得出b和a相同,應(yīng)該是'XYZ'。實(shí)際上,b的值是'ABC'。我們一行一行執(zhí)行代碼,就可以看到到底發(fā)生了什么事。執(zhí)行a = 'ABC',解釋器創(chuàng)建了字符串'ABC'和變量a,并把a(bǔ)指向'ABC',如圖2-3所示。 圖2-3 a指向'ABC'執(zhí)行b = a,解釋器創(chuàng)建了變量b,并把b指向a指向的字符串'ABC',如圖2-4所示。 圖2-4 a、b指向'ABC'執(zhí)行a = 'XYZ',解釋器創(chuàng)建了字符串'XYZ',并把a(bǔ)的指向改為'XYZ',但b沒有更改,如圖2-5所示。 圖2-5 a指向'XYZ',b不變輸出變量b的結(jié)果自然是'ABC'了。2.3.2 變量名稱程序常常選擇有意義的名稱作為變量名,以此標(biāo)記變量的用途。變量名是由數(shù)字或字符組成的任意長(zhǎng)度的字符串,必須以字母開頭。使用大寫字母是合法的,但變量名建議使用小寫字母開頭。Python是區(qū)分大小寫的。舉個(gè)例子來(lái)說(shuō),Name和name是兩個(gè)不同的變量名。交互模式中輸入如下:>>> name='study python is happy'>>> Name='I aggree with you'>>> print(name)study python is happy>>> print(Name)I aggree with you下劃線“_”可以出現(xiàn)在變量名中,經(jīng)常用于連接多個(gè)詞組,如happy_study, do_it_with_ more_practice。交互模式輸入如下:>>> happy_study='stay hungry stay foolish'>>> print(happy_study)stay hungry stay foolish如果給變量取非法的名稱,解釋器就會(huì)顯示語(yǔ)法錯(cuò)誤。請(qǐng)看下面的示例:>>> 2wrongtest='just for test'SyntaxError: invalid syntax該示例提示語(yǔ)法錯(cuò)誤,錯(cuò)誤信息為無(wú)效的語(yǔ)法,原因?yàn)椴皇且宰帜搁_頭的。>>> xiaoming@me='surprised'SyntaxError: can't assign to operator該示例提示語(yǔ)法錯(cuò)誤,錯(cuò)誤信息為不能做指定操作,原因是包含一個(gè)非法字符@。Python不允許使用關(guān)鍵字作為變量名,請(qǐng)看下面的例子:>>> from='from'SyntaxError: invalid syntaxfrom是Python的一個(gè)關(guān)鍵字,因此出現(xiàn)錯(cuò)誤。Python 3中共有33個(gè)關(guān)鍵字,都不能作為變量名來(lái)使用。False None True and as assert breakclass continue def del elif else exceptfinally for from global if import innonlocal lambda is not or pass raisereturn try while with yield2.4 語(yǔ) 句語(yǔ)句是Python解釋器可以運(yùn)行的一個(gè)代碼單元,也可以理解為可以執(zhí)行的命令。我們目前已經(jīng)使用了兩種語(yǔ)句:print打印語(yǔ)句和賦值語(yǔ)句。賦值語(yǔ)句有兩個(gè)作用:一是建立新的變量,二是將值賦予變量。任何變量在使用時(shí)都必須賦值,否則會(huì)被視為不存在的變量。看了上百字,也沒明白什么是語(yǔ)句,小萌暗自抱怨到。于是她隨手在交互模式下輸入 如下:>>> advice='boss,we want have a lunch'剛輸完一句,小萌就停下了,等等,剛才輸入的不就是語(yǔ)句嗎?前面都做過不少示例了,看看還用過什么語(yǔ)句。在交互模式下寫的及時(shí)個(gè)程序不就是print語(yǔ)句嗎?對(duì)了,還可以知道這個(gè)語(yǔ)句中advice的類型是什么樣的。小萌想完,在交互模式下輸入如下:>>> type(advice)這個(gè)語(yǔ)句中advice的類型是字符串(str)類型。還有什么類型的賦值語(yǔ)句呢?對(duì)了,前面還學(xué)習(xí)了整型和浮點(diǎn)型,交互模式輸入:>>> money=99999999>>> type(money)>>> spend=1.11111111>>> type(spend)不錯(cuò),把之前學(xué)習(xí)的溫習(xí)了一下。于是小萌又在交互模式下輸入如下:>>> so happySyntaxError: invalid syntax哎呀,怎么又犯糊涂了,變量是一定要賦值的。于是重新輸入:>>> print('so happy,it is a perfect forenoon')so happy,it is a perfect forenoon小萌突然感覺有人站在自己旁邊,原來(lái)是小智。小智盯著交互模式輸入界面,突然說(shuō)道:&ldq
挺好的 對(duì)初學(xué)者幫助很大 我居然全看懂了
還不錯(cuò),挺好的,沒毛病
適合對(duì)python不懂的人從頭學(xué)起
還行,不是很推薦,實(shí)用性不強(qiáng)
這本書可以,適合初學(xué)者學(xué)習(xí)
書沒有收到,快遞聯(lián)系不上,客服反應(yīng)超級(jí)慢!差評(píng),退款。
適合沒有編程基礎(chǔ)的人,講的很基礎(chǔ)
快遞還是很快的,我在成都,9月29號(hào)晚上買的,不知道為什么從天津發(fā)貨,預(yù)計(jì)10月1號(hào)到,10月1號(hào)還真的到了
對(duì)我的人格提升非常大
講的很清楚,入門很簡(jiǎn)單
書是基礎(chǔ)的python讀物,適合初學(xué)者,關(guān)鍵在于是3.5版,免去了用3.x看2.書的混亂
有趣,好學(xué),實(shí)用,輕松學(xué)習(xí)python的好書。
書的內(nèi)容通俗易懂,是本值得學(xué)習(xí)的書!
書不錯(cuò)。快遞像蝸牛。五天才到
書很先進(jìn),不過書里面有很多錯(cuò)誤,希望下次能夠改正
真的很不錯(cuò)
當(dāng)當(dāng)?shù)陌b如果再好點(diǎn)就好了,,就一個(gè)袋太薄了
科普一下沒壞處
第一次評(píng)論,寫得很深動(dòng),淺顯易懂,好評(píng)!
先看看,主要用來(lái)入門
內(nèi)容通俗易懂,不錯(cuò)
書紙張有點(diǎn)差
很棒的!有引導(dǎo)性
初學(xué)者不錯(cuò)
還行吧拜拜
學(xué)習(xí)下python
買回來(lái)幾天,已經(jīng)快看了三分之一,入門不錯(cuò)
真的真的就是非常基礎(chǔ)的東西,估計(jì)是別人的教材
剛剛收到貨,還沒有看,目前各方面比較滿意。后期再添加評(píng)論。
本書內(nèi)容全面,值得擁有,讓我們玩一場(chǎng)Python的游戲!
這本書比某本銷量大,綠皮的,外國(guó)人寫的強(qiáng)大多了。特別是對(duì)于沒有學(xué)過編程的我來(lái)說(shuō),這本才是0基礎(chǔ)入門的首選!那本書對(duì)于布爾變量只提及true false(原諒我真的是新手),但這本書把另外一些None,0,“”()都說(shuō)明了。其他一些相關(guān)基礎(chǔ)也是這本書提得比較充足。
基于Python最新版本。里面不但示例很多,而且講解也很詳細(xì),能幫助新人很好的鞏固基礎(chǔ)。
看這本書的內(nèi)容簡(jiǎn)介就很好,試讀部分講解詳細(xì),最最主要是3.5版本,值得推薦。。。
書里內(nèi)容非常好,淺顯易懂,適合初學(xué)者,以及業(yè)內(nèi)人士做為參考書
書的版面我喜歡,很簡(jiǎn)潔,不花哨,內(nèi)容還沒看,以后補(bǔ)上