2025年11月10日 星期一

[水井USR創新教材]Python一下用水井村故事學會 locals() 和 globals()

以下資訊是由ChatGPT協助生成: 

在程式世界裡,

  • globals() 就像整個「水井村的地圖」🌏,記錄所有村子裡的名字(變數、函式、物件……)

  • locals() 就像「屋子裡的物品清單」🏠,只記錄某個房間(函式內部)的變數。

🏡範例 一、水井村全景地圖:globals()

水井村有許多居民與地標:烏龜、白馬、姻緣花。
這些都是「全域變數」,大家都能看到。

程式:
1
2
3
4
5
6
7
8
# 水井村的全景地圖
village = "水井村"
turtle = "烏龜"
horse = "白馬"
flower = "姻緣花"

print("=== 水井村的全景地圖(globals) ===")
print(globals().keys())  # 查看整個村子的地圖上有誰

執行結果:
=== 水井村的全景地圖(globals) ===
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', 'village', 'turtle', 'horse', 'flower'])

💡說明:
globals() 會回傳一個字典(dict),裡面有所有全域變數的名字與內容。
在這裡,它就像是整座村莊的登記簿。

🕳️ 範例二、進入烏龜的房間:locals()

現在,我們走進烏龜的房間。
裡面有牠自己的小物品(在地變數),這些東西村外的人看不到。

程式:

1
2
3
4
5
6
7
def turtle_room():
    food = "萵苣葉"
    toy = "石頭球"
    print("=== 烏龜房間裡的物品(locals) ===")
    print(locals())  # 查看房間裡的變數有哪些

turtle_room()

執行結果:
=== 烏龜房間裡的物品(locals) ===
{'food': '萵苣葉', 'toy': '石頭球'}

💡說明:
locals() 只會顯示在函式內部定義的變數。
離開房間後,這些變數就不再存在。

🧭 範例三、結合使用:房間內外的界線
程式:
1
2
3
4
5
6
7
8
treasure = "金井水"

def white_horse():
    tool = "竹掃帚"
    print("房間內能看到 globals 嗎?", "treasure" in globals())
    print("房間內能看到 locals 嗎?", "tool" in locals())

white_horse()

執行結果:
房間內能看到 globals 嗎? True
房間內能看到 locals 嗎? True

🧠 意思是:
函式裡面可以看到全村的變數(globals())。
但全村看不到你房間裡的私人物品(locals())。

💬 結論整理
名稱 範圍 比喻 說明
globals() 全域範圍 🌏 水井村地圖 存放所有村莊共用的資源
locals() 區域範圍 🏠 烏龜房間 存放函式內部的私有變數
可視範圍 函式內可看全域,全域看不到區域 🚪 單向門 保護變數,避免混亂

🎯 延伸任務(課堂練習)

請同學完成:
定義一個 love_story() 函式,裡面有 boy = "白馬"、girl = "姻緣花"。
  1. 在函式中列印出 locals()。
  2. 在外部列印出 globals()。
  3. 思考:函式外部能看到 boy 和 girl 嗎?

[水井USR創新教材]Python一下用水井三寶認識 Python 的 os 模組



以下教材是用ChatGPT生成。

在程式的世界裡,os 模組就像是我們在電腦裡旅行時的「導遊」,幫我們找到路、開資料夾、搬東西、檢查有沒有東西存在。

我們來看看三位主角——烏龜、白馬、姻緣花——是怎麼幫助我們理解 os 模組的!

範例一:🐢 烏龜:穩重的導覽員(os.getcwd / os.chdir)

烏龜總是走得慢但很穩,它最擅長「知道自己在哪裡」。

程式碼:

1
2
3
4
5
6
7
8
import os

# 烏龜看看自己現在在哪個資料夾
print("烏龜現在在:", os.getcwd())

# 烏龜想要換到另一個資料夾
os.chdir("C:/Users")  # 換路徑
print("烏龜移動後的位置:", os.getcwd())
執行結果:
烏龜現在在: C:\Users\cheng-min\AppData\Local\Programs\Python\Python313
烏龜移動後的位置: C:\Users

🗣 烏龜的智慧:

「知道當前路徑,才能慢慢走向下一個目標。」

範例二:🐎 白馬:行動派的搬運工(os.listdir / os.mkdir / os.remove)

白馬速度快、效率高,最擅長整理與搬運檔案。
程式碼:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import os

# 白馬看看這裡有哪些東西
print("白馬看到的東西:", os.listdir())

# 白馬替主人開一個新資料夾
os.mkdir("姻緣花資料夾")

# 白馬幫忙確認檔案有沒有存在後再刪掉
if os.path.exists("舊檔案.txt"):
    os.remove("舊檔案.txt")

執行結果:
白馬看到的東西: ['AquaticTransData.docx', 'AquaticTransData.xlsx', 'DLLs', 'Doc', 'grades.xlsx', 'grades_final.xlsx', 'guess.py', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'ollama1.py', 'ollama2.py', 'ollama3.py', 'ollama4.py', 'open.py', 'open2.py', 'python.exe', 'python3.dll', 'python313.dll', 'pythonw.exe', 'Scripts', 'suijing_sanbao', 'tcl', 'template.docx', 'template.py', 'test.py', 'test2.py', 'ttsx.py', 'vcruntime140.dll', 'vcruntime140_1.dll', '__pycache__']

🗣 白馬的智慧:

「行動力就是力量!想整理資料,就用我的蹄子吧~」

範例三:🌸 姻緣花:串起緣分的橋樑(os.path.join / os.path.exists)

姻緣花最會「牽線」——她能把不同的路徑串起來,讓一切有緣相會。

程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import os

# 姻緣花幫兩段路徑牽在一起
path = os.path.join("C:/Users", "Documents", "水井村")
print("姻緣花牽起的路徑:", path)

# 看看這條緣分路上是否真的存在
if os.path.exists(path):
    print("這條路是真的有緣~")
else:
    print("緣分還沒到,資料夾不存在。")

執行結果:
姻緣花牽起的路徑: C:/Users\Documents\水井村
緣分還沒到,資料夾不存在。

🗣 姻緣花的智慧:

「連結,是一切的開始。」

💡小結論

角色功能對應 os 模組函式
🐢 烏龜了解與改變當前位置os.getcwd()os.chdir()
🐎 白馬整理、建立與刪除資料os.listdir()os.mkdir()os.remove()
🌸 姻緣花串接路徑與檢查存在os.path.join()os.path.exists()

🎯延伸任務(適合課堂練習)

請同學們寫一個「水井三寶自動巡邏程式」:
  1. 讓烏龜顯示目前位置。
  2. 讓白馬建立一個新資料夾 三寶任務。
  3. 讓姻緣花檢查資料夾是否存在並印出結果。