Python 程式設計

第一章:程式語言介紹


大綱

  1. 電腦硬體

  2. 程式語言


電腦硬體

電腦硬體指的是構成計算機的各種物理設備,例如鍵盤、螢幕、處理器等。具體來說,硬體可以依功能分為五大單元,每個單元負責特定的工作:

  • 算術邏輯單元和控制單元(統稱為中央處理單元,即 CPU)負責資料處理和控制。

  • 主記憶體是資料暫存與程式執行的核心。

  • 輸入與輸出單元負責資料的輸入和結果的輸出。

  • 周邊設備則通過 CPU 的控制正常運作。


電腦軟體

電腦軟體分為資料與程式兩大類,所有軟體均以 0 和 1 的二進制儲存於硬體設備中。程式則可進一步細分為以下兩類:

  1. 系統程式:

    • 如作業系統 (Operating System)、編譯程式 (Compiler)、組譯程式 (Assembler) 和連結程式 (Linker)。這些程式接近硬體底層,提供基礎功能支援。

  2. 應用程式:

    • 架構於系統程式之上,針對特定需求開發,例如 Office 套件、帳務系統和電腦遊戲。


程式語言簡介

程式語言的角色:

  • 程式語言是電腦使用者與計算機溝通的工具,相當於人與人溝通所使用的自然語言(如中文或英文)。

  • 電腦僅能理解 0 和 1 的二進制指令,因此需要將人類指令轉換為電腦可理解的語言。

分類: 程式語言按其與自然語言的相似程度,可分為以下三種:

  1. 機器語言:直接用二進制表示,難以閱讀和編寫。

  2. 低階語言:與硬體較貼近,但稍易於理解。

  3. 高階語言:更接近自然語言,易於學習和使用。

高階語言的運作: 高階語言需透過編譯器(compiler)或直譯器(interpreter)轉換為機器語言,供電腦執行。


程式語言的運作方式

  1. 編譯式語言:

    • 將程式翻譯成機器語言後再執行。

    • 例如 C、C++、Pascal。

  2. 直譯式語言:

    • 程式指令逐條翻譯並執行,適合即時測試和修改。

    • 例如 BASIC、HTML。


程式語言的應用

  1. 一般用途語言:

    • 適用於多領域,如 Python、Java、C++。

  2. 特殊用途語言:

    • 針對特定領域設計,例如:

      • 商業:COBOL

      • 工程:FORTRAN

      • 人工智慧:LISP

      • 資料庫:SQL


語言與平台的關係

跨平台挑戰與解決方案:

  • 不同平台的作業系統(如 Windows、Linux、MacOS)對程式語言的解釋存在差異。

  • 解決方法包括跨平台程式庫(如 OpenGL)、虛擬機器(如 Java 的 JVM)和兼容層(如 WINE)。


各類程式語言的特色

根據用途劃分:

  • 科學計算:強調計算效能(如 FORTRAN)。

  • 商業應用:注重資料處理和報表製作(如 COBOL)。

  • 人工智慧:處理邏輯推理與符號運算(如 Prolog)。

根據特性劃分:

  • 系統語言:如 C 語言,與作業系統緊密結合。

  • 高階語言:如 Python,易於學習,適合多種應用。


結語

程式語言的多樣性反映了不同領域和用途的需求,選擇適合的語言有助於有效解決問題並提升開發效率。

第二章 Python 簡介與開發環境

什麼是 Python

Python 是一種用途廣泛且功能強大的程式設計語言。它被廣泛應用於網頁開發、軟體開發、資料科學和機器學習等領域。由於其語法簡潔、容易學習,以及能夠在多平台運行的特性,Python 深受開發者青睞。最重要的是,Python 是開源的,可免費下載和使用,並提供高效的開發工具。

為何選擇 Python

Python 擁有多項獨特的優勢:

  1. 語法簡單:Python 的語法接近自然語言,降低了學習門檻,並使程式更易於閱讀與維護。

  2. 高效開發:與其他語言相比,Python 使用較少的程式碼即可實現相同功能,大幅提升開發效率。

  3. 強大的標準程式庫:Python 標準程式庫提供豐富的模組與功能,幾乎涵蓋所有常見的程式設計需求。

  4. 良好的互操作性:Python 可與 Java、C、C++ 等其他語言無縫整合。

  5. 強大的社群支援:Python 社群活躍,開發者可以迅速獲得技術支援和教學資源。

  6. 跨平台兼容性:Python 支援多種作業系統,如 Windows、macOS 和 Linux。

