Python 入門指南 5.0

單元 3 - 資料型態與變數

~~學習進度表~~

Python 內建許多有用的資料型態 (data type) ,像是布林值 (Boolean) 、整數 (integer) 、浮點數 (floating-point number) 、字串 (string) 、序對 (tuple) 、串列 (list) 、集合 (set) 、字典 (dictionary) 等

bool
int float complex
list range str tuple
set
dict

布林值中的真 (true) 為關鍵字 (keyword) True ,假 (false) 為關鍵字 False ,還有一個表示什麼都沒有的關鍵字 None 也是假,若變數 (variable) 被指派到 None ,這變數就如同空值,在條件測試中等同 False 。以下程式印出 NoneTrueFalse 的值

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 印出 None
print(None)
# 印出 True
print(True)
# 印出 False
print(False)

# 檔名: typedemo01.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

布林值比較常當作運算式 (expression) 之類的計算結果,然後提供給條件 (condition) 作判斷用,條件用在單元 6 介紹的選擇陳述 (statement) ,以及單元 7 介紹的迴圈 (loop) 中。

以下為 typedemo01.py 的執行結果

$ python typedemo01.py
None
True
False
$

正整數就是不含小數點的阿拉伯數字,加上負號就是負整數,例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 印出整數 0
print(0)
# 印出 -2 的絕對值
print(abs(-2))
# 3 的浮點數
print(float(3))

# 檔名: typedemo02.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

abs() 為內建函數 (function) ,會回傳小括弧內參數 (parameter) 的絕對值, float() 也是內建函數,回傳參數的浮點數,執行結果如下

$ python typedemo02.py
0
2
3.0
$

所謂浮點數就是帶有小數點的數字,使用上不必太擔心,整數或是浮點數的字面常數 (literal) 形式就是物件 (object) ,例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 印出浮點數運算是否相等
print(34.56 + 0.45 == 35.01)
# 印出 -5.5 的整數值
print(int(5.5))
# 判斷 3.000 是否為整數
print(3.000.is_integer())

# 檔名: typedemo03.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

執行結果如下

$ python typedemo03.py
False
5
True
$

注意第 2 行, Python 用連續兩個等號比較相等,而 34.56 加上 0.45 的確是 35.01 ,但是這裡比較相等得到的結果卻是 False

 2
print(34.56 + 0.45 == 35.01)

這是因為浮點數 float 型態在電腦中是模擬計算出來的, 34.56 + 0.45 得到的是 35.01 的近似值,所以會有誤差,導致不完全相等,如果想要知道 float 型態計算結果的實際近似值,可以利用內建函數 repr() 顯示計算結果,如下圖在 IDLE 中展示

下面第 4 行是用內建函數 int() 取得浮點數 5.5 的整數值

 4
print(int(5.5))

第 6 行由於浮點數字面常數就是物件,因此可以直接呼叫浮點數的方法 is_integer()is_integer() 用來判斷這個浮點數是否為整數,如果是整數就回傳 True ,不是就回傳 False

 6
print(3.000.is_integer())

Python 也支援複數計算,如下例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 印出複數 12 + 5j
print(12 + 5j)
# 印出 4.1 的複數形式
print(complex(4.1))
# 將 3 - 6j 轉換為共軛複數
print((3 - 6j).conjugate())

# 檔名: typedemo04.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

執行結果如下

$ python typedemo04.py
(12+5j)
(4.1+0j)
(3+6j)
$

字串是文字資料,程式中經常需要處理文字資料,在 Python 中,雙引號或單引號圍起來的文字資料都是字串,如下例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 印出字串的字元總數
print(len("Hello World!"))
# 印出跳脫序列
print("\t使用Tab縮排\n\n\n")
# 印出替換子字串後的字串
print("How are you?".replace("How", "What"))
# 印出格式化字串
table = {"number": 5, "item": "apple"}
print("There are %(number)d %(item)ss." % table)

# 檔名: typedemo05.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

執行結果如下

$ python typedemo05.py
12
        使用Tab縮排
 
 
 
What are you?
$

第 2 行利用內建函數 len() 得到字串 "Hello World!" 的字元 (character) 總數

 2
print(len("Hello World!"))

所謂字元在傳統程式語言如 C 語言以單引號與單一符號表示,如 'a' 表示字母 a ,但是在 Python 中並沒有字元的概念,單引號或雙引號都表示字串,這裡是以習慣把單一符號稱為字元。

內建函數 len() 回傳參數的元素 (element) 總量,字串的元素就是字元。

第 4 行先利用跳脫字元 \t 印出 Tab 鍵的縮排空格數,然後再用連續三個換行符號 \n 印出三個空白行

 4
print("\t使用Tab縮排\n\n\n")

跳脫序列是一些不可見字元,由反斜線 \ 開始,然後接一些特定的英文字元,常見的有

