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

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

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

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