Python 的特點

  1. 物件導向:支援物件導向程式設計,提高程式的模組化與重用性。

  2. 直譯執行:程式碼逐行執行,便於即時測試與除錯。

  3. 動態型別:不需要明確宣告變數型別,語言在執行時自行推斷。

  4. 記憶體管理:自動處理記憶體分配與回收,降低程式錯誤風險。

  5. 跨平台:程式碼可在不同平台上無需修改直接執行。

  6. 易於擴展:透過大量第三方模組實現多樣化應用。

Python 的應用領域

Python 在許多領域都有著廣泛應用,包括但不限於:

  • 資料科學與大數據分析:Python 的 Pandas、NumPy、Matplotlib 等工具是資料分析的利器。

  • 人工智慧與機器學習:如 TensorFlow、Keras 提供先進的深度學習支援。

  • 網頁開發:框架如 Django、Flask 能快速構建高效能網頁應用。

  • 自動化腳本:Python 是高效能腳本語言,用於自動化日常任務。

Python 的發展歷程

Python 由荷蘭程式設計師 Guido van Rossum 創建,首次發布於 1991 年。語言的名稱源於他喜愛的電視節目《蒙提·派森的飛行馬戲團》。自發布以來,Python 不斷演進,具有以下幾個重要版本:

  • Python 1.0(1994):提供基本資料型別及錯誤處理。

  • Python 2.0(2000):引入 Unicode 支援和清單推導式。

  • Python 3.0(2008):全面改進語法,提升程式可讀性和效能。

常用 Python 程式庫與框架

  1. Matplotlib:生成高品質的 2D/3D 圖表,適合科學計算。

  2. Pandas:提供強大的資料操作與分析工具。

  3. NumPy:支援多維陣列與矩陣運算。

  4. Requests:簡化 HTTP 請求操作。

  5. OpenCV-Python:用於影像處理與電腦視覺應用。

  6. Keras:支援深度學習模型構建與訓練。

建立 Python 開發環境

  1. 安裝 Python:建議使用 Python 3,透過 Anaconda 或官方安裝包安裝。

  2. 驗證安裝:使用命令提示字元 (CMD) 輸入 python 檢查是否正確安裝。

  3. 安裝 Visual Studio Code (VS Code):配合 Code Runner 插件,提升開發效率。

  4. 編輯與運行程式:撰寫 Python 檔案後,可直接執行檔案或利用 VS Code 的 Terminal 測試程式。

練習:撰寫第一個 Python 程式

  1. 問候使用者:顯示 "請問貴姓大名?",並輸出使用者輸入的內容。

  2. 輸入年齡與體重:要求輸入年齡與體重並顯示於螢幕。

  3. 使用 input()print():結合格式化輸出來顯示資訊。

撰寫程式碼風格指引

  • 使用清晰的註解:方便未來維護與團隊協作。

  • 遵守縮排規範:每級縮排使用 4 個空白。

  • 善用空白與命名規範:提升程式可讀性。

透過不斷練習與應用,您將逐步掌握 Python 的核心特性與實際操作技能,為進階學習奠定扎實基礎。

 

 

3.

資料概念與 Python 資料型別

資料的基本概念回顧

在電腦中,所有資料均以二進制形式儲存,包括整數、小數、文字等。以下為資料表示的常見方式:

  • 整數表示:以二進制表示,例如 100 的二進制為 0000 0000 0110 0100

  • 浮點數表示:遵循 IEEE 754 標準,例如 15.3 以 32 位元表示。

  • 文字表示:使用 ASCII 或 UTF-8 編碼,例如 "Visual C# 程式" 可用 UTF-8 萬國碼表示。

Python 資料型別與特性

  1. 數值型別int(整數)、float(浮點數)、complex(複數)。

  2. 序列型別list(列表)、tuple(元組)、range(範圍)。

  3. 映射型別dict(字典)。

  4. 集合型別setfrozenset(不可變集合)。

  5. 布林型別bool(布林值)。

  6. 二進制型別bytesbytearraymemoryview