跳脫序列的字元說明
\a響鈴
\b倒退鍵
\f跳頁
\n印出新列
\r歸位符號
\ttab 鍵
\v垂直定位符號
\\印出反斜線
\?印出問號
\'印出單引號
\"印出雙引號

第 6 行用字串的方法 replace()"How" 換成 "What"

 6
print("How are you?".replace("How", "What"))

字串的字面常數同樣是物件,因此可以直接呼叫字串型態的方法。

第 8 行及第 9 行示範格式化字串的寫法

 8
 9
table = {"number": 5, "item": "apple"}
print("There are %(number)d %(item)ss." % table)

第 8 行設定字典變數 table

 8
table = {"number": 5, "item": "apple"}

字典會在單元 9 再詳細介紹,這裡先知道字典是配對的資料型態,用 "number" 會取得 5"item" 會取得 "apple" 。底下第 9 行就是印出格式化字串的地方,字串後的百分比符號後面接上字典變數,這是利用字典變數來顯示格式化字串中的變數資料

 9
print("There are %(number)d %(item)ss." % table)

以上有兩組格式化字串,下圖解析第一組

也就百分比符號開始,然後是小括弧圍住的變數,變數名稱為後面字典中的 key ,會代入 keyvalue ,最後一個字母 d 表示此變數為整數型態。

下圖解析第二組,注意第二組的最後一個字母 s 不是型態符號

以上的格式化方式被稱為字串插值 (string interpolation) , 這屬於 Python 舊型的格式化字串方式。

上面介紹了很多種資料型態的物件,大部分是都是直接用內建函數 print() 印出值,可是物件還是用變數存取才比較方便。接下來,我們繼續討論變數命名的規則。

中英文術語對照
布林值Boolean
字元character
條件condition
資料型態data type
字典dictionary
元素element
運算式expression
false
浮點數floating-point number
函數function
整數integer
關鍵字keyword
串列list
字面常數literal
迴圈loop
物件object
參數parameter
集合set
陳述statement
字串string
字串插值string interpolation
true
序對tuple
變數variable
重點整理
1. Python 內建的資料型態有整數、浮點數、複數、字串、串列、序對、集合、字典等。
2. 關鍵字 True 表示邏輯上的真, False 表示假, None 表示什麼都沒有的物件。
3. 整數或浮點數的字面常數就是物件,可如同物件變數呼叫方法。
4. 浮點數在電腦中是模擬計算出來的,可用內建函數 repr() 在互動環境顯示實際的計算結果。
5. Python 支援複數,在整數或浮點數後用加號連接虛部數字加 jJ 就是複數型態。
6. 字串是單引號或雙引號圍起來的內容。
7. 跳脫序列是一些不可見字元,由斜線開始。
8. 格式化字串是將字串加上特定的格式。
問題與討論
1. 為什麼要有 NoneNone 在程式中的用途為何?
2. 為什麼浮點數在電腦中是模擬計算出來的?
3. 什麼是跳脫字元?為什麼要在字串中使用跳脫字元?
4. 什麼是格式化字串?為什麼要使用格式化字串?
練習
1. 仿照 demo.py ,寫一個程式 exercise0301.py ,裡頭建立一個變數 a ,依序指派 1"2"3.0a ,然後印在命令列上。 參考程式碼
2. 寫一個程式 exercise0302.py 宣告布林型態的變數 a ,並將 a 設定為 True ,然後在命令列印出 anot a參考程式碼
3. 寫一個程式 exercise0303.py ,自定一個字串變數,然後用 len() 印出字串變數的長度。 參考程式碼
4. 承上題,寫一個程式 exercise0304.py ,改成用 input() 接收使用者輸入,然後用 len() 印出字串變數的長度。 參考程式碼
5. 承上題,寫一個程式 exercise0305.py ,改成將輸入字串呼叫 capitalize()capitalize() 會將第一個輸入英文單字改為大寫,以符合英文句子首字母的規則。 參考程式碼
6. 承上題,寫一個程式 exercise0306.py ,改成用 count() 計算 "n" 的數量,並印出結果。 參考程式碼
7. 承上題,寫一個程式 exercise0307.py ,改成用 find() 回傳 "n" 出現的第一個索引值,並印出結果。 參考程式碼
8. 承上題,寫一個程式 exercise0308.py ,改成用 split()" " 拆解使用者輸入字串為串列,並印出結果。 參考程式碼
9. 承上題,寫一個程式 exercise0309.py ,改成將輸入字串呼叫 upper()upper() 會將會將所有英文字母改為大寫。 參考程式碼
10. 寫一個程式 exercise0310.py ,用 '*' 印出一個三角形。 參考程式碼

上一頁 單元 2 - 如何執行 Python 程式
回 Python 入門指南 5.0 首頁
下一頁 單元 4 - 變數命名規則與縮排
回 Python 教材首頁
回程式語言教材首頁