# 第一週:課程介紹與回顧
## 課程目標及學習方法介紹
回顧基礎程式設計概念(變數、資料型態、控制結構等)
* 教學目標
* 回顧與強化變數、資料型態及控制結構的基本概念
* 透過範例程式與練習,加深學生對這些基礎概念的理解
## 第一部分:變數與資料型態(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_pairs 清單包含三個元組,依照第二個元素從小到大排序:[(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)的基本使用
# 第十七週:期末專案展示
小組專案展示與同儕互評
專案優化與報告準備
# 第十八週:期末考試與總結
期末考試
課程總結與未來學習建議