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