2 基本資料類型
暸解可以運用的資料類型是學習一個程式語言的基本功(其他像是之後章節會涵蓋的資料容器,流程控制或者迭代語法也歸類於基本功),它的枯燥無味常讓初學者感到索然無味,但是它對未來應用的重要性絕對無庸置疑,我們用一張表格整理 Python 的基本資料類型:
基本資料類型 | 基本資料類型英文 | 範例 |
---|---|---|
整數 | int | 87 |
浮點數 | float | 8.7 |
複數 | complex | 8 + 7j |
布林 | bool | True 、False |
文字 | str | "Introduction to Python Data Science" |
2.1 請 Python 回傳資料類型
初學者如果對資料類型還不熟,可以請 Python 回傳答案告訴我們,只要使用函數 type()
然後將未知的資料類型當作函數的輸入即可,舉例來說,我們可以新增一個 Python 2 的 Notebook 並在第一個 cell 中請 Python 回傳基本的資料類型:
print type(87)
print type(8.7)
print type(8 + 7j)
print type(True)
print type(False)
print type("Introduction to Python Data Science")
這裡值得注意的地方是,Python 中用來表示複數中虛部的符號是使用 j
而不是我們在數學課中習慣使用的 i
。
2.2 使用 Python 當作計算機
簡單的應用就是將 Python 當作計算機對整數(int)、浮點數(float)與複數(complex)進行數學運算,常用的運算符號有:
運算符號 | 作用 |
---|---|
+ |
加 |
- |
減 |
* |
乘 |
/ |
除 |
** |
次方 |
% |
回傳餘數 |
print 8 + 7
print 8 - 7
print 8 * 7
print 8 / 7
print 8 ** 2
print 8 % 7
讀者大概會對 print 8 / 7
的輸出感到不滿,在不能整除的情況之下照理答案應該要是浮點數或者分數才對,怎麼會回傳 1
呢?這是因為除數與被除數都是整數(int)這個資料類型,所以答案也會是同樣的資料類型。如果我們在算式中涵蓋不同資料類型,答案就會是最能廣泛適用的資料類型,像是整數與浮點數進行運算後,答案會是浮點數;整數與複數進行運算後,答案會是複數。
print 8 / 7.0
print 8 + (8 + 7j)
print "---"
print type(8 / 7.0)
print type(8 + (8 + 7j))
2.3 布林(bool)
當我們需要進行條件判斷的時候就需要仰賴布林(bool),布林只有 True
與 False
這兩個值。這裡值得注意的觀念是,Python 是對大小寫敏感(case-sensitive)的程式語言,我們輸入 True
會被成功識別為布林,但是 TRUE
則不會被識別成功喔!
print type(True)
print type(TRUE)
2.3.1 判斷運算符號
除了直接輸入布林,我們也可以藉由判斷運算符號進行條件判斷得到布林的輸出,常用的判斷運算符號有:
判斷運算符號 | 作用 |
---|---|
== |
是否等於 |
!= |
是否不等於 |
> |
是否大於 |
< |
是否小於 |
>= |
是否大於等於 |
<= |
是否小於等於 |
in |
是否包含於 |
not in |
是否不包含於 |
print 8 == 7
print 8 != 7
print 8 > 7
print 8 < 7
print 8 >= 7
print 8 <= 7
print 8 in [7, 8]
print 8 not in [7, 8]
讀者如果對 print 8 in [7, 8]
中的 [7, 8]
感到陌生的話不用擔心,這是一種叫做清單(list)的資料容器,我們會在之後的章節細談。
2.3.2 布林進行數學運算
我們把布林也加進來做數學運算,看看會發生什麼事情:
print 8 + True
print 8 - False
print 8 * False
print 8 / True
為什麼 True
和 False
納入數學運算沒有任何問題呢?原來是因為在 Python 中,True
跟 1
、1.0
或 1 + 0j
是相等的;而 False
跟 0
、0.0
或 0 + 0j
是相等的。
print True == 1
print True == 1.0
print True == 1 + 0j
print("---")
print False == 0
print False == 0.0
print False == 0 + 0j
2.3.3 邏輯運算符號
進行條件判斷的時候我們常常會需要連結多個條件,這時我們就可以使用邏輯運算符號來將條件連結起來:
邏輯運算符號 | 作用 | |
---|---|---|
and (& ) |
判斷兩側的條件是否都為 True |
|
or (` |
`) | 判斷兩側的條件是否至少有一側為 True |
not |
將布林的 True 或 False 反轉 |
print True and True
print True and False
print False & True
print False & False
print("---")
print True or True
print True or False
print False | True
print False | False
print("---")
print not True
print not False
只有當 and
(&
)兩側的敘述都是 True
的時候才會回傳 True
;而 or
(|
)則只需要有其中一側的敘述是 True
就會回傳 True
。
2.4 文字(str)
我們可以使用單引號('
)或雙引號("
)來建立文字(str),假如我們希望在文字中納入單引號或雙引號,可以搭配使用斜線(\
)進行跳脫。
print 'I am loving it!'
print 'I\'m loving it!'
print 'I don\'t think you\'ll ever be just "anybody".'
print "I don't think you'll ever be just \"anybody\"."
2.4.1 文字與數學運算符號
我們可以利用 +
以及 *
這兩個數學運算符號來合併文字與複製文字;至於其他的數學運算符號,就不適用文字這樣的資料類型。
print "I'm" + " loving" + " it!"
print "I'm loving it" + "!" * 3
2.4.2 文字切割
我們可以利用中括號([]
)搭配索引值切割文字,Python 的索引值慣例跟多數程式語言相同,由 0 起始。
print "Python"[0]
print "Python"[1]
print "Python"[-1]
print "Python"[1:]
print "Python"[:2]
在使用冒號(:)進行文字切割的時候需要注意,位於冒號前索引值的字元會被包含,但位於冒號後索引值的字元則不會被包含。所以範例中 print "Python"[1:]
的輸出有包含位於索引值 1 的 y
;但是 print "python"[:2]
的輸出則沒有包含位於索引值 2 的 t
。
2.4.3 輸出格式化
Python 可以利用 %
來對文字的輸出進行格式化,像是 .3f
可以指定輸出的浮點數有三位數。
print "圓周率是 %.3f" % 3.141591
或者使用 i
指定為整數格式的輸出。
print "圓周率的整數部分是 %i" % 3.141591
當然可以使用 s
指定為文字格式的輸出,並且指定不只一個文字的格式。
print "%s是 %.3f" % ("圓周率", 3.141591)
2.5 賦值
Python 跟多數程式語言相同利用一個等號 =
來為物件賦值,將 =
右邊的值指派給=
左邊的物件。
my_int = 87
my_float = 8.7
my_complex = 8 + 7j
my_bool = True
my_str = "Introduction to Python Data Science"
print type(my_int)
print type(my_float)
print type(my_complex)
print type(my_bool)
print type(my_str)
2.5.1 賦值運算符號
Python 同時具備很便利的賦值運算符號,可以讓我們的程式更簡潔。
賦值運算符號 | 範例 |
---|---|
+= |
a = a + 2 可以簡寫為 a += 2 |
-= |
a = a - 2 可以簡寫為 a -= 2 |
*= |
a = a * 2 可以簡寫為 a *= 2 |
/= |
a = a / 2 可以簡寫為 a /= 2 |
**= |
a = a ** 2 可以簡寫為 a **= 2 |
%= |
a = a % 2 可以簡寫為 a %= 2 |
a = 7
a += 2
print a
a -= 2
print a
a *= 2
print a
a /= 2
print a
a **= 2
print a
a %= 2
print a
2.6 資料類型的轉換
不同的資料類型並不是壁壘分明、井水不犯河水的關係,比如前面的章節中我們看到布林(True
以及 False
)在與整數作加減運算的時候就會自動地被轉換為 1
與 0
。我們也能使用函數進行資料類型的轉換,Python 中轉換資料類型的函數名稱跟資料類型是相互對應的,比如使用 int()
函數可以將輸入的物件轉換成為整數類型:
|轉換資料類型的函數|描述|
|int()
|轉換資料類型為 int
|
|float()
|轉換資料類型為 float
|
|complex()
|轉換資料類型為 complex
|
|bool()
|轉換資料類型為 bool
|
|str()
|轉換資料類型為 str
|
我們利用最有彈性的布林來展示這幾個函數的功能。
my_bool = True
print int(my_bool)
print type(int(my_bool))
print float(my_bool)
print type(float(my_bool))
print complex(my_bool)
print type(complex(my_bool))
print str(my_bool)
print type(str(my_bool))
my_int = 0
print bool(my_int)
print type(bool(my_int))
2.7 日期與時間
日期與時間是在資料科學應用中常見的格式,Python 並沒有內建日期與時間的資料類型,但是我們可以藉由載入 datetime
套件來處理日期與時間,關於日期與時間請參考附錄 2:日期與時間。
練習題
- 1 公里等於 0.62137 英里,請將 42.195 公里換算為英里並且將答案印出來。
print ___ * ___
- 將您的身高(公分,浮點數)指派給一個物件
my_height
,並且將my_height
印出來
my_height = ___
print my_height
- 將您的體重(公斤,浮點數)指派給一個物件
my_weight
,並且將my_weight
印出來
my_weight = ___
print my_weight
- 利用
my_height
與my_weight
計算您的 身體質量指數(Body Mass Index,BMI),將計算結果指派給一個物件bmi
並且印出來,BMI 計算公式為:
my_height = ___
my_weight = ___
bmi = ___ / (___ / 100)**2