iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
自我挑戰組

順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作系列 第 7

第七天: Function (函式):打造可重用的程式碼區塊

  • 分享至 

  • xImage
  •  

嗨,各位程式碼冒險家!前一天我們深入探討了 While Loop (迴圈),它讓程式碼能夠依據條件重複執行,為遊戲邏輯增添了更多彈性。今天,我們要學習一個讓程式碼變得更整潔、更有效率的工具:Function (函式)。想像函式是一個「工具箱」,它可以把我們的程式碼拆分成幾個容易管理的「群組」,等到需要用到的時候再把它們「叫出來」執行特定任務。這種模組化的方式,對於我們《奇幻卡牌競技場》這樣日益複雜的遊戲專案來說,是不可或缺的基石。

Python 零基礎新手入門 #07 Function (函式):

https://www.youtube.com/watch?v=74Qt9Qdl3Hs&list=TLGGCpsW2odTHKAxMDA5MjAyNQ

什麼是函式?定義與呼叫

在 Python 中,建立函式非常簡單。我們使用 def (define 的縮寫) 關鍵字來定義函式,後面接著函式的名稱,例如「打招呼」,然後是一組圓括號和冒號。如果使用英文命名,函式名稱規則與變數相似,通常是小寫英文字母和底線的組合。

def 打招呼():
    print("哈囉,大家好!")

函式定義好後,如果直接執行程式碼,你會發現 Python 不會回傳任何結果。這是因為函式就像電玩遊戲中的召喚獸,你必須「召喚」它,它才會出現。要在 Python 中呼叫函式,我們只要輸入它的名稱,後面再加上相同的圓括號即可。

打招呼() # 呼叫函式
# 輸出:哈囉,大家好!

函式的引數 (Arguments):傳遞資訊

函式名稱後面的圓括號,主要用途是讓我們可以傳遞資訊給函式,這些資訊被稱為 Arguments (引數)。函式在處理這些引數後,可以回傳一些有用的資訊,就像廚師將食材放進鍋子裡,然後鍋子把食材變成一道好吃的料理。我們可以自由決定函式要接收什麼樣的「材料」。例如,我們可以開放「姓名」這個引數:

def 打招呼(姓名): # 函式接收一個引數:姓名
    print("哈囉," + 姓名 + "!")

打招呼("小明") # 呼叫函式時傳遞資訊
# 輸出:哈囉,小明!

函式可以擁有不只一個引數,只要用「逗號」將不同的引數隔開即可。呼叫函式時,我們也必須依據引數的數量提供相對應的資料,如果資料少輸入一筆,或是多了一筆,Python 都會回傳錯誤訊息。引數的前後順序也不能顛倒。此外,我們也可以改用關鍵字的方式來輸入引數,這樣即使順序不同,Python 還是能產生正確結果。這種方式也適用於需要計算的函式。

Return 語句:回傳計算結果

當函式進行計算時,如果我們需要函式回傳計算的結果給我們,就必須在公式前方加上一個 return (回傳) 語法。否則計算結果只會留在函式內部,外部無法取得。

def 計算商品總金額(商品金額, 折扣, 運費):
    return (商品金額 * 折扣) + 運費 # 使用 return 回傳計算結果
    # return 後的程式碼會被忽略 
    # print("這行不會被執行")

總金額 = 計算商品總金額(1000, 0.9, 50)
print(總金額) # 輸出:950.0

需要注意的是,return 這個關鍵字通常會放在函式的最後一行,因為函式在執行 return 後就會立即終止,後面的程式碼都會被 Python 忽略。函式引數也可以設定「預設值」,例如運費通常是 50 元,這樣呼叫時即使不填寫運費,函式也會自動計算。

全域 (Global) 和區域 (Local) 變數

在 Python 中,變數的作用範圍分為「全域」和「區域」。全域變數一旦建立,位於任何位置的程式碼都可以使用它。但如果一個變數是建立在函式之內,它就會被視為區域變數,只能在該函式內使用。函式外的語法在引用區域變數時會產生錯誤。不過,在區域變數名稱前加上 global 關鍵字,可以讓區域變數「升級」,產生「全域」的影響力。

綜合應用:簡易計算機

讓我們將今天所學的函式應用到一個簡易計算機中。這個計算機可以讓使用者對兩個數字進行加減乘除的運算。

def add(num1, num2):
    return num1 + num2

def subtract(num1, num2):
    return num1 - num2

def multiply(num1, num2):
    return num1 * num2

def divide(num1, num2):
    # 除法可以回傳商數和餘數 
    if num2 == 0:
        return "錯誤: 除數不能為零"
    商數 = num1 // num2 # 整數除法 
    餘數 = num1 % num2   # 餘數 
    return (商數, 餘數) # 回傳 tuple 

# 結合 While Loop 實現連續計算 
while True:
    print("\n請選擇運算類型:")
    print("1. 加法")
    print("2. 減法")
    print("3. 乘法")
    print("4. 除法")
    print("5. 結束")

    choice = input("輸入您的選擇 (1-5):")
    if choice == '5':
        print("計算機已關閉。")
        break # 結束迴圈 

    if choice in ['1', '2', '3', '4']:
        try:
            num1 = float(input("輸入第一個數字:"))
            num2 = float(input("輸入第二個數字:"))

            if choice == '1':
                result = add(num1, num2)
                print(f"結果: {result}")
            elif choice == '2':
                result = subtract(num1, num2)
                print(f"結果: {result}")
            elif choice == '3':
                result = multiply(num1, num2)
                print(f"結果: {result}")
            elif choice == '4':
                result = divide(num1, num2)
                if isinstance(result, tuple): # 檢查是否回傳 tuple
                    商數, 餘數 = result
                    if 餘數 == 0: # 可整除 
                        print(f"結果: 商數 {商數}")
                    else: # 不可整除 
                        print(f"結果: 商數 {商數}, 餘數 {餘數}")
                else:
                    print(f"結果: {result}") # 處理除零錯誤訊息
        except ValueError:
            print("無效輸入,請輸入數字。")
    else:
        print("無效選擇,請重新輸入。")

這個計算機範例展示了函式如何讓我們將不同運算邏輯模組化,每個函式負責一項單一的任務,大大提高了程式碼的可讀性和可重用性。同時,它也巧妙地結合了 While Loop 實現連續計算,以及 If 條件判斷來處理不同的運算類型和特殊情況(如除零、整除/非整除)。

恭喜您!今天我們深入學習了 Python 的函式,理解了如何定義、呼叫函式,並透過引數傳遞資訊,使用 return 回傳結果。我們也區分了全域與區域變數的概念,並學會了如何應用 global 關鍵字。最後,透過一個實用的計算機專案,我們見證了函式在組織程式碼、實現複雜邏輯方面的強大能力。掌握函式是邁向更進階程式設計的關鍵一步,因為它讓我們的程式碼更具結構性。明天,我們將介紹另一種重要的資料結構:字典 (Dictionaries),敬請期待!


上一篇
第六天: While Loop (迴圈):依據條件無限循環
下一篇
第八天: Dictionaries (字典):用鍵值對儲存系統化資訊
系列文
順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言