Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
序 言
Python擁有簡潔與直覺的語法,比起 C與 Java更適合初學者。Python
有變數、運算子、條件判斷與迴圈等程式語言所需要的概念,且使用直譯
器執行程式,執行一行程式就可以獲得一行程式的執行結果,獲得即時的回
饋,不需要全部寫完才能執行,對初學者而言降低了進入程式設計的門檻。
想寫一本適合初學者學習 Python的書籍,包含 Python程式設計入門概
念,讀者可以瞭解 Python程式語言的概念與語法,以期讀者可以快速熟悉
Python的撰寫技巧,並希望本書能成為讀者放在手邊隨時翻閱的工具書。
本書分成八章,介紹 Python的基礎概念,分別是程式編輯器環境介紹、
變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類
別與例外等,讓讀者可以熟悉 Python的概念與語法。
最後感謝全華圖書編輯們對於這本書的付出,希望讀者能夠經由這本書
瞭解 Python程式設計的基礎概念與製作出心中所想要的程式。
黃建庭2018.09
目 錄
Chapter 01 程式語言、Python簡介與程式編輯器介紹
1-1 認識程式語言 ........................................................................1-21-1-1 何謂程式語言 ............................................................................... 1-21-1-2 程式語言的分類 ............................................................................ 1-2
1-2 程式設計演算法的介紹 .........................................................1-4
1-3 物件導向程式設計 .................................................................1-6
1-4 Python簡介 ..........................................................................1-8
1-5 Python開發環境 ...................................................................1-91-5-1 Python下載與安裝 ....................................................................... 1-91-5-2 使用 Python編輯與執行程式 ..................................................... 1-131-5-3 使用官方 IDLE編輯與執行程式 ................................................. 1-131-5-4 使用 Anaconda編輯程式與執行 ................................................ 1-17
1-6 Python的輸入與輸出 ..........................................................1-26
1-7 第一個 Python程式 ............................................................1-28
Chapter 02 資料型別、變數、運算子與字串
2-1 Python資料型別 ...................................................................2-2
2-2 變數 ......................................................................................2-62-2-1 何謂變數 ...................................................................................... 2-62-2-2 變數的命名 ................................................................................... 2-9
2-3 運算子 .................................................................................2-102-3-1 指定運算子 ................................................................................. 2-102-3-2 算術運算子 ................................................................................. 2-102-3-3 比較運算子 ................................................................................. 2-122-3-4 邏輯運算子 ................................................................................. 2-13
2-3-5 in與 is運算子 ............................................................................ 2-142-3-6 位元運算子 ................................................................................. 2-162-3-7 運算子優先權次序 ...................................................................... 2-16
2-4 字串 ....................................................................................2-182-4-1 字串運算子 ................................................................................. 2-192-4-2 字串的內建函式 .......................................................................... 2-21
2-5 範例練習 .............................................................................2-28
Chapter 03 Python的資料儲存容器
3-1 tuple ......................................................................................3-2
3-2 串列 (list) ...............................................................................3-53-2-1 新增與修改串列 ............................................................................ 3-53-2-2 串接兩個串列 ............................................................................... 3-83-2-3 產生串列 ...................................................................................... 3-83-2-4 使用「[開始 :結束 :間隔 ]」存取串列 ......................................... 3-93-2-5 拷貝串列 .....................................................................................3-11
3-3 字典 (dict) ...........................................................................3-123-3-1 新增與修改字典 .......................................................................... 3-123-3-2 將 tuple或串列轉換成字典 ......................................................... 3-143-3-3 使用「函式 update」合併兩個字典 ............................................ 3-143-3-4 使用「函式 copy」複製字典 ...................................................... 3-153-3-5 使用「for」讀取字典每個元素 ................................................... 3-16
3-4 集合 (set) ............................................................................3-173-4-1 新增與修改集合 .......................................................................... 3-173-4-2 集合的運算 ................................................................................. 3-183-4-3 集合的比較 ................................................................................. 3-18
3-5 範例練習 .............................................................................3-19
Chapter 04 選擇結構
4-1 單向選擇結構 ........................................................................4-2
4-2 雙向選擇結構 ........................................................................4-4
4-3 多向選擇結構 ........................................................................4-7
4-4 巢狀選擇結構 ......................................................................4-12
4-5 條件判斷與運算子「in」 .....................................................4-14
Chapter 05 迴圈與生成式
5-1 迴圈結構 — 使用 for .............................................................5-4
5-2 while迴圈結構 ......................................................................5-8
5-3 巢狀迴圈 .............................................................................5-15
5-4 迴圈結構特殊指令的使用—break、continue與 else ..........5-19
5-5 for迴圈與資料儲存容器 ......................................................5-235-5-1 使用 for讀取 tuple ...................................................................... 5-235-5-2 使用 for讀取串列 ....................................................................... 5-245-5-3 使用 for讀取字典 ....................................................................... 5-24
5-6 生成式 (comprehension)與產生器 (generator) ...................5-255-6-1 串列生成式 ................................................................................. 5-255-6-2 字典生成式 ................................................................................. 5-275-6-3 集合生成式 ................................................................................. 5-285-6-4 產生器 (generator) ..................................................................... 5-29
5-7 範例練習 .............................................................................5-29
Chapter 06 函式與遞迴
6-1 函式 ......................................................................................6-26-1-1 函式的定義、傳回值與呼叫 .......................................................... 6-26-1-2 函式與變數的作用範圍 ................................................................. 6-5
6-2 函式範例練習 ........................................................................6-7
6-3 函式的輸入與輸出 ...............................................................6-106-3-1 函式的輸入 ................................................................................. 6-106-3-2 函式的回傳值 ............................................................................. 6-126-3-3 函式的進階輸入 — 位置引數與關鍵字引數 ................................ 6-13
6-4 函式的說明文件 ..................................................................6-16
6-5 遞迴 ....................................................................................6-196-5-1 求 n階乘 .................................................................................... 6-196-5-2 最大公因數 ................................................................................. 6-21
Chapter 07 模組、套件與獨立程式
7-1 模組 ......................................................................................7-27-1-1 實作模組 ...................................................................................... 7-27-1-2 匯入模組 ...................................................................................... 7-27-1-3 匯入模組的路徑 ............................................................................ 7-4
7-2 套件 ......................................................................................7-57-2-1 實作套件 ...................................................................................... 7-57-2-2 套件的使用 ................................................................................... 7-7
7-3 腳本程式 ...............................................................................7-87-3-1 實作腳本程式 ............................................................................... 7-87-3-2 指令列引數 ..................................................................................7-11
Chapter 08 類別與例外
8-1 類別 ......................................................................................8-28-1-1 實作類別 ...................................................................................... 8-28-1-2 繼承 .............................................................................................. 8-38-1-3 覆寫函式 ...................................................................................... 8-48-1-4 新增參數的覆寫函式 .................................................................... 8-58-1-5 新增函式 ...................................................................................... 8-68-1-6 多型 (polymorphism) .................................................................... 8-88-1-7 類別內無法直接存取的變數 ........................................................ 8-108-1-8 特殊函式 (special method) ..........................................................8-118-1-9 組合 (composition) ..................................................................... 8-148-1-10 類別方法 .................................................................................. 8-158-1-11 靜態方法 ................................................................................... 8-17
8-2 例外 (exception) ..................................................................8-178-2-1 try-except ................................................................................... 8-178-2-2 try-except-else ........................................................................... 8-188-2-3 try-except-as-else ...................................................................... 8-198-2-4 try-except-as-else與自訂例外類別 ............................................ 8-218-2-5 try-except-as-else-finally與自訂例外類別 .................................. 8-23
Chapter
1-1 認識程式語言1-2 程式設計演算法的介紹1-3 物件導向程式設計1-4 Python簡介1-5 Python開發環境1-6 Python的輸入與輸出1-7 第一個 Python程式
1程式語言、
Python簡介與程式編輯器介紹
輕鬆玩 Python程式設計
1-2
1-1 認識程式語言1-1-1 何謂程式語言
程式語言是人與電腦溝通的媒介,要了解程式語言才能命令電腦完成想要的功能,
需要先了解程式語言儲存資料的機制、計算所需要的運算子、選擇與重複結構的語法,
每一種運算子與語法都有其功能與意義,要對程式語言的概念有一些了解才能正確撰寫
程式,在電腦上執行程式達成想要的功能。
1-1-2 程式語言的分類存放在電腦中的資料與指令都是以二進位方式表示,所謂二進位是指使用 0與 1組
成資料與指令,機器語言 (Machine Language)是最早的程式語言,程式設計師必須查詢
指令的二進位碼,並將資料轉成 0與 1,不同廠牌的處理器各有屬於自己的指令二進位
碼,不同的處理器就需要改寫程式,因此欠缺彈性且不易撰寫。
因機器語言不容易使用,後來演進為組合語言 (Assembly Language),組合語言改進
以二進位方式撰寫程式,提供以英文字串表達指令與資料,透過組譯器 (Assembler)將組
合語言轉成機器語言,組合語言提供英文字串的指令與變數,讓撰寫程式更符合人性,
例如:LOAD表示載入資料,但組合語言的指令集與處理器相關,處理器擁有自己的指
令集,組合語言在不同廠牌的處理器就需要改寫程式碼。
為了能對所有處理器都不需改寫程式而產生了高階語言 (High-Level programming
language),高階語言透過編譯器 (Compiler)轉成機器語言,編譯器支援各類型的處理器,
就可將程式轉成機器語言,如此達成程式可以跨平台,與處理器無關;高階語言也可以
透過直譯器 (Interpreter)執行,直譯器會將程式從頭開始一行接著一行執行,透過不同處
理器版本的直譯器達成跨平台。Python、PHP、Visual Basic、Java、C、與 C++都屬於
高階語言,Python與 PHP屬於直譯器的高階語言,C與 C++屬於編譯器的高階語言,
而 Visual Basic與 Java會先將程式碼編譯成中間碼,再將中間碼透過直譯器執行,所以
Visual Basic與 Java擁有編譯器與直譯器特性的語言。
輕鬆玩 Python程式設計
2-28
2-5 範例練習範例 2-5-1 服裝訂購系統
( :ch2\ex-服裝訂購系統 .py)
假設上衣 300元、褲子 350元與背心 400元,使用者可以自行輸入三種服裝的數量,請
設計一個程式計算訂購服裝的總金額。
解題想法
將上衣、褲子與背心訂購數量依序指定到三個整數變數中,乘以對應的價格,再加總起
來。本題會使用到運算子的乘法 (*)、加法 (+)與指定運算子 (=)。
12345
上衣 = int(input('請輸入上衣數量? '))褲子 = int(input('請輸入褲子數量? '))背心 = int(input('請輸入背心數量? '))總金額 = 上衣 *300 + 褲子 *350 + 背心 *400print('訂購服裝的總金額為 ', 總金額 )
執行結果
依序輸入上衣 2件、褲子 3件與背心 1件,結果顯示在螢幕。
請輸入上衣數量? 2
請輸入褲子數量? 3
請輸入背心數量? 1
訂購服裝的總金額為 2050
程式解說
• 第 1行:於螢幕顯示「請輸入上衣數量?」,允許使用者輸入上衣數量,並經由函式
int轉換成整數,指定給變數「上衣」。
• 第 2行:於螢幕顯示「請輸入褲子數量?」,允許使用者輸入褲子數量,並經由函式
int轉換成整數,指定給變數「褲子」。
• 第 3行:於螢幕顯示「請輸入背心數量?」,允許使用者輸入背心數量,並經由函式
int轉換成整數,指定給變數「背心」。
Chapter 2 資料型別、變數、運算子與字串
2-29
• 第 4行:計算訂購總金額,使用物品金額乘以對應的物品數量再加總,獲得訂購總金
額,指定給變數「總金額」。
• 第 5行:顯示「訂購服裝的總金額為」與變數「總金額」到螢幕上。
範例 2-5-2 計算圓面積與圓周長
( :ch2\2-5-2-計算圓面積與圓周長 .py)
請設計一個程式計算圓面積與圓周長,依輸入的半徑計算圓面積與圓周長。
解題想法
將圓的半徑儲存到變數,再依照圓面積與圓周長公式進行運算,將計算結果儲存到變數
「圓周長」與「圓面積」。本題會使用到運算子的乘法 (*)與指定運算子 (=)。
12345
半徑 = float(input('請輸入半徑? ')) PI = 3.14159 圓周長 = 2 * PI * 半徑 圓面積 = 半徑 * 半徑 * PI print('圓周長為 ', 圓周長 , '圓面積為 ', 圓面積 )
執行結果
執行後,輸入半徑「10」,按下「Enter」鍵,圓周與面積計算結果顯示在螢幕。
請輸入半徑? 10
圓周長為 62.8318 圓面積為 314.159
程式解說
• 第 1行:於螢幕顯示「請輸入半徑?」,允許使用者輸入半徑,並經由 float函式轉換
成浮點數,指定給變數「半徑」。
• 第 2行:定義 PI為 3.14159。
• 第 3行:計算圓周長,使用半徑乘以 2轉換成直徑,再乘以 3.14159獲得圓周長,指
定給變數「圓周長」。
• 第 4行:計算圓面積,使用半徑乘以半徑,再乘以 3.14159獲得圓面積,指定給變數
「圓面積」。
• 第 5行:顯示圓周長與圓面積到螢幕上。
輕鬆玩 Python程式設計
2-30
範例 2-5-3 攝氏轉華氏
( :ch2\2-5-3-攝氏轉華氏 .py)
請設計一個程式將輸入的攝氏溫度轉成華氏溫度,轉換公式如下。
華氏溫度 =攝氏溫度 *9/5+32
解題想法
將攝氏溫度儲存到浮點數變數,再依照攝氏溫度轉華氏溫度公式進行運算,將計算結果
儲存到另一個浮點數變數。本題會使用到運算子的加法 (+)、乘法 (*)、除法 (/)與指定運
算子 (=)。
123
c = float(input('請輸入攝氏溫度? ')) f = c * 9 / 5 +32 print('華氏溫度為 ', f)
執行結果
輸入攝氏溫度「50」,按下「Enter」按鈕,結果顯示在螢幕。
請輸入攝氏溫度? 50
華氏溫度為 122.0
程式解說
• 第 1行:於螢幕顯示「請輸入攝氏溫度?」,允許使用者輸入攝氏溫度,並經由 float
函式轉換成浮點數。
• 第 2行:計算華氏,使用「攝氏乘以 9除以 5加 32」轉換成華氏,儲存在變數 f。
• 第 3行:顯示「華氏溫度為」與變數 f的結果。
範例 2-5-4 複利計算
( :ch2\2-5-4-複利計算 .cpp)
寫一個程式協助使用者計算定存一筆錢,依照所輸入的利率,定存一年到三年的本金與
利息和,使用複利方式計算。
Chapter 2 資料型別、變數、運算子與字串
2-31
解題想法
將本金與利率指定到兩個變數,再依照複利公式計算前三年的本利和,將計算結果分別
儲存到三個浮點數變數。本題會使用到運算子的加法 (+)、乘法 (*)、除法 (/)、次方 (**)
與指定運算子 (=)。
12345678
money = int(input('請輸入本金? ')) interest = float(input('請輸入年利率 (%)? ')) y1 = money * (1 + interest/100) y2 = money * ((1 + interest/100) ** 2) y3 = money * ((1 + interest/100) ** 3) print('第一年本利和為 ', y1) print('第二年本利和為 ', y2) print('第三年本利和為 ', y3)
執行結果
本金輸入「10000」,利率輸入「1.5」,計算結果顯示在螢幕。
請輸入本金? 10000
請輸入年利率 (%)? 1.5
第一年本利和為 10149.999999999998
第二年本利和為 10302.249999999996
第三年本利和為 10456.783749999997
程式解說
• 第 1行:於螢幕顯示「請輸入本金?」,允許使用者輸入本金,並經由 int函式轉換成
整數,儲存入變數 money。
• 第 2行:於螢幕顯示「請輸入年利率 (%)?」,允許使用這輸入年利率,並經由 float
函式轉換成浮點數,儲存入變數 interest。
• 第 3行:計算第一年本利和,使用「本金乘以 (1加上利率除以 100)」轉換成第一年本
利和,儲存到變數 y1。
• 第 4行:計算第二年本利和,使用「本金乘以 (1加上利率除以 100)的二次方」轉換
成第二年本利和,儲存到變數 y2。
• 第 5行:計算第三年本利和,使用「本金乘以 (1加上利率除以 100)的三次方」轉換
成第三年本利和,儲存到變數 y3。
輕鬆玩 Python程式設計
2-32
• 第 6行:顯示「第一年本利和為」與變數 y1的結果。
• 第 7行:顯示「第二年本利和為」與變數 y2的結果。
• 第 8行:顯示「第三年本利和為」與變數 y3的結果。
範例 2-5-5 判斷迴文
( :ch2\2-5-5-迴文 .cpp)
寫一個程式協助判斷文字是否為迴文,若一個字串反轉過來與原來字串相同,則稱作迴
文,若是迴文,則回傳 True,否則回傳 False。
解題想法
使用 [::-1]將字串反轉,再與原來字串比較是否相同,若是迴文,則回傳 True,否則回傳
False。
12
s = input('請輸入一個字串? ')print('迴文判斷結果為 ', s == s[::-1])
執行結果
輸入「abvba」,判斷迴文結果顯示在螢幕。
請輸入一個字串? abvba
迴文判斷結果為 True
程式解說
• 第 1行:於螢幕顯示「請輸入一個字串?」,允許使用者輸入字串,輸入字串指定為
變數 s。
• 第 2行:顯示「迴文判斷結果為」與判斷 s與 s[::-1]是否相同的結果。
2-33
本章習題實作題
1.求三數總和與平均
求第一次期中考、第二次期中考與期末考成績,成績皆為整數,請計算分數的加總與
平均。
預覽程式結果
第一次期中考輸入「75」,第二次期中考輸入「80」,期末考輸入「65」,計算結果顯
示在螢幕如下。
請輸入第一次期中考成績? 75
請輸入第二次期中考成績? 80
請輸入期末考成績? 65
總分為 220 平均為 73.33333333333333
2. 英制轉公制
將身高由英制改成公制,例如 5尺 8吋換算成公制,1尺等於 12吋,1吋等於 2.54
公分,轉換公式為 (5*12+8)*2.54等於 172.72公分。
預覽程式結果
輸入「5」尺,輸入「8」吋,計算結果顯示在螢幕如下。
請輸入幾尺? 5
請輸入幾吋? 8
轉換成 172.72 公分