Python 程式設計
第一章:程式語言介紹
大綱
-
電腦硬體
-
程式語言
電腦硬體
電腦硬體指的是構成計算機的各種物理設備,例如鍵盤、螢幕、處理器等。具體來說,硬體可以依功能分為五大單元,每個單元負責特定的工作:
-
算術邏輯單元和控制單元(統稱為中央處理單元,即 CPU)負責資料處理和控制。
-
主記憶體是資料暫存與程式執行的核心。
-
輸入與輸出單元負責資料的輸入和結果的輸出。
-
周邊設備則通過 CPU 的控制正常運作。
電腦軟體
電腦軟體分為資料與程式兩大類,所有軟體均以 0 和 1 的二進制儲存於硬體設備中。程式則可進一步細分為以下兩類:
-
系統程式:
-
如作業系統 (Operating System)、編譯程式 (Compiler)、組譯程式 (Assembler) 和連結程式 (Linker)。這些程式接近硬體底層,提供基礎功能支援。
-
-
應用程式:
-
架構於系統程式之上,針對特定需求開發,例如 Office 套件、帳務系統和電腦遊戲。
-
程式語言簡介
程式語言的角色:
-
程式語言是電腦使用者與計算機溝通的工具,相當於人與人溝通所使用的自然語言(如中文或英文)。
-
電腦僅能理解 0 和 1 的二進制指令,因此需要將人類指令轉換為電腦可理解的語言。
分類: 程式語言按其與自然語言的相似程度,可分為以下三種:
-
機器語言:直接用二進制表示,難以閱讀和編寫。
-
低階語言:與硬體較貼近,但稍易於理解。
-
高階語言:更接近自然語言,易於學習和使用。
高階語言的運作: 高階語言需透過編譯器(compiler)或直譯器(interpreter)轉換為機器語言,供電腦執行。
程式語言的運作方式
-
編譯式語言:
-
將程式翻譯成機器語言後再執行。
-
例如 C、C++、Pascal。
-
-
直譯式語言:
-
程式指令逐條翻譯並執行,適合即時測試和修改。
-
例如 BASIC、HTML。
-
程式語言的應用
-
一般用途語言:
-
適用於多領域,如 Python、Java、C++。
-
-
特殊用途語言:
-
針對特定領域設計,例如:
-
商業:COBOL
-
工程:FORTRAN
-
人工智慧:LISP
-
資料庫:SQL
-
-
語言與平台的關係
跨平台挑戰與解決方案:
-
不同平台的作業系統(如 Windows、Linux、MacOS)對程式語言的解釋存在差異。
-
解決方法包括跨平台程式庫(如 OpenGL)、虛擬機器(如 Java 的 JVM)和兼容層(如 WINE)。
各類程式語言的特色
根據用途劃分:
-
科學計算:強調計算效能(如 FORTRAN)。
-
商業應用:注重資料處理和報表製作(如 COBOL)。
-
人工智慧:處理邏輯推理與符號運算(如 Prolog)。
根據特性劃分:
-
系統語言:如 C 語言,與作業系統緊密結合。
-
高階語言:如 Python,易於學習,適合多種應用。
結語
程式語言的多樣性反映了不同領域和用途的需求,選擇適合的語言有助於有效解決問題並提升開發效率。
第二章 Python 簡介與開發環境
什麼是 Python
Python 是一種用途廣泛且功能強大的程式設計語言。它被廣泛應用於網頁開發、軟體開發、資料科學和機器學習等領域。由於其語法簡潔、容易學習,以及能夠在多平台運行的特性,Python 深受開發者青睞。最重要的是,Python 是開源的,可免費下載和使用,並提供高效的開發工具。
為何選擇 Python
Python 擁有多項獨特的優勢:
-
語法簡單:Python 的語法接近自然語言,降低了學習門檻,並使程式更易於閱讀與維護。
-
高效開發:與其他語言相比,Python 使用較少的程式碼即可實現相同功能,大幅提升開發效率。
-
強大的標準程式庫:Python 標準程式庫提供豐富的模組與功能,幾乎涵蓋所有常見的程式設計需求。
-
良好的互操作性:Python 可與 Java、C、C++ 等其他語言無縫整合。
-
強大的社群支援:Python 社群活躍,開發者可以迅速獲得技術支援和教學資源。
-
跨平台兼容性:Python 支援多種作業系統,如 Windows、macOS 和 Linux。
Python 的特點
-
物件導向:支援物件導向程式設計,提高程式的模組化與重用性。
-
直譯執行:程式碼逐行執行,便於即時測試與除錯。
-
動態型別:不需要明確宣告變數型別,語言在執行時自行推斷。
-
記憶體管理:自動處理記憶體分配與回收,降低程式錯誤風險。
-
跨平台:程式碼可在不同平台上無需修改直接執行。
-
易於擴展:透過大量第三方模組實現多樣化應用。
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 程式庫與框架
-
Matplotlib:生成高品質的 2D/3D 圖表,適合科學計算。
-
Pandas:提供強大的資料操作與分析工具。
-
NumPy:支援多維陣列與矩陣運算。
-
Requests:簡化 HTTP 請求操作。
-
OpenCV-Python:用於影像處理與電腦視覺應用。
-
Keras:支援深度學習模型構建與訓練。
建立 Python 開發環境
-
安裝 Python:建議使用 Python 3,透過 Anaconda 或官方安裝包安裝。
-
驗證安裝:使用命令提示字元 (CMD) 輸入
python檢查是否正確安裝。 -
安裝 Visual Studio Code (VS Code):配合 Code Runner 插件,提升開發效率。
-
編輯與運行程式:撰寫 Python 檔案後,可直接執行檔案或利用 VS Code 的 Terminal 測試程式。
練習:撰寫第一個 Python 程式
-
問候使用者:顯示 "請問貴姓大名?",並輸出使用者輸入的內容。
-
輸入年齡與體重:要求輸入年齡與體重並顯示於螢幕。
-
使用
input()和print():結合格式化輸出來顯示資訊。
撰寫程式碼風格指引
-
使用清晰的註解:方便未來維護與團隊協作。
-
遵守縮排規範:每級縮排使用 4 個空白。
-
善用空白與命名規範:提升程式可讀性。
透過不斷練習與應用,您將逐步掌握 Python 的核心特性與實際操作技能,為進階學習奠定扎實基礎。
3.
資料概念與 Python 資料型別
資料的基本概念回顧
在電腦中,所有資料均以二進制形式儲存,包括整數、小數、文字等。以下為資料表示的常見方式:
-
整數表示:以二進制表示,例如
100的二進制為0000 0000 0110 0100。 -
浮點數表示:遵循 IEEE 754 標準,例如
15.3以 32 位元表示。 -
文字表示:使用 ASCII 或 UTF-8 編碼,例如 "Visual C# 程式" 可用 UTF-8 萬國碼表示。
Python 資料型別與特性
-
數值型別:
int(整數)、float(浮點數)、complex(複數)。 -
序列型別:
list(列表)、tuple(元組)、range(範圍)。 -
映射型別:
dict(字典)。 -
集合型別:
set、frozenset(不可變集合)。 -
布林型別:
bool(布林值)。 -
二進制型別:
bytes、bytearray、memoryview。
使用 type() 函數可檢視物件的資料型別。
Python 與 C 語法比較
-
區塊表示:C 語言使用
{},Python 使用縮排。 -
敘述結尾:C 語言以
;結尾,Python 無需使用。 -
變數宣告:C 語言需先宣告變數型別,Python 則可動態建立變數。
Python 常見資料型別
-
整數(int)與浮點數(float)
-
無限制數值範圍,例如
googol = 10**100。 -
布林值為
True或False。
-
-
字串(str)
-
Python 字串不可變,需使用方法修改。
-
支援單引號(')、雙引號(")、多行引號(""")包裹。
-
變數與命名規範
-
命名規則:
-
變數名稱必須唯一。
-
第一個字元為字母或底線
_。 -
不可使用空格或保留字。
-
-
命名建議:使用有意義的名稱,例如
score表示分數。 -
動態變數:Python 中,變數為物件的標籤,例如
x = 2將2的物件指向變數x。
運算子分類與使用
-
算術運算子:加(
+)、減(-)、乘(*)、除(/)、次方(**)。 -
比較運算子:大於(
>)、小於(<)、等於(==)。 -
邏輯運算子:
and、or、not。 -
位元運算子:
&、|、^、~。 -
運算優先順序:依括號、指數、乘除加減的順序運算。
字串操作
-
基本操作:
-
串接:
'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. 選擇結構
選擇結構的類型:
-
單向選擇結構
-
雙向選擇結構
-
多向選擇結構
-
巢狀選擇結構
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 撰寫注意事項
-
縮排必須統一,建議使用 4 個空白鍵,不要混用 Tab 與空白鍵。
-
條件判斷後應加冒號
:。 -
提高可讀性時,應儘量使用邏輯運算。
結論
透過熟練運用循序結構、選擇結構和重複結構,可以有效解決各種問題,並提高程式的可讀性與執行效率。
6.
程式結構與運用
程式結構介紹
-
選擇結構
-
單向選擇結構
-
雙向選擇結構
-
多向選擇結構
-
巢狀選擇結構
-
-
迴圈結構
-
設計迴圈變數的初始條件、終止條件與增減值來控制執行次數。
-
應用於解決加總、排序、找最大值等問題。
-
Python 迴圈與生成式
-
for 與 while 迴圈
-
for適用於已知次數的重複動作。 -
while適用於次數不固定的迴圈,如猜數字遊戲。
-
-
巢狀迴圈
-
內層迴圈包含於外層迴圈中,例如印出九九乘法表。
-
-
跳出與跳過
-
break: 提早結束迴圈。 -
continue: 跳過本次迴圈,進入下一次迴圈。 -
else: 當迴圈正常結束時執行。
-
動手寫程式
-
印出 ASCII 字元表
s = int(input("請輸入 ASCII 的啟始值:")) e = int(input("請輸入 ASCII 的終止值:")) for i in range(s, e): print(f"{i}: {chr(i)}") -
計算加總
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}") -
猜數字遊戲
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("猜中了!") -
計算階乘
M = int(input("請輸入 M:")) fac, i = 1, 1 while fac < M: i += 1 fac *= i print(f"N 的最小值為:{i}") -
判斷質數
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} 不是質數") -
九九乘法表
for i in range(1, 10): for j in range(1, 10): print(f"{i}*{j}={i*j}", end="\t") print() -
星號圖形
for i in range(1, 6): print("*" * i) -
模擬登入系統
while True: acc = input("請輸入帳號:") pwd = input("請輸入密碼:") if acc == "abc" and pwd == "123": print("帳號與密碼正確") break else: print("登入失敗")
高效編程技巧
-
生成式的使用
-
串列生成式:
[x for x in range(1, 6)] -
字典生成式:
{letter: word.count(letter) for letter in set(word)} -
集合生成式:
{x for x in word}
-
-
費氏數列
n = int(input("輸入求第幾項費氏數列:")) a, b = 1, 1 print(a, b, end=" ") for _ in range(2, n): a, b = b, a + b print(b, end=" ") -
完全數檢測
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.
程序中常要使用函式來進行結構化設計,使程序比較簡樸、易讀、易於除錯,並提供豐富的程序庫支援。
函式概念
-
函式作用:
-
將相同功能的程序獨立出來,經由函式呼叫,傳入資料並回傳處理結果。
-
程序設計師可以使用已寫好的函式,對相同操作不斷利用,如需修改功能,只需更改該函式即可。
-
-
函式作用範圍:
-
其他程序設計師只需知道函式功能、輸入與輸出功能,並不需理解函式實作經過。
-
-
函式便於同居程序師協作:
-
在開發前定計好函式名稱與功能,各自完成函式之後進行整合,達成系統需求功能。
-
函式寫法
-
定義函式:
-
以
def開頭,作為函式命名的開始。 -
對應傳入的參數及傳出的資料進行設定,已寫好的函式範圍由所有空格所分。
-
若需回傳值,使用
return,沒有回傳值的函式可以省略。
-
-
呼叫函式:
-
在程序中參考到函式名稱,通過設定好的參數調用。
-
該調用可傳入資料,取得處理結果。
-
範例
基本函式例子
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}")
區域與全域變數
-
區域變數與全域變數作用範圍:
-
函式內變數為區域變數,其作用範圍限於函式內。
-
使用
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 程式匯入並使用,提供標準模組庫或自訂模組供呼叫。
模組的結構與使用
-
模組與函式
-
模組是更高層次的程式組織單元,可以包含函式、類別和變數。
-
使用
import指令匯入模組。
-
-
模組的類型
-
標準模組庫:Python 內建模組,如
math、random,涵蓋數學運算、字串處理、系統操作等常見功能。 -
自訂模組:由使用者建立的模組,包含自定義的函式與變數。
-
-
模組匯入方法
-
匯入整個模組:
import 模組名稱 -
匯入模組中特定函式:
from 模組名稱 import 函式名稱 -
為模組設置別名:
import 模組名稱 as 別名
-
範例:建立與使用模組
-
建立簡單模組
support.py
# support.py
status = ["剪刀", "石頭", "布"]
def figure_guess():
import random
return random.choice(status)
-
匯入與使用模組
-
匯入整個模組
import support
print(support.figure_guess())
-
匯入特定函式
from support import figure_guess
print(figure_guess())
-
使用別名
import support as sp
print(sp.figure_guess())
實作:剪刀石頭布遊戲
-
模組
guess.py
# guess.py
status = ["剪刀", "石頭", "布"]
def figure_guess():
import random
return random.choice(status)
-
主程式
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()
實作:樂透號碼選擇器
-
說明
-
玩家輸入 5 個 0~99 的樂透號碼。
-
電腦隨機選取不重複號碼。
-
根據猜中號碼數量給予獎金。
-
程式碼實作
# 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__ 等,用於實現類別的特定功能。
常見特殊方法
-
__init__(建構子)-
初始化物件屬性。
-
-
__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
-
__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
-
__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. 基礎例外處理
-
使用
try和except區塊來捕捉例外。
範例程式碼:
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("密碼輸入正確!")
物件導向設計原則總結
-
利用類別組織程式結構,增加程式的可讀性與重用性。
-
使用封裝來保護資料,避免不當存取。
-
透過繼承實現功能擴展與重用。
-
透過多型提供靈活性,簡化程式碼。
物件導向程式設計提供了強大的工具,幫助我們應對現代軟體開發中的複雜性,讓程式更具彈性與可維護性。
請先 登入 以發表留言。