第一週:課程介紹與回顧
課程目標及學習方法介紹
回顧基礎程式設計概念(變數、資料型態、控制結構等)
- 教學目標
- 回顧與強化變數、資料型態及控制結構的基本概念
- 透過範例程式與練習,加深學生對這些基礎概念的理解
第一部分:變數與資料型態(45分鐘)
變數的基本概念
資料型態介紹
- 整數型態(int)
- 浮點數型態(float/double)
- 字串型態(String)
- 布林型態(boolean)
範例程式:變數與資料型態的使用
課堂練習:變數與資料型態
- 練習1:定義自己的變數,並輸出基本個人資料(如姓名、年齡、學校名稱等)。
- 練習2:計算兩個數字的和、差、積、商,並輸出結果。
Python 基本運算介紹
- Python 提供了多種基本運算符,這些運算符可以用來執行數學計算和邏輯運算。以下是 Python 中常用的基本運算符及其功能介紹。
數學運算符
運算符 |
描述 |
例子 |
結果 |
+ |
加法 |
3 + 5 |
8 |
- |
減法 |
10 - 4 |
6 |
* |
乘法 |
7 * 6 |
42 |
/ |
除法 |
8 / 2 |
4.0 |
// |
整數除法 |
9 // 4 |
2 |
% |
取餘數 |
10 % 3 |
1 |
** |
指數運算 |
2 ** 3 |
8 |
邏輯運算符
運算符 |
描述 |
例子 |
結果 |
and |
邏輯與 |
True and False |
False |
or |
邏輯或 |
True or False |
True |
not |
邏輯非 |
not True |
False |
比較運算符
運算符 |
描述 |
例子 |
結果 |
== |
相等 |
5 == 5 |
True |
!= |
不相等 |
5 != 3 |
True |
> |
大於 |
5 > 3 |
True |
< |
小於 |
5 < 3 |
False |
>= |
大於或等於 |
5 >= 5 |
True |
<= |
小於或等於 |
3 <= 5 |
True |
Python 中的 += 運算符
- += 是 Python 中的一種增量賦值運算符,它的主要作用是將變量的當前值與右側的值相加,然後將結果賦值給左側的變量。這是一個簡潔的方式來執行加法並更新變量的值。
- 特點
- += 運算符可以用於數字類型,也可以用於其他可加的數據類型,如字串和列表。
- 當用於字串時,+= 將兩個字串連接起來。
- 當用於列表時,+= 將右側列表的元素添加到左側列表中。
第二部分:控制結構(75分鐘)
條件判斷結構
- if、else if、else結構
- 巢狀條件判斷
是指在一個條件判斷語句內部再包含其他條件判斷語句。這樣的結構使得程式能夠處理更複雜的邏輯判斷。
範例程式:條件判斷
迴圈結構
- for迴圈
- while迴圈
- 迴圈控制:break與continue
範例程式:迴圈的應用
課堂練習:控制結構
- 練習3:根據輸入的分數,判斷學生的成績等級(A、B、C、D、F)。
- 練習4:使用for或while迴圈,設計一個程序,輸出1到100之間所有的偶數。
第二週:進階函數設計
在這一週的課程中,我們將深入探討 Python 中的進階函數設計,包括以下主題:
- 函數定義與參數傳遞
- 函數定義
- 使用 def 關鍵字來定義函數。
- 函數可以接受參數,並返回值。
- 範例
- 參數傳遞
- 位置參數:根據位置傳遞的參數。
- 關鍵字參數:通過指定參數名稱來傳遞的參數。
- 默認參數:可以為參數設置默認值。
- 可變參數:使用 *args 和 **kwargs 來接收可變數量的參數。
- *args 用於接收 任意數量的 位置參數。
- 當函數被調用時,所有的位置參數都會被收集到一個元組中。
- **kwargs 用於接收 任意數量的 關鍵字參數。
- 當函數被調用時,所有的關鍵字參數會被收集到一個字典中。
- 範例

