iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0

第八天:函式與程式碼重用

內容概述:

在程式設計中,「函式」是程式碼的基石之一,透過函式可以讓你的程式更簡潔、模組化和可重用。今天我們將學習如何使用函式,這樣你可以把重複的程式碼封裝成獨立的區塊,並在需要時輕鬆地呼叫它們。


一、什麼是函式?

  1. 函式的定義

    • 函式是一組可以被重複呼叫的程式碼塊,它可以接收輸入,進行計算,並返回結果。
    • 定義函式的語法:
      def 函式名稱(參數1, 參數2, ...):
          # 函式內部的程式碼
          return 返回值
      
  2. 為什麼要使用函式?

    • 使用函式可以避免重複編寫相同的程式碼,並且可以讓程式更具可讀性和可維護性。這有助於處理更大規模的專案或邏輯較為複雜的問題。

二、如何定義並呼叫函式

  1. 基本範例

    • 下面是一個簡單的函式,它接收兩個參數並返回它們的和:
      def add_numbers(a, b):
          return a + b
      
  2. 呼叫函式

    • 定義函式後,你可以通過名稱呼叫它並傳遞參數:
      result = add_numbers(3, 5)
      print(result)  # 輸出: 8
      
  3. 函式中的參數

    • 參數是函式接收的輸入數據。在函式定義中,你可以根據需要設定任意數量的參數。
    • 例如,下面的函式接收一個參數並輸出該數的平方:
      def square(number):
          return number * number
      

三、return 與函式的輸出

  1. return 的作用

    • return 用來將函式計算的結果返回給呼叫者。
    • return 被執行時,函式會立即終止,並將結果傳遞回去。
  2. 範例:計算長方形的面積

    • 我們可以撰寫一個函式來計算長方形的面積,並使用 return 返回結果:
      def rectangle_area(width, height):
          return width * height
      
  3. 範例:無返回值的函式

    • 如果你不需要函式返回值,也可以省略 return。例如,這個函式只負責列印一個訊息:
      def say_hello():
          print("Hello, Python!")
      

四、預設參數與可選參數

  1. 預設參數

    • 在定義函式時,你可以給參數設定一個預設值,這樣呼叫函式時可以選擇性地省略該參數:
      def greet(name="學生"):
          print(f"你好, {name}!")
      
  2. 使用範例

    • 呼叫時如果省略了 name 參數,預設會使用「學生」:
      greet()          # 輸出: 你好, 學生!
      greet("阿動")  # 輸出: 你好, 阿動!
      

五、函式的應用場景

  1. 將重複程式碼封裝成函式

    • 假設你有一個計算圓面積的程式,這裡使用了數學公式:
      pi = 3.14159
      radius = 5
      area = pi * radius ** 2
      print(area)
      
    • 若這樣的程式要重複使用多次,可以將其封裝成函式:
      def circle_area(radius):
          pi = 3.14159
          return pi * radius ** 2
      
  2. 解決實際問題:計算 BMI

    • 讓我們來看一個實際的應用範例:計算身體質量指數(BMI)。這個函式接收體重和身高作為參數,並返回 BMI 值:
      def calculate_bmi(weight, height):
          return weight / (height ** 2)
      
  3. 呼叫範例

    • 呼叫這個函式來計算某人的 BMI:
      bmi = calculate_bmi(70, 1.75)
      print(f"BMI: {bmi}")
      

六、函式中的本地變數與全域變數

  1. 本地變數

    • 函式中的變數默認為本地變數,僅在該函式內部有效。當你在函式中定義變數後,該變數只在函式內部使用。
    • 範例:
      def test_function():
          x = 10
          print(x)
      test_function()  # 輸出: 10
      print(x)  # 這會產生錯誤,因為 x 是本地變數
      
  2. 全域變數

    • 如果需要在函式外部訪問或修改變數,你可以將變數定義為全域變數(不推薦過多使用)。
    • 使用範例:
      x = 10
      def test_function():
          global x
          x = 20
      test_function()
      print(x)  # 輸出: 20
      

