Python 入門指南 5.0
單元 3 - 資料型態與變數
Python 內建許多有用的資料型態 (data type) ,像是布林值 (Boolean) 、整數 (integer) 、浮點數 (floating-point number) 、字串 (string) 、序對 (tuple) 、串列 (list) 、集合 (set) 、字典 (dictionary) 等
int float complex
list range str tuple
set
dict
布林值中的真 (true) 為關鍵字 (keyword) True ,假 (false) 為關鍵字 False ,還有一個表示什麼都沒有的關鍵字 None 也是假,若變數 (variable) 被指派到 None ,這變數就如同空值,在條件測試中等同 False 。以下程式印出 None 、 True 、 False 的值
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 | 歸位符號 |
\t | tab 鍵 |
\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 ,會代入 key 的 value ,最後一個字母 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 支援複數,在整數或浮點數後用加號連接虛部數字加 j 或 J 就是複數型態。 |
6. 字串是單引號或雙引號圍起來的內容。 |
7. 跳脫序列是一些不可見字元,由斜線開始。 |
8. 格式化字串是將字串加上特定的格式。 |
問題與討論 |
---|
1. 為什麼要有 None ? None 在程式中的用途為何? |
2. 為什麼浮點數在電腦中是模擬計算出來的? |
3. 什麼是跳脫字元?為什麼要在字串中使用跳脫字元? |
4. 什麼是格式化字串?為什麼要使用格式化字串? |
練習 |
---|
1. 仿照 demo.py ,寫一個程式 exercise0301.py ,裡頭建立一個變數 a ,依序指派 1 、 "2" 、 3.0 給 a ,然後印在命令列上。 參考程式碼 |
2. 寫一個程式 exercise0302.py 宣告布林型態的變數 a ,並將 a 設定為 True ,然後在命令列印出 a 與 not 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 ,用 '*' 印出一個三角形。 參考程式碼 |