-
在上述 print_info 函數的呼叫中:
-
位置參數 1, 2, 3 被收集到元組 args 中,輸出為 (1, 2, 3)。
-
關鍵字參數 name="Alice" 和 age=25 被收集到字典 kwargs 中,輸出為 {'name': 'Alice', 'age': 25}。
-
函數列表操作練習
以列表作為參數,輸出指定值。
- 函數數學運算練習
以列表作為參數,計算後輸出指定值。
- 遞迴(Recursion)的概念與應用
- 遞迴概念
- 遞迴是函數調用自身的過程。
通常用於解決可以分解為相同子問題的問題。
- 遞迴範例:計算階乘
執行流程
呼叫 factorial(5): 程式碼先呼叫 factorial 函數,並將 5 作為參數傳遞。
執行 if n == 0:: 由於 n 不等於 0,因此執行 else 程式碼區塊。
遞迴呼叫: 程式碼執行 return n * factorial(n - 1),即 5 * factorial(4)。
遞歸呼叫 factorial(4): 程式碼再次呼叫 factorial 函數,並將 4 作為參數傳遞。
遞歸呼叫 factorial(3): 由於 n 不等於 0,程式碼再次遞迴呼叫 factorial(3)。
遞歸呼叫 factorial(2): 同樣,程式碼遞歸呼叫 factorial(2)。
遞歸呼叫 factorial(1): 程式碼遞歸呼叫 factorial(1)。
遞歸呼叫 factorial(0): 最後,程式碼遞歸呼叫 factorial(0)。
傳回基線值: 由於 n 等於 0,factorial(0) 傳回 1。
回溯計算: 程式碼逐層回溯,計算 1 * 1 = 1、2 * 1 = 2、3 * 2 = 6、4 * 6 = 24、5 * 24 = 120。
最終結果: 最終,factorial(5) 返回 120,並列印輸出結果。
- 遞迴應用
- 遞迴常用於數據結構(如樹和圖)的遍歷。
- 確保每次遞迴都有明確的終止條件,以避免無窮遞迴。
- 函數重載與匿名函數
- 函數重載
Python 不支持傳統的函數重載,但可以通過可變參數來模擬。
- 範例
執行流程
定義函數: 程式碼首先定義了 multiply 函數,它接受兩個參數,並傳回它們的乘積。
第一次呼叫: 程式碼呼叫 multiply 函數,傳遞參數 2 和 3,函數傳回 6,並列印列印輸出結果。
第二次呼叫: 程式碼呼叫 multiply 函數,只傳遞參數 5,由於 b 是可選參數,使用預設值 1,函數傳回 5,並列印輸出結果。
- 匿名函數(Lambda 函數)
使用 lambda 關鍵字定義的匿名函數,通常用於簡單的函數。
- 範例
執行流程
初始狀態: pairs 清單包含三個元組:(1, 2)、(3, 1) 和 (5, 0)。
排序依據: sorted() 函數使用匿名函數 lambda pair: pair[1] 作為排序依據,它會取得每個元組的第二個元素。
排序過程:
首先,sorted() 函數會比較 (1, 2) 和 (3, 1) 的第二個元素,即 2 和 1。由於 1 小於 2,因此 (3, 1) 會排在 (1, 2) 之前。
接著,sorted() 函數會比較 (3, 1) 和 (5, 0) 的第二個元素,即 1 和 0。由於 0 小於 1,因此 (5, 0) 會排在 (3, 1) 之前。
最後,sorted() 函數會比較 (1, 2) 和 (5, 0) 的第二個元素,即 2 和 0。由於 0 小於 2,因此 (5, 0) 會排在 (1, 2) 之前。
排序結果: 最終,sorted_pairs 清單包含三個元組,依照第二個元素從小到大排序:[(5, 0), (3, 1), (1, 2)]。
- 總結
本週我們學習了如何定義函數、傳遞參數、遞迴的概念及其應用,以及函數重載和匿名函數的使用。
第三週:資料結構介紹
陣列(Array)與串列(List)的進階操作
鏈結串列(Linked List)的基本概念與實作
目標:
- 理解陣列和串列的進階操作,並能應用於程式設計中。
- 掌握鏈結串列的基本概念,並能實作簡單的鏈結串列。
課程大綱:
1. 陣列與串列的進階操作
1.1 陣列
-
二維陣列
- 概念: 二維陣列可以想像成表格,由多個一維陣列組成,每個一維陣列代表表格的一行。
- 建立: 在程式中,可以使用巢狀迴圈建立二維陣列,例如:
- 存取: 使用兩個索引值存取二維陣列中的元素,例如:
- 操作: 可以在二維陣列中進行各種操作,例如:
- 遍歷所有元素:使用巢狀迴圈遍歷所有元素。
- 計算元素總和:使用巢狀迴圈計算所有元素的總和。
- 搜尋特定元素:使用巢狀迴圈搜尋特定元素。
-
陣列排序
- 概念: 陣列排序是指將陣列中的元素按照特定順序排列。
- 常見排序演算法:
- 冒泡排序: 逐一比較相鄰元素,交換位置,直到所有元素都排序完成。
- 插入排序: 將未排序的元素逐一插入已排序的元素中,直到所有元素都排序完成。
- 選擇排序: 找出未排序元素中最小的元素,並與第一個未排序元素交換位置,直到所有元素都排序完成。
- 實作: 使用程式碼實作上述排序演算法,並比較不同演算法的效率。
-
陣列搜尋
- 概念: 陣列搜尋是指在陣列中查找特定元素。
- 常見搜尋演算法:
- 線性搜尋: 逐一比較陣列中的元素,直到找到目標元素或遍歷完所有元素。
- 二元搜尋: 適用於已排序的陣列,每次將搜尋範圍縮減一半,直到找到目標元素或搜尋範圍為空。
- 實作: 使用程式碼實作上述搜尋演算法,並比較不同演算法的效率。
1.2 串列
-
串列的增刪改查操作
- 增: 在串列中新增元素,例如:
- 刪: 從串列中刪除元素,例如:
- 改: 修改串列中元素的值,例如:
- 查: 查詢串列中元素的值,例如:
-
串列的應用
- 佇列: 遵循先進先出 (FIFO) 的原則,例如:
- 堆疊: 遵循後進先出 (LIFO) 的原則,例如:
2. 鏈結串列
2.1 鏈結串列的概念
- 定義: 鏈結串列是一種線性資料結構,由一系列節點組成,每個節點包含資料域和指標域。指標域指向下一個節點,形成一個鏈結。
- 節點: 鏈結串列的節點通常包含兩個部分:
- 資料域: 儲存實際的資料。
- 指標域: 指向下一個節點的指標。
2.2 鏈結串列的實作
-
建立鏈結串列:
- 首先,定義一個節點類別,包含資料域和指標域。
- 然後,建立一個頭節點,作為鏈結串列的起始點。
- 隨後,根據需要,建立新的節點,並將其插入到鏈結串列中。
-
插入節點:
- 找到要插入節點的位置。
- 建立一個新的節點,並將其資料域設定為要插入的資料。
- 將新節點的指標域指向要插入位置的下一個節點。
- 將要插入位置的前一個節點的指標域指向新節點。
-
刪除節點:
- 找到要刪除的節點。
- 將要刪除節點的前一個節點的指標域指向要刪除節點的下一個節點。
- 將要刪除的節點從記憶體中釋放。
3. 課堂練習
- 設計一個程式,利用陣列儲存學生的成績,並計算平均成績。
- 設計一個程式,利用串列儲存待辦事項,並提供新增、刪除、修改和查詢功能。
- 實作一個簡單的鏈結串列,並進行插入和刪除節點的操作。
4. 課後作業
- 實作一個程式,利用二維陣列儲存棋盤,並設計一個簡單的棋盤遊戲。
- 實作一個程式,利用串列儲存一個購物清單,並提供新增、刪除、修改和查詢功能。
- 實作一個鏈結串列,並設計一個函式,用於判斷鏈結串列中是否存在重複的節點。
第四週:物件導向設計(OOP)基礎
類別與物件
封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism)
第五週:物件導向設計(OOP)進階
抽象類別與介面(Interface)
多重繼承與組合
第六週:檔案處理
檔案讀寫的基本操作
二進位檔案與文字檔案處理
第七週:例外處理與除錯
例外處理機制(try, catch, finally)
常見錯誤除錯技巧
第八週:期中考試準備與複習
回顧與練習,準備期中考試
第九週:期中考試
第十週:演算法入門
常見演算法介紹(排序、搜尋)
時間複雜度與空間複雜度的概念
第十一週:排序演算法
泡沫排序(Bubble Sort)、選擇排序(Selection Sort)、插入排序(Insertion Sort)
演算法的實作與比較
第十二週:搜尋演算法
線性搜尋(Linear Search)與二元搜尋(Binary Search)
搜尋演算法的實作與應用
第十三週:資料結構進階
堆疊(Stack)與佇列(Queue)
樹狀結構(Tree)與二元樹(Binary Tree)
第十四週:圖形使用者介面(GUI)程式設計入門
GUI 基本概念
事件驅動程式設計
第十五週:進階GUI設計
視窗小工具(如按鈕、文字框、選單等)的使用
GUI專案的實作與展示
第十六週:專案開發與團隊合作
小組專案設計與開發
版本控制系統(如Git)的基本使用
第十七週:期末專案展示
小組專案展示與同儕互評
專案優化與報告準備
第十八週:期末考試與總結
期末考試
課程總結與未來學習建議