用 Python 認識雲林好食材:選擇結構實作
如果程式能聽懂我們輸入的食材,再依照產地、價格或餐盤分類給出建議,就像一位「雲林食農小幫手」。這篇從雲林農漁產情境出發,練習 Python 的單向、雙向、多向與巢狀選擇結構,也認識條件判斷和 in。
一、課程挑戰:打造雲林食農小幫手
雲林有豐富的農漁產與飲食文化。課堂可以選用花生、地瓜、蒜頭、玉米、稻米、文蛤或虱目魚等食材,設計互動程式:輸入食材名稱,程式檢查是否在清單中,並根據條件顯示料理或採買提示。
二、先準備食材資料:變數與資料型別
變數可以保存文字、數字或真假判斷。先觀察食材名稱、價格及是否為在地食材各自屬於什麼資料型別。
food = "花生"
price = 80
is_local = True
season = "秋季"
print(type(food))
print(type(price))
print(type(is_local))
print(type(season))
| 變數 | 範例內容 | 資料型別 | 用途 |
|---|---|---|---|
food | 「花生」 | str | 保存食材名稱 |
price | 80 | int | 保存整數價格 |
is_local | True | bool | 保存是/否的判斷 |
season | 「秋季」 | str | 保存季節文字 |
三、選擇適合的資料容器
不同容器適合保存不同型態的食農資料。先建立資料,再用選擇結構判斷。
| 容器 | 適合的資料 | 範例 |
|---|---|---|
tuple 元組 | 一組固定資料,例如食材、產地、示例價格 | ("花生", "西螺", 80) |
list 串列 | 有順序、可能新增或修改的食材清單 | ["花生", "地瓜", "蒜頭"] |
dict 字典 | 用欄位名稱查詢食材資料 | {"花生": 80} |
set 集合 | 不重複的分類或食材名稱 | {"蔬菜", "全穀雜糧"} |
1. 用 tuple 保存一筆食材資料
food_info = ("花生", "西螺", 80)
print(food_info[0]) # 花生
print(food_info[1]) # 西螺
print(food_info[2]) # 80
2. 用 list 建立採買清單
local_foods = ["花生", "地瓜", "蒜頭", "玉米"]
local_foods.append("稻米")
print(local_foods)
3. 用 dict 查詢價格
food_prices = {
"花生": 80,
"地瓜": 45,
"蒜頭": 120
}
print(food_prices["花生"])
4. 用 set 保存不重複的餐盤類別
food_groups = {"蔬菜", "全穀雜糧", "豆魚蛋肉", "水果"}
print(food_groups)
四、條件判斷與運算子
條件判斷會得到 True 或 False。比較運算子用來比較資料,邏輯運算子可以組合多個條件。
| 運算子 | 意思 | 例子 |
|---|---|---|
==、!= | 相等、不相等 | food == "花生" |
>、<、>=、<= | 大於、小於、大於等於、小於等於 | price <= 100 |
and | 兩個條件都成立 | is_local and price <= 100 |
or | 至少一個條件成立 | food == "地瓜" or food == "玉米" |
not | 反轉真假結果 | not is_local |
五、實作一:單向選擇結構
單向選擇是在條件成立時執行指定程式;條件不成立時就略過。
food = "花生"
is_local = True
if is_local:
print(food, "是本地食材,支持在地農業!")
print("食農小幫手查詢完成。")
is_local 改成 False,觀察哪一行訊息會出現、哪一行不會出現。六、實作二:雙向選擇結構
雙向選擇使用 if…else,讓條件成立與不成立時分別執行不同內容。
food = "地瓜"
is_local = True
if is_local:
print(food, "可以標示為本地食材。")
else:
print(food, "請再確認產地資訊。")
is_local 的值,測試程式如何回應。再把食材換成自己熟悉的雲林農漁產品。七、實作三:多向選擇結構
當程式需要處理多種情況,可以使用 if…elif…else。程式由上而下檢查,執行第一個符合的條件。
food = input("請輸入食材名稱:")
if food == "地瓜":
print("料理方向:烤地瓜或地瓜粥")
elif food == "花生":
print("料理方向:花生湯或花生粉")
elif food == "蒜頭":
print("料理方向:蒜頭雞湯或蒜香料理")
elif food == "玉米":
print("料理方向:玉米湯或蒸玉米")
else:
print("目前沒有這項食材的料理建議,歡迎補充資料。")
程式執行時輸入食材名稱。字串需完全相同,例如「花生」和「花生米」會被視為不同內容。
依價格提供採買提示
price = 80
if price < 50:
print("示例價格較低,可納入日常採買評估。")
elif price <= 100:
print("示例價格中等,可依預算與需求選購。")
else:
print("示例價格較高,建議比較資料或調整採買量。")
八、實作四:巢狀選擇結構
巢狀選擇是在一個條件區塊裡再放入另一個條件。以下先判斷是否為在地食材,再判斷價格。
food = "花生"
is_local = True
price = 80
if is_local:
print(food, "是本地食材。")
if price <= 100:
print("示例價格在預算範圍內。")
else:
print("示例價格超過預算,建議比較或調整數量。")
else:
print("請先確認食材產地。")
if 比外層多縮排一層,因此只有外層條件成立時,才會進一步檢查價格。九、條件判斷與運算子 in
in 可以檢查某筆資料是否存在於字串或容器中,結果為 True 或 False。
檢查食材是否在採買清單
shopping_list = ["花生", "地瓜", "蒜頭"]
food = input("輸入想查詢的食材:")
if food in shopping_list:
print(food, "已列入採買清單。")
else:
print(food, "尚未列入採買清單。")
用 in 查詢字典的鍵
food_info = {
"花生": "可加工成花生油、花生糖等食品",
"地瓜": "可蒸煮、烘烤或製作地瓜粥",
"蒜頭": "常用於家常料理調味"
}
food = input("請輸入食材名稱:")
if food in food_info:
print(food_info[food])
else:
print("資料庫中還沒有這項食材。")
對字典使用 food in food_info,預設檢查的是「鍵」是否存在。若要檢查某個值,則可使用 food in food_info.values()。
十、綜合實作:雲林食農小幫手
把容器、in 與選擇結構整合起來。程式先確認食材是否在資料庫,再顯示示例價格,並依價格區間及食材種類提供提示。
local_foods = ["花生", "地瓜", "蒜頭", "玉米"]
food_prices = {
"花生": 80,
"地瓜": 45,
"蒜頭": 120,
"玉米": 35
}
food = input("請輸入想查詢的食材:")
if food in local_foods:
price = food_prices[food]
print(food, "在本次課堂食材清單中。")
print("練習用示例價格:", price, "元")
if price <= 50:
print("採買提示:可依家庭需求與預算評估。")
elif price <= 100:
print("採買提示:可搭配預算與餐點需求選購。")
else:
print("採買提示:可比較不同資料來源或調整份量。")
if food == "地瓜" or food == "玉米":
print("料理提示:可嘗試蒸煮或搭配主食。")
elif food == "花生":
print("料理提示:可作為配料;食用前留意過敏情況。")
else:
print("料理提示:可查找適合的家常料理。")
else:
print("這項食材不在本次課堂清單中,請查證後再補入資料。")
十一、學生練習任務
- 單向選擇:建立
season變數;若值為「秋季」,顯示秋季食材主題活動訊息。 - 雙向選擇:使用
is_local判斷食材是否為本地食材,輸出兩種不同提示。 - 多向選擇:選擇至少三種雲林農漁產品,依名稱提供不同料理介紹。
- 巢狀選擇:先判斷食材是否在清單內;若在,再判斷價格是否高於自訂預算。
- 容器與 in:建立至少五項食材的串列,讓使用者輸入名稱,判斷是否在清單中。
- 挑戰題:建立字典儲存食材名稱、產地與料理建議,再用
in檢查資料是否存在。
十二、課堂概念檢核
- 單向選擇結構使用哪個關鍵字?
- 如何讓條件成立與不成立時執行不同程式?
if…elif…else的條件檢查順序是什麼?- 巢狀選擇中的縮排代表什麼?
"花生" in ["花生", "地瓜"]的結果是什麼?- 使用
"花生" in food_info時,字典檢查的是鍵還是值? - 哪種容器適合保存可調整的採買清單?哪種容器適合用欄位名稱查詢資料?
十三、課程重點回顧
| 結構或概念 | 用途 |
|---|---|
單向選擇 if | 條件成立才執行 |
雙向選擇 if…else | 成立與不成立分別處理 |
多向選擇 if…elif…else | 依多種情況選擇處理方式 |
| 巢狀選擇 | 在一個條件區塊中再判斷條件 |
in | 檢查資料是否存在於字串或容器 |
tuple / list / dict / set | 依資料需求選擇適合的容器 |
標籤:Python、選擇結構、食農教育、雲林、資料型別、串列、元組、字典、集合、條件判斷、in
沒有留言:
張貼留言