2 基本資料類型

暸解可以運用的資料類型是學習一個程式語言的基本功(其他像是之後章節會涵蓋的資料容器,流程控制或者迭代語法也歸類於基本功),它的枯燥無味常讓初學者感到索然無味,但是它對未來應用的重要性絕對無庸置疑,我們用一張表格整理 Python 的基本資料類型:

基本資料類型 基本資料類型英文 範例
整數 int 87
浮點數 float 8.7
複數 complex 8 + 7j
布林 bool TrueFalse
文字 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")

圖 2-1 type() 函數

這裡值得注意的地方是,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

圖 2-2 計算機應用

讀者大概會對 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 不同數值類型的運算

2.3 布林(bool)

當我們需要進行條件判斷的時候就需要仰賴布林(bool),布林只有 TrueFalse 這兩個值。這裡值得注意的觀念是,Python 是對大小寫敏感(case-sensitive)的程式語言,我們輸入 True 會被成功識別為布林,但是 TRUE 則不會被識別成功喔!

print type(True)
print type(TRUE)

圖 2-4 布林

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]

圖 2-5 判斷運算符號

讀者如果對 print 8 in [7, 8] 中的 [7, 8] 感到陌生的話不用擔心,這是一種叫做清單(list)的資料容器,我們會在之後的章節細談。

2.3.2 布林進行數學運算

我們把布林也加進來做數學運算,看看會發生什麼事情:

print 8 + True
print 8 - False
print 8 * False
print 8 / True

圖 2-6 布林進行數學運算

為什麼 TrueFalse 納入數學運算沒有任何問題呢?原來是因為在 Python 中,True11.01 + 0j 是相等的;而 False00.00 + 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-7 布林進行數學運算(2)

2.3.3 邏輯運算符號

進行條件判斷的時候我們常常會需要連結多個條件,這時我們就可以使用邏輯運算符號來將條件連結起來:

邏輯運算符號 作用
and& 判斷兩側的條件是否都為 True
or(` `) 判斷兩側的條件是否至少有一側為 True
not 將布林的 TrueFalse 反轉
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

圖 2-8 邏輯運算符號

只有當 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-9 文字

2.4.1 文字與數學運算符號

我們可以利用 + 以及 * 這兩個數學運算符號來合併文字與複製文字;至於其他的數學運算符號,就不適用文字這樣的資料類型。

print "I'm" + " loving" + " it!"
print "I'm loving it" + "!" * 3

圖 2-10 文字與數學運算符號

2.4.2 文字切割

我們可以利用中括號([])搭配索引值切割文字,Python 的索引值慣例跟多數程式語言相同,由 0 起始。

print "Python"[0]
print "Python"[1]
print "Python"[-1]
print "Python"[1:]
print "Python"[:2]

圖 2-11 文字切割

在使用冒號(:)進行文字切割的時候需要注意,位於冒號前索引值的字元會被包含,但位於冒號後索引值的字元則不會被包含。所以範例中 print "Python"[1:] 的輸出有包含位於索引值 1 的 y;但是 print "python"[:2] 的輸出則沒有包含位於索引值 2 的 t

2.4.3 輸出格式化

Python 可以利用 % 來對文字的輸出進行格式化,像是 .3f 可以指定輸出的浮點數有三位數。

print "圓周率是 %.3f" % 3.141591

圖 2-12 輸出格式化

或者使用 i 指定為整數格式的輸出。

print "圓周率的整數部分是 %i" % 3.141591

圖 2-13 輸出格式化(2)

當然可以使用 s 指定為文字格式的輸出,並且指定不只一個文字的格式。

print "%s是 %.3f" % ("圓周率", 3.141591)

圖 2-14 輸出格式化(3)

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-15 賦值

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-16 賦值運算符號

2.6 資料類型的轉換

不同的資料類型並不是壁壘分明、井水不犯河水的關係,比如前面的章節中我們看到布林(True 以及 False)在與整數作加減運算的時候就會自動地被轉換為 10。我們也能使用函數進行資料類型的轉換,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-17 資料類型的轉換

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_heightmy_weight 計算您的 身體質量指數(Body Mass Index,BMI),將計算結果指派給一個物件 bmi 並且印出來,BMI 計算公式為:

my_height = ___
my_weight = ___
bmi = ___ / (___ / 100)**2

results matching ""

    No results matching ""