黃建庭 -...

14
Python 擁有簡潔與直覺的語法,比起 C Java 更適合初學者。Python 有變數、運算子、條件判斷與迴圈等程式語言所需要的概念,且使用直譯 器執行程式,執行一行程式就可以獲得一行程式的執行結果,獲得即時的回 饋,不需要全部寫完才能執行,對初學者而言降低了進入程式設計的門檻。 想寫一本適合初學者學習 Python 的書籍,包含 Python 程式設計入門概 念,讀者可以瞭解 Python 程式語言的概念與語法,以期讀者可以快速熟悉 Python 的撰寫技巧,並希望本書能成為讀者放在手邊隨時翻閱的工具書。 本書分成八章,介紹 Python 的基礎概念,分別是程式編輯器環境介紹、 變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉 Python 的概念與語法。 最後感謝全華圖書編輯們對於這本書的付出,希望讀者能夠經由這本書 瞭解 Python 程式設計的基礎概念與製作出心中所想要的程式。 黃建庭 2018.09

Transcript of 黃建庭 -...

Page 1: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

序 言

Python擁有簡潔與直覺的語法,比起 C與 Java更適合初學者。Python

有變數、運算子、條件判斷與迴圈等程式語言所需要的概念,且使用直譯

器執行程式,執行一行程式就可以獲得一行程式的執行結果,獲得即時的回

饋,不需要全部寫完才能執行,對初學者而言降低了進入程式設計的門檻。

想寫一本適合初學者學習 Python的書籍,包含 Python程式設計入門概

念,讀者可以瞭解 Python程式語言的概念與語法,以期讀者可以快速熟悉

Python的撰寫技巧,並希望本書能成為讀者放在手邊隨時翻閱的工具書。

本書分成八章,介紹 Python的基礎概念,分別是程式編輯器環境介紹、

變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類

別與例外等,讓讀者可以熟悉 Python的概念與語法。

最後感謝全華圖書編輯們對於這本書的付出,希望讀者能夠經由這本書

瞭解 Python程式設計的基礎概念與製作出心中所想要的程式。

黃建庭2018.09

Page 2: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

目 錄

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

Page 3: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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

Page 4: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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

Page 5: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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

Page 6: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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

Page 7: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

Chapter

1-1 認識程式語言1-2 程式設計演算法的介紹1-3 物件導向程式設計1-4 Python簡介1-5 Python開發環境1-6 Python的輸入與輸出1-7 第一個 Python程式

1程式語言、

Python簡介與程式編輯器介紹

Page 8: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉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擁有編譯器與直譯器特性的語言。

Page 9: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

輕鬆玩 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轉換成整數,指定給變數「背心」。

Page 10: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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行:顯示圓周長與圓面積到螢幕上。

Page 11: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

輕鬆玩 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)

寫一個程式協助使用者計算定存一筆錢,依照所輸入的利率,定存一年到三年的本金與

利息和,使用複利方式計算。

Page 12: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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。

Page 13: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

輕鬆玩 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]是否相同的結果。

Page 14: 黃建庭 - opentech.com.tw變數、運算子、各種儲存容器、選擇結構、迴圈與生成式、函式、模組、類 別與例外等,讓讀者可以熟悉Python 的概念與語法。

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 公分