歡迎來到 Python 學習之旅!
🔊 先聽聽看語音摘要,大致了解這個課程的內容 👂或是點擊上方的導覽列按鈕,選擇一個主題開始您的學習。每個單元都包含詳細說明、程式碼範例和有趣的互動練習。
🎯 完成最後一個主題「綜合練習」後,別忘了填寫小問卷 📝~你的回饋可以讓這門課從「不錯喔」變成「超讚!」🔥 一起讓它變得更棒吧!🙌
變數 (Variables)
字串 (String)
字串是用來表示文字資料的型別,必須用單引號 ' ' 或雙引號 " " 包起來。你可以對字串進行串接、複製或擷取部分內容。
# 範例 1: 建立字串
name = "小明"
greeting = '你好'
print(name)
print(greeting)
# 範例 2: 字串串接
text1 = "Python "
text2 = "真有趣"
message = text1 + text2
print(message)
# 範例 3: f-string 格式化
age = 10
profile = f"我是{name},今年{age}歲。"
print(profile)
練習 1: 建立一個名為 `city` 的變數,並賦值為 "台北"。
city = "台北"
練習 2: 將 "Hello" 和 "World" 兩個字串串接起來,並用 `print` 輸出。
print("Hello" + "World")
練習 3: 建立變數 `fruit = "蘋果"`,並使用 f-string 輸出 "我喜歡吃蘋果"。
fruit = "蘋果"
print(f"我喜歡吃{fruit}")
整數 (Integer) 與 浮點數 (Float)
整數 (int) 是沒有小數點的數字,例如 10、-5。浮點數 (float) 是帶有小數點的數字,例如 3.14、-0.5。它們可以用來進行數學運算。
# 範例 1: 整數運算
a = 10
b = 5
print(a + b) # 加
print(a * b) # 乘
# 範例 2: 浮點數運算
pi = 3.14
radius = 5.0
area = pi * (radius ** 2)
print(area)
# 範例 3: 型別轉換
num_str = "123"
num_int = int(num_str)
result = num_int + 100
print(result)
練習 1: 建立一個整數變數 `x` 等於 100,另一個 `y` 等於 50,並將它們相減後印出。
x = 100
y = 50
print(x - y)
練習 2: 建立一個浮點數變數 `price` 為 79.9,`tax` 為 1.05,計算含稅價格並印出。
price = 79.9
tax = 1.05
print(price * tax)
練習 3: 將浮點數 `55.66` 轉換成整數並印出。
print(int(55.66))
布林值 (Boolean)
布林值只有兩種可能:True (真) 或 False (假)。它通常用在條件判斷中,來決定程式的執行流程。
# 範例 1: 基本布林值
is_sunny = True
is_raining = False
print(is_sunny)
# 範例 2: 比較運算
score = 85
pass_exam = score >= 60
print(pass_exam)
# 範例 3: 邏輯運算
has_ticket = True
has_time = False
can_watch_movie = has_ticket and has_time
print(can_watch_movie)
練習 1: 建立一個變數 `is_adult`,並將其值設為 `True`。
is_adult = True
練習 2: 判斷 `100` 是否大於 `99`,並將結果印出。
print(100 > 99)
練習 3: 判斷 `5 == 5` 或 `5 > 6` 是否成立,並印出結果。
print(5 == 5 or 5 > 6)
資料結構 (Data Structures)
列表 (List)
列表是 Python 中最常用的資料結構,用中括號 [ ] 表示。它可以存放任意型別的資料,並且是有順序、可變動的。你可以新增、刪除、修改、查詢列表中的元素。
# 範例 1: 建立與存取
fruits = ["蘋果", "香蕉", "橘子"]
print(fruits[0]) # 存取第一個
print(fruits[-1]) # 存取最後一個
# 範例 2: 新增與修改
fruits.append("葡萄") # 新增
fruits[1] = "鳳梨" # 修改
print(fruits)
# 範例 3: 刪除元素
del fruits[2] # 刪除第三個
popped_fruit = fruits.pop() # 移除並回傳最後一個
print(popped_fruit)
print(fruits)
練習 1: 建立一個包含數字 1, 2, 3 的列表,名為 `numbers`。
numbers = [1, 2, 3]
練習 2: 在 `numbers` 列表的尾端新增數字 4。
numbers.append(4)
練習 3: 將 `numbers` 列表的第一個元素(索引值為0)改為 10。
numbers[0] = 10
字典 (Dictionary)
字典使用大括號 { } 表示,它儲存的是「鍵-值」(key-value) 配對。每個「鍵」都是獨一無二的,並對應到一個「值」。字典是無順序、可變動的,適合用來儲存有關聯性的資料。
# 範例 1: 建立與存取
person = {"name": "小華", "age": 15}
print(person["name"]) # 用 key 存取 value
# 範例 2: 新增與修改
person["city"] = "高雄" # 新增 key-value
person["age"] = 16 # 修改 value
print(person)
# 範例 3: 刪除與取得所有鍵
del person["city"]
print(person.keys()) # 取得所有 keys
print(person.values()) # 取得所有 values
練習 1: 建立一個字典 `product`,包含鍵 "name" (值為 "筆電") 和 "price" (值為 30000)。
product = {"name": "筆電", "price": 30000}
練習 2: 在 `product` 字典中新增一個鍵 "brand",值為 "ACER"。
product["brand"] = "ACER"
練習 3: 印出 `product` 字典中 "price" 的值。
print(product["price"])
元組 (Tuple)
元組使用小括號 ( ) 表示,它和列表非常相似,都是有順序的。最大的差別在於:元組是「不可變動」(immutable) 的。一旦建立,就不能新增、修改或刪除其中的元素。適合用來儲存不希望被意外修改的資料。
# 範例 1: 建立與存取
coordinates = (121, 25) # 經緯度
print(coordinates[0])
# 範例 2: 不可變動性
# 下面這行會產生錯誤!
# coordinates[0] = 122
print("元組無法被修改")
# 範例 3: 單一元素的元組
# 注意逗號是必須的
single_tuple = (1,)
print(type(single_tuple))
練習 1: 建立一個元組 `rgb`,包含三個值 255, 0, 0。
rgb = (255, 0, 0)
練習 2: 印出 `rgb` 元組的第二個元素。
print(rgb[1])
練習 3: 建立一個只包含 "apple" 字串的元組 `my_fruit`。
my_fruit = ("apple",)
集合 (Set)
集合也使用大括號 { },但它只儲存「值」,不儲存「鍵」。集合最大的特性是:裡面的元素都是獨一無二的,不會重複,而且是無順序的。常用來移除重複資料或進行數學上的集合運算(如聯集、交集)。
# 範例 1: 建立集合 (重複會被移除)
numbers = {1, 2, 3, 2, 1}
print(numbers) # 結果會是 {1, 2, 3}
# 範例 2: 新增與移除
numbers.add(4)
numbers.remove(2)
print(numbers)
# 範例 3: 集合運算
set_a = {1, 2, 3}
set_b = {3, 4, 5}
print(set_a | set_b) # 聯集
print(set_a & set_b) # 交集
練習 1: 從列表 `[1, 5, 2, 5, 1]` 建立一個集合 `unique_nums`。
unique_nums = set([1, 5, 2, 5, 1])
練習 2: 在集合 `tags = {'python', 'web'}` 中新增 'django'。
tags.add('django')
練習 3: 找出 `s1 = {1,2,3}` 和 `s2 = {3,4,5}` 的交集。
print(s1 & s2)
流程控制 (Flow Control)
條件判斷 (if, elif, else)
條件判斷讓我們可以根據不同的條件執行不同的程式碼區塊。if 是判斷的起點,如果條件成立就執行;elif (else if) 是在前一個條件不成立時,接著判斷的下一個條件;else 是在所有條件都不成立時執行的區塊。
# 範例 1: if-else
age = 20
if age >= 18:
print("是成年人")
else:
print("是未成年人")
# 範例 2: if-elif-else
score = 85
if score >= 90:
print("優等")
elif score >= 60:
print("及格")
else:
print("不及格")
# 範例 3: 巢狀 if
is_vip = True
order_amount = 500
if order_amount > 300:
if is_vip:
print("VIP 顧客免運費")
else:
print("訂單滿 300,享運費半價")
練習 1: 變數 `temp = 30`。如果溫度大於 28 度,印出 "好熱"。
if temp > 28:
print("好熱")
練習 2: 變數 `money = 40`。如果 money 大於等於 50,印出 "可以買便當",否則印出 "錢不夠"。
if money >= 50:
print("可以買便當")
else:
print("錢不夠")
練習 3: `num = 0`。判斷 num 是正數、負數還是零。
if num > 0:
print("正數")
elif num < 0:
print("負數")
else:
print("零")
For 迴圈
For 迴圈用於「遍歷」一個序列(例如列表、元組、字串)中的每一個元素。它會依序取出序列中的項目,並執行指定的程式碼區塊,直到所有項目都處理完畢。
# 範例 1: 遍歷列表
fruits = ["蘋果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜歡 {fruit}")
# 範例 2: 使用 range()
# 印出 0, 1, 2, 3, 4
for i in range(5):
print(i)
# 範例 3: 遍歷字串
for char in "Hello":
print(char)
練習 1: 使用 for 迴圈印出列表 `[10, 20, 30]` 中的每一個數字。
nums = [10, 20, 30]
for n in nums:
print(n)
練習 2: 使用 for 迴圈和 `range()` 印出 3 次 "Python"。
for i in range(3):
print("Python")
練習 3: 計算並印出 1 到 5 的總和。
total = 0
for i in range(1, 6): # range(1, 6) 包含 1,2,3,4,5
total = total + i
print(total)
While 迴圈
While 迴圈會在「條件為真」(True) 的情況下,重複執行一個程式碼區塊。每次執行前,它都會檢查一次條件。如果條件變為「假」(False),迴圈就會停止。要小心避免寫出條件永遠為真的「無窮迴圈」。
# 範例 1: 基本 while 迴圈
count = 0
while count < 3:
print(f"計數: {count}")
count = count + 1
# 範例 2: break 中斷迴圈
n = 5
while True: # 無窮迴圈
print(n)
n = n - 1
if n == 0:
break # 當 n=0 時跳出
# 範例 3: continue 跳過此次
i = 0
while i < 5:
i += 1
if i == 3:
continue # 當 i=3 時跳過 print
print(i)
練習 1: 使用 while 迴圈印出從 1 到 3 的數字。
i = 1
while i <= 3:
print(i)
i = i + 1
練習 2: 變數 `score = 10`。當 score 小於 15 時,每次將 score 加 2 並印出。
score = 10
while score < 15:
score = score + 2
print(score)
練習 3: 從 5 開始倒數,當數字數到 1 時,印出 "發射!" 並結束迴圈。
n = 5
while n > 0:
print(n)
n = n - 1
print("發射!")
函式 (Functions)
定義函式 (def)
函式是一段可以重複使用的程式碼區塊。使用 def 關鍵字來定義一個函式,可以為它命名,並設定它需要接收的參數。定義好的函式可以被重複呼叫,提高程式碼的重用性和組織性。
# 範例 1: 無參數函式
def say_hello():
print("Hello, Python!")
say_hello() # 呼叫函式
# 範例 2: 有參數函式
def add(a, b):
print(a + b)
add(3, 5)
add(10, 20)
# 範例 3: 有回傳值的函式
def multiply(x, y):
return x * y
result = multiply(4, 6)
print(result)
練習 1: 定義一個名為 `show_my_name` 的函式,執行時會印出 "我的名字是小華"。
def show_my_name():
print("我的名字是小華")
練習 2: 定義一個函式 `greet(name)`,可以接收一個名字,並印出 "你好, [名字]"。
def greet(name):
print(f"你好, {name}")
練習 3: 定義一個函式 `get_area(width, height)`,它會計算並回傳矩形的面積。
def get_area(width, height):
return width * height
內建函式 (Built-in)
Python 提供了許多「內建」的函式,讓我們不需要自己定義就能直接使用。這些函式涵蓋了各種常用功能,例如型別轉換 (int(), str())、數學計算 (sum(), abs())、序列操作 (len(), max()) 等。
# 範例 1: len() 和 sum()
numbers = [1, 2, 3, 4, 5]
print(len(numbers)) # 取得長度
print(sum(numbers)) # 計算總和
# 範例 2: max() 和 min()
scores = [98, 67, 88, 100]
print(max(scores)) # 取得最大值
print(min(scores)) # 取得最小值
# 範例 3: sorted()
# 回傳一個新的已排序列表
sorted_scores = sorted(scores)
print(sorted_scores)
print(scores) # 原列表不變
練習 1: 使用 `len()` 函式,計算字串 "welcome" 的長度並印出。
print(len("welcome"))
練習 2: 使用 `sum()` 函式,計算列表 `[10, 20, 30, 40]` 的總和。
print(sum([10, 20, 30, 40]))
練習 3: 使用 `max()` 找出 `[1, 99, 35, 78]` 中的最大值。
print(max([1, 99, 35, 78]))
Lambda 函式
Lambda 函式是一種小型的、匿名的函式。它使用 lambda 關鍵字建立,語法是 lambda arguments: expression。它可以在任何需要函式物件的地方使用,特別適合用在需要一個簡單、一次性函式的場合,讓程式碼更簡潔。
# 範例 1: 基本 lambda
add = lambda a, b: a + b
print(add(5, 3))
# 範例 2: 搭配 sorted() 使用
points = [(1, 2), (3, 1), (5, 4)]
# 根據每個元組的第二個元素排序
sorted_points = sorted(points, key=lambda p: p[1])
print(sorted_points)
# 範例 3: 搭配 map() 使用
nums = [1, 2, 3, 4]
# 將列表中每個數都平方
squared_nums = list(map(lambda x: x * x, nums))
print(squared_nums)
練習 1: 寫一個 lambda 函式,接收一個數字 `x` 並回傳它的兩倍。
double = lambda x: x * 2
練習 2: 建立一個 lambda 函式 `power`,接收 `x` 和 `y`,回傳 `x` 的 `y` 次方。
power = lambda x, y: x ** y
練習 3: 使用 `filter()` 和 lambda,篩選出列表中大於 10 的數字。
nums = [5, 12, 18, 7]
result = list(filter(lambda x: x > 10, nums))
# print(result) # [12, 18]
例外處理 (Exception Handling)
Try and Except
在程式執行過程中,有時會發生預期之外的錯誤,稱為「例外」。使用 try...except 區塊可以「捕捉」這些例外,並執行對應的處理程式碼,而不是讓整個程式崩潰。這可以讓你的程式更加健壯。
# 範例 1: 捕捉特定錯誤
try:
num = int("abc")
except ValueError:
print("這不是一個有效的數字!")
# 範例 2: 捕捉除以零的錯誤
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
# 範例 3: finally 區塊
try:
f = open("myfile.txt", "r")
# ... 讀取檔案 ...
except FileNotFoundError:
print("檔案不存在")
finally:
print("程式執行完畢")
練習 1: 使用 `try...except` 捕捉 `10 / 0` 可能引發的 `ZeroDivisionError`。
try:
result = 10 / 0
except ZeroDivisionError:
print("錯誤發生")
練習 2: 列表 `my_list = [1, 2]`。嘗試存取 `my_list[5]` 並捕捉 `IndexError`。
try:
print(my_list[5])
except IndexError:
print("索引超出範圍")
練習 3: 捕捉 `int('xyz')` 可能引發的 `ValueError`,並印出 "轉換失敗"。
try:
num = int("xyz")
except ValueError:
print("轉換失敗")
綜合練習
這裡是綜合練習區,我們將融合前面章節所學的變數、資料結構、流程控制和函式,來完成一些有趣的小專案。試著自己先思考解法,再參考答案!
專案 1 (簡單): BMI 計算機
寫一個程式,讓使用者輸入他們的身高(公尺)和體重(公斤),然後計算並印出他們的 BMI 值,並根據 BMI 值判斷體位(例如:過輕、正常、過重)。
# 綜合運用: 變數(float), 流程控制(if/elif/else), 內建函式(print, input, float)
def calculate_bmi():
try:
height_str = input("請輸入您的身高(公尺,例如 1.75): ")
weight_str = input("請輸入您的體重(公斤,例如 70): ")
height = float(height_str)
weight = float(weight_str)
bmi = weight / (height ** 2)
print(f"您的 BMI 是: {bmi:.2f}") # .2f 表示格式化為小數點後兩位
if bmi < 18.5:
print("體位:過輕")
elif 18.5 <= bmi < 24:
print("體位:正常")
elif 24 <= bmi < 27:
print("體位:過重")
else:
print("體位:肥胖")
except ValueError:
print("輸入無效,請確保您輸入的是數字。")
except ZeroDivisionError:
print("身高不能為零!")
# 呼叫函式來執行 (在真實環境中)
# calculate_bmi()
print("BMI 計算機程式碼已準備好,可在 Python 環境中執行。")
# 備註: 這是眾多解法之一,您可以設計不同的體位標準。
專案 2 (簡單): 簡易待辦事項清單
建立一個程式,讓使用者可以新增待辦事項到一個清單中,並可以隨時查看目前所有的待辦事項。
# 綜合運用: 資料結構(list), 流程控制(while, for, if), 變數(string)
todo_list = []
def todo_app():
while True:
print("\\n--- 待辦事項 ---")
print("1. 新增事項")
print("2. 查看所有事項")
print("3. 離開")
choice = input("請選擇操作: ")
if choice == '1':
item = input("請輸入要新增的事項: ")
todo_list.append(item)
print(f"'{item}' 已新增!")
elif choice == '2':
print("\\n--- 目前所有事項 ---")
if not todo_list:
print("(沒有待辦事項)")
else:
for index, item in enumerate(todo_list, 1):
print(f"{index}. {item}")
elif choice == '3':
print("感謝使用,再見!")
break
else:
print("無效的選擇,請重新輸入。")
# todo_app()
print("待辦事項程式碼已準備好,可在 Python 環境中執行。")
# 備註: 這是眾多解法之一,您也可以增加刪除或標記完成的功能。
專案 3 (中等): 終極密碼遊戲
寫一個猜數字遊戲。程式先隨機產生一個 1 到 100 的數字,然後讓使用者重複輸入猜測,直到猜對為止。每次猜錯後要提示使用者猜的數字是太高還是太低,並加入例外處理以防止輸入非數字字元。
# 綜合運用: 函式(def), 流程控制(while), 例外處理(try-except), 內建函式
import random
def guess_the_number():
answer = random.randint(1, 100)
guess = None
print("--- 終極密碼遊戲 ---")
print("我已經想好一個 1 到 100 的數字了,你來猜猜看!")
while guess != answer:
try:
guess_str = input("請猜一個數字: ")
guess = int(guess_str)
if guess > answer:
print("太高了!再試一次。")
elif guess < answer:
print("太低了!再試一次。")
else:
print(f"恭喜你猜對了!答案就是 {answer}!")
except ValueError:
print("請輸入有效的數字!")
# 呼叫函式來開始遊戲
# guess_the_number()
print("猜數字遊戲程式碼已準備好,可在 Python 環境中執行。")
# 備註: 這是眾多解法之一,您可以增加猜測次數限制的功能。
專案 4 (中等): 單字計數器
寫一個函式,接收一個句子(字串),然後回傳一個字典,字典中紀錄了每個單字出現的次數。忽略大小寫的差異。
# 綜合運用: 函式(def), 資料結構(dict, list), 變數(string), 流程控制(for)
def word_counter(sentence):
word_counts = {}
# 將句子轉為小寫,並用空白分割成單字列表
words = sentence.lower().split()
for word in words:
# 使用 .get(key, default_value) 來處理第一次出現的單字
word_counts[word] = word_counts.get(word, 0) + 1
return word_counts
# 測試
my_sentence = "Hello world this is a test this is a simple test"
counts = word_counter(my_sentence)
print(f"句子: '{my_sentence}'")
print("單字計數結果:")
print(counts)
# 備註: 這是眾多解法之一,您也可以考慮如何處理標點符號。
專案 5 (困難): 簡易聯絡人管理系統
建立一個程式,可以新增、查詢、列出所有及刪除聯絡人資訊 (名字和電話)。使用字典來儲存聯絡人,並將不同功能包裝成函式,透過一個主選單迴圈來讓使用者可以重複操作。
# 綜合運用: 函式(def), 資料結構(dict), 流程控制(while, if/elif/else)
contacts = {} # 使用字典來儲存聯絡人資料
def add_contact():
name = input("請輸入聯絡人姓名: ")
if name in contacts:
print(f"'{name}' 已存在。")
return
phone = input("請輸入電話號碼: ")
contacts[name] = phone
print(f"已新增 {name}。")
def find_contact():
name = input("請輸入要查詢的姓名: ")
if name in contacts:
print(f"{name} 的電話是 {contacts[name]}")
else:
print(f"找不到聯絡人 {name}。")
def list_contacts():
print("\\n--- 所有聯絡人 ---")
if not contacts:
print("(沒有任何聯絡人)")
else:
for name, phone in contacts.items():
print(f"- {name}: {phone}")
def delete_contact():
name = input("請輸入要刪除的姓名: ")
if name in contacts:
del contacts[name]
print(f"'{name}' 已被刪除。")
else:
print(f"找不到聯絡人 {name}。")
def main_menu():
while True:
print("\\n--- 聯絡人系統 ---")
print("1. 新增聯絡人")
print("2. 查詢聯絡人")
print("3. 列出所有聯絡人")
print("4. 刪除聯絡人")
print("5. 離開系統")
choice = input("請選擇操作 (1-5): ")
if choice == '1':
add_contact()
elif choice == '2':
find_contact()
elif choice == '3':
list_contacts()
elif choice == '4':
delete_contact()
elif choice == '5':
print("感謝使用!")
break
else:
print("無效的選擇,請重新輸入。")
# main_menu()
print("聯絡人系統程式碼已準備好,可在 Python 環境中執行。")
# 備註: 這是眾多解法之一,您可以思考如何將資料儲存到檔案中,讓資料可以永久保存。
測驗進度: