跳到主要內容

Day 2 變數與資料型別

Day 2 變數與資料型別

引言

寫程式的過程中,變數與資料型別是處理資料的基礎。變數是存放資料的容器,資料型別則決定這筆資料有哪些特性、可以進行哪些操作。學會定義變數、認識各種資料型別,是學好 Python 的關鍵一步。

這篇文章會帶你了解 Python 中變數的觀念、如何定義變數,以及常見的資料型別,包括整數、浮點數、字串、布林值,還有串列、元組、字典與集合等容器型別。我們也會介紹變數的命名規則與撰寫風格建議,以及如何用 type() 檢查資料型別。

什麼是變數?如何在 Python 中定義變數

變數是在程式執行時用來存放資料的名稱。透過定義變數,我們可以給一筆資料一個名字,並在程式的其他地方用這個名字取用該筆資料。在 Python 中,變數不需要事先宣告型別,因為 Python 是動態型別語言,變數的型別由指定給它的值決定。

  1. 定義變數的基本語法

    在 Python 中定義變數非常簡單,只要用賦值符號 = 把值指定給變數即可。例如:

    x = 5  # 定義變數 x,並把整數 5 賦值給它
    name = "Alice"  # 定義變數 name,並把字串 "Alice" 賦值給它

    在這裡,x 是一個變數,被賦予整數 5;name 是另一個變數,被賦予字串 "Alice"。

  2. 變數的更新與覆寫

    變數的值可以修改,也就是說,我們可以在程式的不同地方給同一個變數新的值。例如:

    x = 10  # x 最初被賦予 10
    x = 15  # x 的值現在被更新為 15

    這樣就能依照需求,在程式執行過程中靈活調整變數的值。

  3. Python 的動態型別系統

    Python 和某些靜態型別語言不同,定義變數時不需要宣告型別。賦值時,Python 會根據值自動判斷變數的型別。例如:

    x = 5      # x 是整數
    x = 3.14   # x 變成浮點數
    x = "Hi"   # x 變成字串

    同一個變數在程式執行過程中可以存放不同型別的值,這是 Python 的彈性之一。

常見資料型別

在 Python 中,資料型別決定我們可以對變數進行哪些操作。理解常見的資料型別,是學會用 Python 處理各種資料的基礎。以下先介紹幾個基本的資料型別。

整數(int)

整數是不帶小數點的數字,可以是正數、負數或零。Python 可以處理非常大的整數,只要電腦的記憶體足夠,就沒有限制。

age = 25  # 定義整數變數 age
negative_number = -10  # 定義負整數

浮點數(float)

浮點數是帶有小數點的數字,用來表示非整數的數值。Python 中的浮點數通常對應數學上的實數,例如 3.14、-0.001 等。

pi = 3.14159  # 定義浮點數變數 pi
temperature = -5.5  # 定義負的浮點數

浮點數常用於涉及分數或小數的運算,特別是在科學計算與工程應用中。

字串(str)

字串是一連串字元組成的資料,通常用來表示文字。Python 的字串可以用單引號或雙引號定義,兩種寫法效果相同。

name = "Alice"  # 使用雙引號定義字串
greeting = 'Hello, world!'  # 使用單引號定義字串

字串可以進行多種操作,包括串接、重複和索引。

字串的串接

first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name  # 用 + 串接字串
print(full_name)  # 輸出:John Doe

重複字串

repeat_str = "ha" * 3  # 重複字串 3 次
print(repeat_str)  # 輸出:hahaha

字串索引與切片

字串中的每個字元都有一個索引值,從 0 開始計算。可以透過索引取得特定字元,也可以用切片取出字串的一部分。

name = "Python"
print(name[0])  # 輸出:P
print(name[-1])  # 輸出:n(負索引表示從後面數回來)
print(name[1:4])  # 輸出:yth(從索引 1 開始,取到索引 4 之前)

布林值(bool)

布林值只有兩種可能的值:True(真)與 False(假)。這種資料型別在條件判斷與邏輯運算中非常重要。

is_python_fun = True
is_sun_hot = True
is_raining = False

布林值通常用在條件判斷中,幫助程式做出決定。

is_adult = True
if is_adult:
    print("You are an adult.")
else:
    print("You are not an adult.")

容器型別

在 Python 中,容器型別用來存放與操作多筆資料。它們比單一數值更靈活,可以輕鬆進行資料的新增、查詢與修改。常見的容器型別有串列(list)、元組(tuple)、字典(dict)與集合(set),每種各有特點,適合不同情境。

以下分別介紹這些容器型別的特點、操作方法與實際應用情境。

串列(list)

串列的特點

串列(list)是 Python 中最常用的容器型別之一,用來存放一組有序的元素。串列內的元素可以是任意型別,而且串列是可變的,可以修改、新增或刪除元素。串列使用方括號 [] 定義,元素之間以逗號分隔。

範例:

fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed_list = [1, "hello", 3.14, True]

串列的操作

Python 提供豐富的操作來處理串列,包括新增、刪除、查詢與修改元素。

存取元素:可以透過索引存取串列中的元素,索引從 0 開始。

fruits = ["apple", "banana", "cherry"]
print(fruits[0])  # 輸出 "apple"

修改元素:可以透過索引直接修改串列中的元素。

fruits[1] = "orange"
print(fruits)  # 輸出 ['apple', 'orange', 'cherry']

新增元素:使用 append() 可以把新元素加到串列尾端,或用 insert() 把元素插入指定位置。

fruits.append("grape")  # 把元素加到串列尾端
fruits.insert(1, "blueberry")  # 在索引 1 的位置插入元素
print(fruits)  # 輸出 ['apple', 'blueberry', 'orange', 'cherry', 'grape']

刪除元素:可以用 remove() 刪除指定元素,或用 pop() 刪除特定位置的元素。

fruits.remove("orange")  # 刪除 "orange"
fruits.pop(0)  # 刪除索引 0 的元素
print(fruits)  # 輸出 ['blueberry', 'cherry', 'grape']

串列長度:使用 len() 函式可以取得串列的元素個數。

print(len(fruits))  # 輸出 3

串列切片:可以使用切片取得串列的一部分。

print(fruits[1:3])  # 輸出 ['cherry', 'grape']

串列應用情境

串列非常有彈性,適合存放與操作多筆相關資料。例如,可以用串列存放學生姓名、一組數字或不同類型的物品。串列也很容易和迴圈(例如 for 迴圈)搭配,逐筆處理資料。

元組(tuple)

元組的特點

元組(tuple)和串列類似,也是有序的元素集合,可以包含不同型別的元素。差別在於元組是不可變的,一旦建立就無法修改內容。元組使用小括號 () 定義。

範例:

coordinates = (10.0, 20.0)
person_info = ("Alice", 25, "New York")

元組中的元素可以透過索引存取,但無法修改或刪除。

元組的操作

存取元素:透過索引存取元組中的元素。

print(coordinates[0])  # 輸出 10.0

長度:使用 len() 函式取得元組長度。

print(len(coordinates))  # 輸出 2

切片:元組也支援切片操作。

print(person_info[0:2])  # 輸出 ('Alice', 25)

元組不可變的特性,讓它在某些情況下更安全,因為內容不會被意外修改。

元組應用情境

元組的不可變性讓它特別適合存放不應該被修改的資料,例如座標、設定值,或作為字典的鍵。由於元組不可變,Python 也能對它進行一些最佳化,因此元組的操作速度通常比串列快。

字典(dict)

字典的特點

字典(dict)用來存放鍵值對(key-value pair),每個鍵都是唯一的,並對應到一個值。字典使用花括號 {} 定義,鍵與值之間用冒號 : 分隔,各組鍵值對之間用逗號分隔。從 Python 3.7 開始,字典會保留插入順序。

範例:

person = {
    "name": "Alice",
    "age": 25,
    "city": "New York"
}

在這個例子中,"name" 是一個鍵,對應的值是 "Alice";"age" 是另一個鍵,對應的值是 25。

字典的操作

存取值:可以透過鍵存取字典中的值。

print(person["name"])  # 輸出 "Alice"

修改值:可以透過鍵修改字典中的值。

person["age"] = 30
print(person["age"])  # 輸出 30

新增鍵值對:可以直接指定新的鍵值對。

person["email"] = "alice@example.com"
print(person)  # 輸出新增後的字典

刪除鍵值對:可以使用 del 關鍵字刪除指定的鍵值對。

del person["city"]
print(person)  # 輸出刪除 "city" 後的字典

取得所有鍵:使用 keys() 方法取得字典中的所有鍵。

print(person.keys())  # 輸出 dict_keys(['name', 'age', 'email'])

取得所有值:使用 values() 方法取得字典中的所有值。

print(person.values())  # 輸出 dict_values(['Alice', 30, 'alice@example.com'])

字典長度:使用 len() 函式取得字典中鍵值對的數量。

print(len(person))  # 輸出 3

字典應用情境

字典在存放與查詢資料上非常有效率,特別適合用來儲存需要快速查找的鍵值對資料,例如使用者資料、設定值,或其他透過鍵找值的結構。在實際開發中,字典經常被用來實現對應與查詢功能。

集合(set)

集合的特點

集合(set)是無序、不含重複元素的容器。集合內的元素必須是可雜湊(hashable)的物件,例如整數、字串、元組;集合本身是可變的,可以新增或刪除元素。集合使用花括號 {} 定義,寫法和字典類似,但集合只存放元素,沒有鍵值對。

範例:

numbers = {1, 2, 3, 4, 5}

集合中的每個元素都是唯一的,重複的元素會自動去除。

範例:

duplicates = {1, 2, 2, 3, 4, 4, 5}
print(duplicates)  # 輸出 {1, 2, 3, 4, 5}

集合的操作

新增元素:使用 add() 方法可以新增元素。

numbers.add(6)
print(numbers)  # 輸出 {1, 2, 3, 4, 5, 6}

刪除元素:使用 remove() 或 discard() 方法可以刪除集合中的元素。

numbers.remove(3)
print(numbers)  # 輸出 {1, 2, 4, 5, 6}

集合運算:集合支援常見的數學集合運算,例如聯集、交集與差集。

聯集(union):回傳兩個集合中所有不重複的元素。

a = {1, 2, 3}
b = {3, 4, 5}
print(a | b)  # 輸出 {1, 2, 3, 4, 5}

交集(intersection):回傳兩個集合中都存在的元素。

print(a & b)  # 輸出 {3}

差集(difference):回傳只存在於其中一個集合的元素。

print(a - b)  # 輸出 {1, 2}

檢查元素是否存在:可以使用 in 運算子檢查元素是否在集合中。

print(1 in numbers)  # 輸出 True
print(7 in numbers)  # 輸出 False

集合應用情境

集合適合需要去除重複資料的情境。例如,可以用集合存放資料集中唯一的元素,或找出兩組資料的共同元素與差異。在處理大量資料時,集合的查找與比較操作通常比串列更有效率。

小結語

Python 的容器型別提供豐富的工具來處理各種資料結構需求。串列是靈活的有序集合,適合經常修改的資料;元組是不可變的有序集合,適合存放固定資料;字典是高效的鍵值對集合,適合快速查找;集合則是無序、去重的資料集合,適合集合運算與去重。

型別 語法 可變 順序 適合情境
串列 list [1, 2, 3] 可變 有序 需要經常新增、修改、刪除的元素集合
元組 tuple (1, 2, 3) 不可變 有序 不該被修改的固定資料,例如座標、設定值
字典 dict {"key": "value"} 可變 有序(3.7 版起保留插入順序) 需要用鍵快速查值的資料
集合 set {1, 2, 3} 可變 無序 去重與集合運算

了解這些容器型別的特性與使用情境,可以幫助你在寫 Python 時選對資料結構,讓程式更有效率、也更好讀。在日常開發中,這些容器能大幅簡化資料處理流程,讓程式碼更簡潔明確。

變數命名規則與風格建議

為了讓程式碼更容易閱讀,Python 有一套變數命名的規則與風格建議:

  1. 變數名稱只能包含字母、數字與底線,而且不能以數字開頭。例如 name_1 是合法名稱,1_name 則不合法。
  2. 變數名稱區分大小寫,age 和 Age 是兩個不同的變數。
  3. 使用能描述用途的名稱:變數名稱應該清楚表達用途。例如 count 比 c 更好,因為它更具描述性。
  4. 遵循 Python 命名風格:Python 變數一般使用蛇形命名法(snake_case),也就是用底線分隔單字。例如 student_name 是良好的變數名稱。

type() 函式檢查資料型別

有時我們需要檢查變數的資料型別,確認是否符合預期。Python 提供內建函式 type(),可以用來檢查變數的型別。

x = 10
print(type(x))  # 輸出:<class 'int'>
name = "Alice"
print(type(name))  # 輸出:<class 'str'>

type() 函式在除錯和檢查變數型別時非常有用。

結語

理解變數與資料型別是掌握 Python 的關鍵。透過今天的文章,你已經學會如何定義變數,也認識了 Python 常見的資料型別,包括整數、浮點數、字串、布林值,以及串列、元組、字典與集合。掌握這些基礎,能幫助你在接下來的學習中處理更複雜的資料結構與邏輯。

明天,我們會進一步探討 Python 的運算子與邏輯運算,並學習如何用條件判斷讓程式做決定。

留言

這個網誌中的熱門文章

Day 1 Python 簡介與環境設定

Day 1 Python 簡介與環境設定 引言 在現在的科技環境裡,程式設計已經是一項重要技能。無論你是對資料科學有興趣、想成為開發者,或是想踏入人工智慧(AI)領域,學會寫程式都能明顯提升你的競爭力。在眾多程式語言中,Python 因為語法簡單、功能強大、應用範圍廣泛,成為許多人進入程式世界的第一選擇。這篇文章會帶你認識 Python 的背景與優勢,並一步步教你在不同系統上安裝與設定 Python 開發環境,最後寫出第一支 Python 程式。 為什麼選擇 Python? Python 是一種高階程式語言,由 Guido van Rossum 在 1991 年發布。Python 的設計哲學強調程式碼的可讀性,並用縮排來定義程式區塊,這點和許多使用大括號的語言不同。簡潔的語法讓它成為初學者的理想選擇;就算是經驗豐富的開發者,也能用它完成複雜的專案。 Python 的優勢如下: 簡單易學 :Python 的語法清楚、結構簡潔,初學者很快就能上手。和其他語言相比,學習曲線相對平緩,不需要先弄懂一堆複雜觀念,就能開始寫程式。 應用範圍廣泛 :從資料科學、網頁開發、人工智慧、機器學習、自動化測試到網路爬蟲,Python 都有大量開源函式庫與工具支援,而且在這些領域都扮演關鍵角色。 豐富的函式庫與框架 :Python 的函式庫生態系非常龐大。做資料分析有 NumPy、Pandas;開發網站有 Django、Flask;做深度學習有 TensorFlow、PyTorch。各種需求幾乎都能找到對應的套件,讓開發更有效率。 跨平台支援 :Python 支援 Windows、macOS、Linux 等作業系統,程式通常不需要太多修改就能跨平台執行,讓開發與部署更有彈性。 活躍的社群 :Python 擁有龐大的開發者社群。學習或開發上遇到問題,幾乎都能在社群與論壇(例如 Stack Overflow)找到答案,對初學者來說是很強的後盾,也能減少卡關時的挫折感。 Python 的應用領域 Python 的流行與強大功能,讓許多領域都開始大量使用它。以下是幾個常見的應用方向: 資料科學 :隨著大數據與人工智慧興起,資料科學大量使用 Python。NumPy、Pandas 與 Matplotlib 等工具能處理和分析龐...

Python 從入門到 PyTorch 深度學習:開啟 AI 世界的大門

Python 從入門到 PyTorch 深度學習:開啟 AI 世界的大門 隨著人工智慧(AI)與深度學習(Deep Learning)快速發展,越來越多人對這些技術產生興趣。不論你是想踏入 AI 領域的初學者,還是已經有程式基礎的開發者,學好 Python 與深度學習框架(例如 PyTorch),都能為你打開更多可能。 為什麼選擇 Python? Python 已經是資料科學與人工智慧領域的首選語言。它的語法簡潔、容易上手,而且擁有龐大的生態系與大量開源函式庫。無論是資料處理、資料視覺化,還是建立機器學習與深度學習模型,Python 都能勝任。對想進入 AI 或資料科學領域的人來說,它幾乎是必備工具。 PyTorch 是什麼? PyTorch 是由 Meta(原 Facebook)AI 研究團隊開發的開源深度學習框架,以易用、靈活和動態計算圖著稱,是許多 AI 研究人員與開發者的首選。相較於其他框架,PyTorch 的寫法更貼近原生 Python,對初學者相對友善。無論是簡單的實驗,還是複雜的深度學習模型,PyTorch 都能提供強大的支援。 這個系列能帶給你什麼? 這個系列會從 Python 的基礎開始,帶你一步一步學習,最後能自己用 PyTorch 建立深度學習模型。即使你完全沒有寫過程式,也能跟著文章的節奏累積技能,理解 AI 與深度學習的核心觀念。 本系列涵蓋的主題 Python 基礎:從變數、條件判斷到函式與模組。 資料處理工具:用 NumPy 與 Pandas 有效率地操作資料。 資料視覺化:用 Matplotlib 與 Seaborn 把資料畫成圖表。 深度學習的數學基礎:線性代數、微積分與機率。 PyTorch 入門:理解張量、模型建構與 GPU 加速。 基礎深度學習模型:CNN 與 RNN 的實作應用。 深度學習專案實戰:從資料前處理到模型部署的端到端流程。 誰適合這個系列? 程式初學者 :如果你對 AI 充滿好奇,卻還沒寫過程式,系列的第一部分會帶你快速上手 Python,並幫助你理解深度學習的基本觀念。 資料科學愛好者 :如果你已經熟悉一些資料處理方法,進階部分會教你如何用 PyTorch 建構深度學習模型。 開發者與研究人員 :想更深入了...