# 第一週:課程介紹與回顧 ## 課程目標及學習方法介紹 回顧基礎程式設計概念(變數、資料型態、控制結構等) * 教學目標 * 回顧與強化變數、資料型態及控制結構的基本概念 * 透過範例程式與練習,加深學生對這些基礎概念的理解 ## 第一部分:變數與資料型態(45分鐘) ### 變數的基本概念 * 定義與宣告 * 變數命名規則與最佳實踐 ### 資料型態介紹 * 整數型態(int) * 浮點數型態(float/double) * 字串型態(String) * 布林型態(boolean) ### 範例程式:變數與資料型態的使用 ```python! # 範例1:簡單的變數宣告與賦值 name = "Alice" age = 17 height = 165.5 is_student = True print("Name:", name) print("Age:", age) print("Height:", height, "cm") print("Is student:", is_student) ``` ### 課堂練習:變數與資料型態 * 練習1:定義自己的變數,並輸出基本個人資料(如姓名、年齡、學校名稱等)。 ```python! # 定義變數並賦值 name = "jason" age = 18 school_name = "Zhensheng High School" major = "Electronic Equipment Maintenance" # 輸出個人資料 print("姓名:", name) print("年齡:", age) print("學校名稱:", school_name) print("專業:", major) ``` - 練習2:計算兩個數字的和、差、積、商,並輸出結果。 ```python! # 輸入兩個數字 num1 = float(input("請輸入第一個數字: ")) num2 = float(input("請輸入第二個數字: ")) # 計算和、差、積、商 sum_result = num1 + num2 difference_result = num1 - num2 product_result = num1 * num2 quotient_result = num1 / num2 # 輸出計算結果 print("兩個數字的和是:", sum_result) print("兩個數字的差是:", difference_result) print("兩個數字的積是:", product_result) print("兩個數字的商是:", quotient_result) ``` ### 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| ```python! # 數學運算示例 a = 10 b = 3 加法 = a + b # 10 + 3 減法 = a - b # 10 - 3 乘法 = a * b # 10 * 3 除法 = a / b # 10 / 3 整數除法 = a // b # 10 // 3 取餘數 = a % b # 10 % 3 指數運算 = a ** b # 10 ** 3 print("加法:", 加法) print("減法:", 減法) print("乘法:", 乘法) print("除法:", 除法) print("整數除法:", 整數除法) print("取餘數:", 取餘數) print("指數運算:", 指數運算) ``` ### 邏輯運算符 |運算符|描述|例子|結果| |---|---|---|---| |and|邏輯與|True and False|False| |or |邏輯或|True or False|True| |not|邏輯非|not True |False| ```python! # 邏輯運算示例 x = True y = False 邏輯與 = x and y # True and False 邏輯或 = x or y # True or False 邏輯非 = not x # not True print("邏輯與:", 邏輯與) print("邏輯或:", 邏輯或) print("邏輯非:", 邏輯非) ``` ### 比較運算符 |運算符|描述|例子|結果| |---|---|---|---| |==|相等|5 == 5| True| |!= |不相等| 5 != 3| True| |> |大於| 5 > 3| True| |< |小於| 5 < 3| False| |>= |大於或等於| 5 >= 5| True| |<= |小於或等於| 3 <= 5| True| ```python! # 比較運算示例 x = 5 y = 3 相等 = (x == y) # 5 == 3 不相等 = (x != y) # 5 != 3 大於 = (x > y) # 5 > 3 小於 = (x < y) # 5 < 3 大於等於 = (x >= 5) # 5 >= 5 小於等於 = (y <= 5) # 3 <= 5 print("相等:", 相等) print("不相等:", 不相等) print("大於:", 大於) print("小於:", 小於) print("大於等於:", 大於等於) print("小於等於:", 小於等於) ``` ### Python 中的 += 運算符 - += 是 Python 中的一種增量賦值運算符,它的主要作用是將變量的當前值與右側的值相加,然後將結果賦值給左側的變量。這是一個簡潔的方式來執行加法並更新變量的值。 ```python! x += y ``` - 這相當於: ```python! x = x + y ``` - 使用範例 ```python! # 初始化變量 x = 10 y = 5 # 使用 += 運算符 x += y # 等同於 x = x + y print("x 的新值:", x) # 輸出: x 的新值: 15 ``` - 特點 - += 運算符可以用於數字類型,也可以用於其他可加的數據類型,如字串和列表。 - 當用於字串時,+= 將兩個字串連接起來。 - 當用於列表時,+= 將右側列表的元素添加到左側列表中。 ```python! # 字串範例 name = "Alice" name += " Smith" # 等同於 name = name + " Smith" print("完整名稱:", name) # 輸出: 完整名稱: Alice Smith ``` - 列表範例 ```python! # 列表範例 numbers = [1, 2, 3] numbers += [4, 5] # 等同於 numbers = numbers + [4, 5] print("更新後的列表:", numbers) # 輸出: 更新後的列表: [1, 2, 3, 4, 5] ``` ## 第二部分:控制結構(75分鐘) ### 條件判斷結構 * if、else if、else結構 * 巢狀條件判斷 是指在一個條件判斷語句內部再包含其他條件判斷語句。這樣的結構使得程式能夠處理更複雜的邏輯判斷。 ```python! # 輸入年齡和身高 age = int(input("請輸入年齡: ")) height = float(input("請輸入身高(以公尺為單位): ")) # 根據年齡判斷 if age >= 18: # 如果年齡大於等於18,進行身高判斷 if height >= 1.7: print("您符合參加成人體育活動的條件。") else: print("您的身高不符合參加成人體育活動的條件。") else: print("您不符合參加成人體育活動的年齡條件。") ``` ### 範例程式:條件判斷 ```python! # 範例2:判斷年齡並給予不同回應 age = int(input("輸入您的年齡: ")) if age < 18: print("你是未成年人。") elif age >= 18 and age < 65: print("你是一個成年人了。") else: print("你是一位老年人。") ``` ### 迴圈結構 * for迴圈 * while迴圈 * 迴圈控制:break與continue ### 範例程式:迴圈的應用 ```python! # 範例3:計算1到10的總和 total = 0 for i in range(1, 11): total += i print("1 到 10 的數字總和為:", total) ``` ```python! # 範例4:使用while迴圈進行猜數字遊戲 secret_number = 7 guess = 0 while guess != secret_number: guess = int(input("猜數字(1-10): ")) if guess < secret_number: print("太低!") elif guess > secret_number: print("太高了!") else: print("恭喜!你猜對了!") ``` ### 課堂練習:控制結構 * 練習3:根據輸入的分數,判斷學生的成績等級(A、B、C、D、F)。 ```python! # 輸入學生分數 score = int(input("請輸入學生的分數(0-100之間): ")) # 判斷成績等級 if score >= 90: grade = "A" elif score >= 80: grade = "B" elif score >= 70: grade = "C" elif score >= 60: grade = "D" else: grade = "F" # 輸出成績等級 print("學生的成績等級是:", grade) ``` * 練習4:使用for或while迴圈,設計一個程序,輸出1到100之間所有的偶數。 * 使用 for 迴圈 ```python! # 使用for迴圈輸出1到100之間所有的偶數 print("1到100之間的偶數有:") for i in range(2, 101, 2): print(i) ``` * 使用 while 迴圈 ```python! # 使用while迴圈輸出1到100之間所有的偶數 print("1到100之間的偶數有:") num = 2 while num <= 100: print(num) num += 2 ``` --- # 第二週:進階函數設計 在這一週的課程中,我們將深入探討 Python 中的進階函數設計,包括以下主題: 1. 函數定義與參數傳遞 - 函數定義 - 使用 def 關鍵字來定義函數。 - 函數可以接受參數,並返回值。 - 範例 ```python! def greet(name): return f"Hello, {name}!" print(greet("Alice")) # 輸出: Hello, Alice! ``` - 參數傳遞 - 位置參數:根據位置傳遞的參數。 - 關鍵字參數:通過指定參數名稱來傳遞的參數。 - 默認參數:可以為參數設置默認值。 - 可變參數:使用 *args 和 **kwargs 來接收可變數量的參數。 - *args 用於接收 任意數量的 位置參數。 - 當函數被調用時,所有的位置參數都會被收集到一個元組中。 - **kwargs 用於接收 任意數量的 關鍵字參數。 - 當函數被調用時,所有的關鍵字參數會被收集到一個字典中。 - 範例 ```python! def add(a, b=0): return a + b print(add(5, 3)) # 輸出: 8 print(add(5)) # 輸出: 5 def print_info(*args, **kwargs): print("位置參數:", args) print("關鍵字參數:", kwargs) print_info(1, 2, 3, name="Alice", age=25) ``` ![image](https://hackmd.io/_uploads/rkTluYKaA.png) - 在上述 print_info 函數的呼叫中: - 位置參數 1, 2, 3 被收集到元組 args 中,輸出為 (1, 2, 3)。 - 關鍵字參數 name="Alice" 和 age=25 被收集到字典 kwargs 中,輸出為 {'name': 'Alice', 'age': 25}。 - 函數列表操作練習 以列表作為參數,輸出指定值。 ```python! def find_max(numbers): return max(numbers) print(find_max([1, 5, 3, 8, 2])) ``` - 函數數學運算練習 以列表作為參數,計算後輸出指定值。 ```python! def calculate_average(numbers): return sum(numbers) / len(numbers) print(calculate_average([1, 2, 3, 4, 5])) ``` 2. 遞迴(Recursion)的概念與應用 - 遞迴概念 - 遞迴是函數調用自身的過程。 通常用於解決可以分解為相同子問題的問題。 - 遞迴範例:計算階乘 ```python! def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) print(factorial(5)) # 輸出: 120 ``` :::spoiler 執行流程 呼叫 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,並列印輸出結果。 ::: - 遞迴應用 - 遞迴常用於數據結構(如樹和圖)的遍歷。 - 確保每次遞迴都有明確的終止條件,以避免無窮遞迴。 3. 函數重載與匿名函數 - 函數重載 Python 不支持傳統的函數重載,但可以通過可變參數來模擬。 - 範例 ```python! def multiply(a, b=1): return a * b print(multiply(2, 3)) # 輸出: 6 print(multiply(5)) # 輸出: 5 ``` :::spoiler 執行流程 定義函數: 程式碼首先定義了 multiply 函數,它接受兩個參數,並傳回它們的乘積。 第一次呼叫: 程式碼呼叫 multiply 函數,傳遞參數 2 和 3,函數傳回 6,並列印列印輸出結果。 第二次呼叫: 程式碼呼叫 multiply 函數,只傳遞參數 5,由於 b 是可選參數,使用預設值 1,函數傳回 5,並列印輸出結果。 ::: - 匿名函數(Lambda 函數) 使用 lambda 關鍵字定義的匿名函數,通常用於簡單的函數。 - 範例 ```python! # 定義一個匿名函數 add = lambda x, y: x + y print(add(3, 5)) # 輸出: 8 # 使用匿名函數進行排序 pairs = [(1, 2), (3, 1), (5, 0)] sorted_pairs = sorted(pairs, key=lambda pair: pair[1]) print(sorted_pairs) # 輸出: [(5, 0), (3, 1), (1, 2)] ``` :::spoiler 執行流程 初始狀態: 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_pa​​irs 清單包含三個元組,依照第二個元素從小到大排序:[(5, 0), (3, 1), (1, 2)]。 ::: - 總結 本週我們學習了如何定義函數、傳遞參數、遞迴的概念及其應用,以及函數重載和匿名函數的使用。 --- # 第三週:資料結構介紹 陣列(Array)與串列(List)的進階操作 鏈結串列(Linked List)的基本概念與實作 # 第四週:物件導向設計(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)的基本使用 # 第十七週:期末專案展示 小組專案展示與同儕互評 專案優化與報告準備 # 第十八週:期末考試與總結 期末考試 課程總結與未來學習建議