使用 type() 函數可檢視物件的資料型別。

Python 與 C 語法比較

  • 區塊表示:C 語言使用 {},Python 使用縮排。

  • 敘述結尾:C 語言以 ; 結尾,Python 無需使用。

  • 變數宣告:C 語言需先宣告變數型別,Python 則可動態建立變數。

Python 常見資料型別

  • 整數(int)與浮點數(float)

    • 無限制數值範圍,例如 googol = 10**100

    • 布林值為 TrueFalse

  • 字串(str)

    • Python 字串不可變,需使用方法修改。

    • 支援單引號(')、雙引號(")、多行引號(""")包裹。

變數與命名規範

  1. 命名規則

    • 變數名稱必須唯一。

    • 第一個字元為字母或底線 _

    • 不可使用空格或保留字。

  2. 命名建議:使用有意義的名稱,例如 score 表示分數。

  3. 動態變數:Python 中,變數為物件的標籤,例如 x = 22 的物件指向變數 x

運算子分類與使用

  • 算術運算子:加(+)、減(-)、乘(*)、除(/)、次方(**)。

  • 比較運算子:大於(>)、小於(<)、等於(==)。

  • 邏輯運算子andornot

  • 位元運算子&|^~

  • 運算優先順序:依括號、指數、乘除加減的順序運算。

字串操作

  • 基本操作

    • 串接:'abc' + 'def'

    • 重複:'abc' * 2

    • 取值:s[0] 取第一個字元,s[-1] 取最後一個字元。

    • 切片:s[1:4] 取索引 1 至 3 的子字串。

  • 字串方法

    • 大寫:s.upper()

    • 小寫:s.lower()

    • 去空格:s.strip()

    • 判斷開頭或結尾:s.startswith('a')s.endswith('z')

範例程式設計

計算三數總和與平均

# 三數總和與平均
x, y, z = 10, 20, 30
sum_val = x + y + z
avg_val = sum_val / 3
print(f"總和: {sum_val}, 平均: {avg_val}")

攝氏轉華氏

# 攝氏轉華氏
celsius = float(input("請輸入攝氏溫度: "))
fahrenheit = celsius * 9 / 5 + 32
print(f"華氏溫度為: {fahrenheit}")

判斷迴文

# 判斷迴文
s = input("請輸入字串: ")
print(f"迴文判斷結果: {s == s[::-1]}")

透過以上基礎與範例,Python 的資料型別與操作方法應該能清晰掌握,助力進一步學習。

 

4.

 

dictionary = {'apple': '蘋果', 'banana': '香蕉', 'cherry': '櫻桃'}
print("可查詢的英文單字:", list(dictionary.keys()))
word = input("請輸入英文單字:")
print("翻譯結果:", dictionary.get(word, "該單字不在字典中"))

唐詩字集合

poem = "春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。"
chars = set(poem)
chars.discard(",")
chars.discard("。")
print(chars)

數學與英文及格範例

students = {"John", "Mary", "Tina", "Fiona", "Claire", "Eva", "Ben", "Bill", "Bert"}
math_pass = {"Mary", "Fiona", "Claire", "Eva", "Ben"}
english_pass = {"John", "Mary", "Fiona", "Claire", "Ben", "Bill"}

both_pass = math_pass & english_pass
math_fail = students - math_pass
english_pass_math_fail = english_pass - math_pass

print("數學與英文都及格:", both_pass)
print("數學不及格:", math_fail)
print("英文及格且數學不及格:", english_pass_math_fail)

此改寫內容力求清晰易懂,並配以實用的程式範例,適合初學者學習與實踐。

 

5.

Python 程式結構簡介

程式的主要結構包括:

  • 循序結構:程式從第一行開始逐行執行,直到結束。

  • 選擇結構:根據條件的結果,選擇執行某部分程式。

  • 重複結構:讓程式多次執行某段程式碼。


1. 循序結構

特性

  • 從第一行開始逐行執行,直至結束。

範例

print("歡迎使用程式!")
print("這是一個循序結構的範例。")

2. 選擇結構

選擇結構的類型:

  1. 單向選擇結構

  2. 雙向選擇結構

  3. 多向選擇結構

  4. 巢狀選擇結構

2.1 單向選擇結構

描述

  • 條件為真時執行特定動作。

範例

score = int(input("請輸入成績:"))
if score >= 60:
    print("很好,請繼續保持下去!")

2.2 雙向選擇結構

描述

  • 條件為真時執行一組動作,否則執行另一組動作。

範例

score = int(input("請輸入成績:"))
if score >= 60:
    print("及格")
else:
    print("不及格")

2.3 多向選擇結構

描述

  • 根據多個條件執行不同動作。

範例

score = int(input("請輸入成績:"))
if score >= 80:
    print("非常好")
elif score >= 60:
    print("不錯喔")
else:
    print("要加油")

2.4 巢狀選擇結構

描述

  • 選擇結構中包含其他選擇結構。

範例

score = int(input("請輸入成績:"))
if score >= 60:
    if score >= 80:
        print("非常好")
    else:
        print("及格但有進步空間")
else:
    print("不及格,請努力")

3. 重複結構

描述

  • 重複執行某段程式碼。

範例 計算 1+2+3+...+100 的總和:

total = 0
for i in range(1, 101):
    total += i
print("總和為:", total)

流程圖圖示

  • 開始/結束:橢圓形

  • 處理:矩形

  • 判斷/選擇:菱形


選擇結構應用範例

範例 1:判斷奇數或偶數

num = int(input("請輸入一個整數:"))
if num % 2 == 0:
    print(f"{num} 是偶數")
else:
    print(f"{num} 是奇數")

範例 2:判斷三角形

a = int(input("請輸入三角形邊長 a:"))
b = int(input("請輸入三角形邊長 b:"))
c = int(input("請輸入三角形邊長 c:"))
if a + b > c and a + c > b and b + c > a:
    print("可以構成三角形")
else:
    print("無法構成三角形")

範例 3:BMI 計算

weight = float(input("請輸入體重 (公斤):"))
height = float(input("請輸入身高 (公尺):"))
BMI = weight / (height ** 2)
print(f"您的 BMI 值為:{BMI:.2f}")
if BMI < 18:
    print("體重過輕")
elif BMI < 24:
    print("體重正常")
elif BMI < 27:
    print("體重過重")
else:
    print("體重肥胖")

Python 撰寫注意事項

  1. 縮排必須統一,建議使用 4 個空白鍵,不要混用 Tab 與空白鍵。

  2. 條件判斷後應加冒號 :

  3. 提高可讀性時,應儘量使用邏輯運算。


結論

透過熟練運用循序結構、選擇結構和重複結構,可以有效解決各種問題,並提高程式的可讀性與執行效率。

 

 

6.

 程式結構與運用

程式結構介紹

  1. 選擇結構

    • 單向選擇結構

    • 雙向選擇結構

    • 多向選擇結構

    • 巢狀選擇結構

  2. 迴圈結構

    • 設計迴圈變數的初始條件、終止條件與增減值來控制執行次數。

    • 應用於解決加總、排序、找最大值等問題。

Python 迴圈與生成式

  1. for 與 while 迴圈

    • for 適用於已知次數的重複動作。

    • while 適用於次數不固定的迴圈,如猜數字遊戲。

  2. 巢狀迴圈

    • 內層迴圈包含於外層迴圈中,例如印出九九乘法表。

  3. 跳出與跳過

    • break: 提早結束迴圈。

    • continue: 跳過本次迴圈,進入下一次迴圈。

    • else: 當迴圈正常結束時執行。

動手寫程式

  1. 印出 ASCII 字元表

    s = int(input("請輸入 ASCII 的啟始值:"))
    e = int(input("請輸入 ASCII 的終止值:"))
    for i in range(s, e):
        print(f"{i}: {chr(i)}")
  2. 計算加總

    s = int(input("請輸入加總開始值:"))
    e = int(input("請輸入加總終止值:"))
    inc = int(input("請輸入遞增值:"))
    total = 0
    for i in range(s, e, inc):
        total += i
        print(f"目前數字:{i}, 累加和:{total}")
    print(f"總和為:{total}")
  3. 猜數字遊戲

    import random
    target = random.randint(1, 99)
    guess = 0
    while guess != target:
        guess = int(input("請輸入 1 到 99 的數字:"))
        if guess < target:
            print("猜大一點")
        elif guess > target:
            print("猜小一點")
        else:
            print("猜中了!")
  4. 計算階乘

    M = int(input("請輸入 M:"))
    fac, i = 1, 1
    while fac < M:
        i += 1
        fac *= i
    print(f"N 的最小值為:{i}")
  5. 判斷質數

    num = int(input("請輸入一個整數:"))
    prime = True
    for j in range(2, int(num ** 0.5) + 1):
        if num % j == 0:
            prime = False
            break
    if prime:
        print(f"{num} 是質數")
    else:
        print(f"{num} 不是質數")
  6. 九九乘法表

    for i in range(1, 10):
        for j in range(1, 10):
            print(f"{i}*{j}={i*j}", end="\t")
        print()
  7. 星號圖形

    for i in range(1, 6):
        print("*" * i)
  8. 模擬登入系統

    while True:
        acc = input("請輸入帳號:")
        pwd = input("請輸入密碼:")
        if acc == "abc" and pwd == "123":
            print("帳號與密碼正確")
            break
        else:
            print("登入失敗")

高效編程技巧

  1. 生成式的使用

    • 串列生成式:[x for x in range(1, 6)]

    • 字典生成式:{letter: word.count(letter) for letter in set(word)}

    • 集合生成式:{x for x in word}

  2. 費氏數列

    n = int(input("輸入求第幾項費氏數列:"))
    a, b = 1, 1
    print(a, b, end=" ")
    for _ in range(2, n):
        a, b = b, a + b
        print(b, end=" ")
  3. 完全數檢測

    for num in range(2, 10001):
        factors = [i for i in range(1, num) if num % i == 0]
        if sum(factors) == num:
            print(f"{num} 是完全數")

透過以上範例,程式設計不僅能簡化計算與操作,更能增強我們的邏輯與問題解決能力,歡迎大家多加練習與應用!

 

7.

程序中常要使用函式來進行結構化設計,使程序比較簡樸、易讀、易於除錯,並提供豐富的程序庫支援。

函式概念

  1. 函式作用

    • 將相同功能的程序獨立出來,經由函式呼叫,傳入資料並回傳處理結果。

    • 程序設計師可以使用已寫好的函式,對相同操作不斷利用,如需修改功能,只需更改該函式即可。

  2. 函式作用範圍

    • 其他程序設計師只需知道函式功能、輸入與輸出功能,並不需理解函式實作經過。

  3. 函式便於同居程序師協作

    • 在開發前定計好函式名稱與功能,各自完成函式之後進行整合,達成系統需求功能。

函式寫法

  1. 定義函式

    • def 開頭,作為函式命名的開始。

    • 對應傳入的參數及傳出的資料進行設定,已寫好的函式範圍由所有空格所分。

    • 若需回傳值,使用 return,沒有回傳值的函式可以省略。

  2. 呼叫函式

    • 在程序中參考到函式名稱,通過設定好的參數調用。

    • 該調用可傳入資料,取得處理結果。

範例

基本函式例子

def hi():
    print("Hi")

hi()

def min(a, b):
    return a if a < b else b

print(min(2, 4))

計算長方形面積

def area(x, y):
    return x * y

a = int(input("請輸入長度?"))
b = int(input("請輸入寬度?"))
ans = area(a, b)
print(f"長方形面積為 {ans}")

區域與全域變數

  1. 區域變數與全域變數作用範圍

    • 函式內變數為區域變數,其作用範圍限於函式內。

    • 使用 global 可將區域變數指向全域變數。

範例

g = 5

def f2():
    g = 10
    print(g)

f2()
print(g)

BMI 計算

範例

def BMI(w, h):
    return w / (h * h)

w = float(input("請輸入體重(KG)?"))
h = float(input("請輸入身高(M)?"))
bmi = BMI(w, h)
print(f"BMI:{bmi:.2f}")
if bmi < 18:
    print("體重過輕")
elif bmi < 24:
    print("體重正常")
elif bmi < 27:
    print("體重過重")
else:
    print("體重肥胖")

計算質數

範例

def prime(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

for i in range(1, 101):
    if prime(i):
        print(f"{i} 是質數")

遞迴

範例:階乘

def fac(n):
    if n == 1:
        return 1
    return n * fac(n - 1)

n = int(input("n = "))
print(f"{n}! = {fac(n)}")

範例:最大公因數

def gcd(m, n):
    if m == 0:
        return n
    return gcd(n % m, m)

m = int(input("m = "))
n = int(input("n = "))
print(f"最大公因數:{gcd(m, n)}")

製作定義函式統數列

範例:費布那西數列

def fib(n):
    if n == 1 or n == 2:
        return 1
    return fib(n - 1) + fib(n - 2)

n = int(input("請輸入統數列項數?"))
print(f"統數列第 {n} 項:{fib(n)}")

加速準確設計:裝飾器

範例

Python 模組與腳本程式完整介紹與範例

模組的基本概念

  • Python 模組:是以 .py 結尾的檔案,內含 Python 的物件定義與程式碼。

  • 模組功能:將相關程式碼組織成單一檔案,促進程式的結構化和重用性。

  • 模組匯入:模組可以被其他 Python 程式匯入並使用,提供標準模組庫或自訂模組供呼叫。

模組的結構與使用

  1. 模組與函式

    • 模組是更高層次的程式組織單元,可以包含函式、類別和變數。

    • 使用 import 指令匯入模組。

  2. 模組的類型

    • 標準模組庫:Python 內建模組,如 mathrandom,涵蓋數學運算、字串處理、系統操作等常見功能。

    • 自訂模組:由使用者建立的模組,包含自定義的函式與變數。

  3. 模組匯入方法

    • 匯入整個模組:import 模組名稱

    • 匯入模組中特定函式:from 模組名稱 import 函式名稱

    • 為模組設置別名:import 模組名稱 as 別名

範例:建立與使用模組

  1. 建立簡單模組 support.py

# support.py
status = ["剪刀", "石頭", "布"]

def figure_guess():
    import random
    return random.choice(status)
  1. 匯入與使用模組

  • 匯入整個模組

import support
print(support.figure_guess())
  • 匯入特定函式

from support import figure_guess
print(figure_guess())
  • 使用別名

import support as sp
print(sp.figure_guess())

實作:剪刀石頭布遊戲

  1. 模組 guess.py

# guess.py
status = ["剪刀", "石頭", "布"]

def figure_guess():
    import random
    return random.choice(status)
  1. 主程式 game.py

# game.py
from guess import figure_guess

def run():
    computer = figure_guess()
    my = input("請輸入「剪刀」、「石頭」或「布」:")
    print(f"電腦出:{computer}")
    if my == "剪刀":
        if computer == "剪刀":
            print("平手")
        elif computer == "石頭":
            print("電腦獲勝")
        else:
            print("玩家獲勝")
    elif my == "石頭":
        if computer == "剪刀":
            print("玩家獲勝")
        elif computer == "石頭":
            print("平手")
        else:
            print("電腦獲勝")
    elif my == "布":
        if computer == "剪刀":
            print("電腦獲勝")
        elif computer == "石頭":
            print("玩家獲勝")
        else:
            print("平手")

if __name__ == "__main__":
    for _ in range(10):
        run()

實作:樂透號碼選擇器

  1. 說明

  • 玩家輸入 5 個 0~99 的樂透號碼。

  • 電腦隨機選取不重複號碼。

  • 根據猜中號碼數量給予獎金。

  1. 程式碼實作

# lotto.py
import random

def lotto_game():
    print("請輸入 5 個 0~99 間的樂透號碼(以空格隔開):")
    user_numbers = list(map(int, input().split()))
    if len(user_numbers) != 5 or not all(0 <= n <= 99 for n in user_numbers):
        print("輸入不符合規定!請重新執行程式!")
        return

    computer_numbers = random.sample(range(100), 5)
    print(f"電腦選出的號碼:{computer_numbers}")

    matched_numbers = set(user_numbers) & set(computer_numbers)
    matched_count = len(matched_numbers)

    prize = {
        1: 2000,
        2: 5000,
        3: 10000,
        4: 100000,
        5: 1000000
    }.get(matched_count, 0)

    print(f"您猜中的號碼為:{matched_numbers}")
    print(f"您共猜中 {matched_count} 個號碼,獲得獎金:{prize} 元!")

if __name__ == "__main__":
    lotto_game()

 

class Animal:
    def __init__(self, name):
        self.name = name

    def sound(self):
        pass

# 實例化物件
animal = Animal("動物")
print(animal.name)  # 動物

2. 繼承

  • 使用基底類別 (Base Class) 擴展功能。

  • 使用 super() 呼叫基底類別的方法。

範例程式碼:

class Dog(Animal):
    def __init__(self, name):
        super().__init__(f"小狗{name}")

    def sound(self):
        return "汪汪叫"

# 實例化子類別物件
dog = Dog("小白")
print(dog.name)  # 小狗小白
print(dog.sound())  # 汪汪叫

3. 覆寫 (Method Overriding)

  • 子類別中可以重新定義基底類別的方法。

範例程式碼:

class Bird(Animal):
    def __init__(self, name):
        super().__init__(f"小鳥{name}")

    def sound(self):
        return "啾啾叫"

bird = Bird("小黃")
print(bird.name)  # 小鳥小黃
print(bird.sound())  # 啾啾叫

Python中的特殊方法 (Special Methods)

特殊方法是一組以雙下劃線開頭和結尾的方法,例如 __init____str____eq__ 等,用於實現類別的特定功能。

常見特殊方法

  1. __init__ (建構子)

    • 初始化物件屬性。

  2. __str__ (字串表示)

    • 自訂物件的字串輸出格式。

範例程式碼:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def __str__(self):
        return f"書名: {self.title}, 作者: {self.author}, 頁數: {self.pages}"

book = Book("Moby Dick", "Herman Melville", 378)
print(book)  # 書名: Moby Dick, 作者: Herman Melville, 頁數: 378
  1. __eq__ (相等性判斷)

    • 定義物件相等的條件。

範例程式碼:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages

    def __eq__(self, other):
        return self.title == other.title and self.author == other.author

book1 = Book("Moby Dick", "Herman Melville", 378)
book2 = Book("Moby Dick", "Herman Melville", 410)
print(book1 == book2)  # True
  1. __len__ (物件長度)

    • 定義使用 len() 時的回傳值。

範例程式碼:

class Book:
    def __init__(self, title, pages):
        self.title = title
        self.pages = pages

    def __len__(self):
        return self.pages

book = Book("Moby Dick", 378)
print(len(book))  # 378

Python中的例外處理與自訂例外

1. 基礎例外處理

  • 使用 tryexcept 區塊來捕捉例外。

範例程式碼:

try:
    num = int(input("請輸入整數: "))
except ValueError as e:
    print("輸入的不是整數!", e)
else:
    print("輸入的整數是:", num)
finally:
    print("結束程式")

2. 自訂例外類別

  • 繼承 Exception 類別並定義自訂例外。

範例程式碼:

class PwdException(Exception):
    def __init__(self, pwd, length):
        super().__init__("密碼長度不足")
        self.pwd = pwd
        self.length = length

try:
    pwd = input("請輸入密碼,長度至少8個字元: ")
    if len(pwd) < 8:
        raise PwdException(pwd, len(pwd))
except PwdException as e:
    print(f"錯誤: {e} (長度: {e.length})")
else:
    print("密碼輸入正確!")

物件導向設計原則總結

  1. 利用類別組織程式結構,增加程式的可讀性與重用性。

  2. 使用封裝來保護資料,避免不當存取。

  3. 透過繼承實現功能擴展與重用。

  4. 透過多型提供靈活性,簡化程式碼。

物件導向程式設計提供了強大的工具,幫助我們應對現代軟體開發中的複雜性,讓程式更具彈性與可維護性。

創作者介紹
創作者 AI革命家 REVOLUTIONARY 的頭像
AI革命家

AI革命家 REVOLUTIONARY

AI革命家 發表在 痞客邦 留言(0) 人氣( 0 )