七、實作練習

練習 1:定義一個簡單的加法函式
  • 撰寫一個函式,接收兩個參數,並返回它們的和。
練習 2:計算圓的面積
  • 使用函式來計算圓的面積,並讓使用者輸入半徑。
練習 3:設計一個 BMI 計算器
  • 定義一個函式來計算 BMI,並讓使用者輸入體重和身高。使用該函式計算 BMI 並根據結果給出健康建議。

八、每日作業

  • 作業:撰寫一個函式來計算費氏數列(Fibonacci sequence)的第 n 項。費氏數列的定義是:
    • 第 0 項為 0
    • 第 1 項為 1
    • 之後的每一項都是前兩項的和。

提示:費氏數列是一個經典的遞迴(recursive)問題,可以利用函式的遞迴特性來解決。


九、解答

這些練習是很好的基礎編程練習,涵蓋了函式定義、使用者輸入與輸出以及遞迴的概念。下面是針對每個練習的詳細解答,幫助你掌握如何一步步完成這些任務。

練習 1:定義一個簡單的加法函式

撰寫一個函式,接收兩個參數,並返回它們的和。

def add_two_numbers(a, b):
    return a + b

# 測試函式
num1 = float(input("請輸入第一個數字: "))
num2 = float(input("請輸入第二個數字: "))
print(f"兩個數字的和是: {add_two_numbers(num1, num2)}")

練習 2:計算圓的面積

使用函式來計算圓的面積,並讓使用者輸入半徑。公式:圓的面積 = π * 半徑^2

import math

def calculate_circle_area(radius):
    return math.pi * radius ** 2

# 測試函式
radius = float(input("請輸入圓的半徑: "))
print(f"圓的面積是: {calculate_circle_area(radius):.2f}")

練習 3:設計一個 BMI 計算器

定義一個函式來計算 BMI,並讓使用者輸入體重和身高。公式:BMI = 體重 (kg) / 身高 (m)^2

def calculate_bmi(weight, height):
    bmi = weight / (height ** 2)
    return bmi

def bmi_advice(bmi):
    if bmi < 18.5:
        return "體重過輕"
    elif 18.5 <= bmi < 24.9:
        return "正常範圍"
    elif 24.9 <= bmi < 29.9:
        return "過重"
    else:
        return "肥胖"

# 測試函式
weight = float(input("請輸入體重 (kg): "))
height = float(input("請輸入身高 (m): "))
bmi = calculate_bmi(weight, height)
print(f"你的 BMI 是: {bmi:.2f}, 健康狀況: {bmi_advice(bmi)}")

作業:撰寫一個函式來計算費氏數列(Fibonacci sequence)的第 n 項

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

# 測試函式
n = int(input("請輸入要計算的費氏數列的項數 (n): "))
print(f"費氏數列的第 {n} 項是: {fibonacci(n)}")

解釋:

  1. 練習 1:定義了一個簡單的加法函式,讓你能夠傳入兩個數字,並返回它們的和。這展示了如何傳遞參數和返回值。
  2. 練習 2:使用 math 模組中的 pi,並定義了一個函式來計算圓的面積。你可以練習使用者輸入的讀取與結果格式化輸出。
  3. 練習 3:BMI 計算器展示了如何將多個步驟封裝進函式中,並根據計算結果給出健康建議。
  4. 作業:費氏數列的遞迴函式是一個經典的遞迴問題,通過函式不斷調用自身來解決問題。

透過這堂課,你將學會如何定義並呼叫函式,進一步提升程式碼的可讀性與重用性。掌握函式的使用後,你將能夠解決更多複雜的問題,並提升程式的邏輯結構。

明日課程預告:將學習「資料結構基礎—集合(Set)與其應用」。


上一篇
從 0 開始學!跟著 ChatGPT 學會 Python 條件判斷&邏輯運算
下一篇
從 0 開始學!跟著 ChatGPT 學會 Python 資料結構基礎—集合(Set)
系列文
如果讓chatgpt參加iThome鐵人賽,他竟然寫出...!?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言